summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorred031000 <rubenru09@aol.com>2020-05-06 16:36:59 +0100
committerGitHub <noreply@github.com>2020-05-06 16:36:59 +0100
commit5bfef3f1f96910c8824e56a959a423541a965f5d (patch)
tree5070e8c98af7cd7a2d842cf1cf1a85ff0ae0f9ac
parent55faa9e2d1b393e832f95485f5412425136bd6b7 (diff)
parent283dda9a39380d52499507baaab063ec64020a64 (diff)
Merge pull request #63 from PikalaxALT/pikalax_work
Disassemble modules 20-27; rudimentary dependency scanning
-rw-r--r--arm9/Makefile20
-rw-r--r--arm9/arm9.lcf144
-rw-r--r--arm9/asm/unk_020AF030.s4
-rw-r--r--arm9/global.inc68
-rw-r--r--arm9/modules/20/asm/module_20.s4570
-rw-r--r--arm9/modules/21/asm/module_21.s726
-rw-r--r--arm9/modules/22/asm/module_22.s1845
-rw-r--r--arm9/modules/23/asm/module_23.s2794
-rw-r--r--arm9/modules/24/asm/module_24.s1184
-rw-r--r--arm9/modules/25/asm/module_25.s663
-rw-r--r--arm9/modules/26/asm/module_26.s793
-rw-r--r--arm9/modules/27/asm/module_27.s1453
-rw-r--r--arm9/modules/28/asm/module_28.s2967
13 files changed, 17209 insertions, 22 deletions
diff --git a/arm9/Makefile b/arm9/Makefile
index 30a6f10f..aa41512d 100644
--- a/arm9/Makefile
+++ b/arm9/Makefile
@@ -59,6 +59,9 @@ O_FILES := $(foreach file,$(C_FILES),$(BUILD_DIR)/$(file:.c=.o)) \
# Overlay modules
# FIXME: lcf doesn't like this
# BIN_FILES := $(wildcard files/*.__AT_*)
+.SECONDARY:
+.DELETE_ON_ERROR:
+.SECONDEXPANSION:
##################### Compiler Options #######################
@@ -151,11 +154,17 @@ build/src/FUN_020910A4.o: MWCCVERSION = 1.2/sp2p3
####################### Everything Else ######################
-$(BUILD_DIR)/%.o: %.c
+ifeq (,$(NODEP))
+$(BUILD_DIR)/%.o: dep = $(shell grep -E '(#\s*|\.)(include|incbin)\s*"(\S+?)"' $*.[cs] | cut -d'"' -f2 | sort -u)
+else
+$(BUILD_DIR)/%.o: dep :=
+endif
+
+$(BUILD_DIR)/%.o: %.c $$(dep)
$(CC) -c $(CFLAGS) -o $@ $<
-$(BUILD_DIR)/%.o: %.s
- $(AS) $(ASFLAGS) $< -o $@
+$(BUILD_DIR)/%.o: %.s $$(dep)
+ $(AS) $(ASFLAGS) -o $@ $<
$(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT) $(LD_TEMPLATE) undefined_syms.txt macros.lcf.inc
# $(MAKELSF) $(MAKELSF_FLAGS) $< $(LD_TEMPLATE) $@
@@ -185,6 +194,11 @@ DUMMY != mkdir -p $(ALL_DIRS)
%.png: ;
%.pal: ;
+# Included files
+baserom.%: ;
+%.h: ;
+%.inc: ;
+
$(BIN_FILES): ;
$(BUILD_DIR)/data/icon.o: graphics/icon.4bpp graphics/icon.gbapal
diff --git a/arm9/arm9.lcf b/arm9/arm9.lcf
index b591dd9a..8de69f44 100644
--- a/arm9/arm9.lcf
+++ b/arm9/arm9.lcf
@@ -30,15 +30,15 @@ MEMORY {
MODULE_17 (RWX) : ORIGIN=0x021D74E0, LENGTH=0
MODULE_18 (RWX) : ORIGIN=0x022396A0, LENGTH=0
MODULE_19 (RWX) : ORIGIN=0x02252440, LENGTH=0
- MODULE_20 (RWX) : ORIGIN=0, LENGTH=0
- MODULE_21 (RWX) : ORIGIN=0, LENGTH=0
- MODULE_22 (RWX) : ORIGIN=0, LENGTH=0
- MODULE_23 (RWX) : ORIGIN=0, LENGTH=0
- MODULE_24 (RWX) : ORIGIN=0, LENGTH=0
- MODULE_25 (RWX) : ORIGIN=0, LENGTH=0
- MODULE_26 (RWX) : ORIGIN=0, LENGTH=0
- MODULE_27 (RWX) : ORIGIN=0, LENGTH=0
- MODULE_28 (RWX) : ORIGIN=0, LENGTH=0
+ MODULE_20 (RWX) : ORIGIN=0x02252440, LENGTH=0
+ MODULE_21 (RWX) : ORIGIN=0x02254840, LENGTH=0
+ MODULE_22 (RWX) : ORIGIN=0x02254840, LENGTH=0
+ MODULE_23 (RWX) : ORIGIN=0x02254840, LENGTH=0
+ MODULE_24 (RWX) : ORIGIN=0x02254840, LENGTH=0
+ MODULE_25 (RWX) : ORIGIN=0x02254840, LENGTH=0
+ MODULE_26 (RWX) : ORIGIN=0x02254840, LENGTH=0
+ MODULE_27 (RWX) : ORIGIN=0x02254840, LENGTH=0
+ MODULE_28 (RWX) : ORIGIN=0x02254840, LENGTH=0
MODULE_29 (RWX) : ORIGIN=0, LENGTH=0
MODULE_30 (RWX) : ORIGIN=0, LENGTH=0
MODULE_31 (RWX) : ORIGIN=0, LENGTH=0
@@ -616,15 +616,123 @@ SECTIONS {
module_19.o (.bss)
} >> MODULE_19
- OVERLAY_FILE(20, 0x27F200, FILE_283200.o)
- OVERLAY_FILE(21, 0x281600, FILE_285600.o)
- OVERLAY_FILE(22, 0x281C00, FILE_285C00.o)
- OVERLAY_FILE(23, 0x282C00, FILE_286C00.o)
- OVERLAY_FILE(24, 0x284600, FILE_288600.o)
- OVERLAY_FILE(25, 0x285000, FILE_289000.o)
- OVERLAY_FILE(26, 0x285600, FILE_289600.o)
- OVERLAY_FILE(27, 0x285E00, FILE_289E00.o)
- OVERLAY_FILE(28, 0x286A00, FILE_28AA00.o)
+ .MODULE.20 : AT (0x27F200)
+ {
+ module_20.o (.text)
+ module_20.o (.sdata)
+ module_20.o (.data)
+ } > MODULE_20
+
+ .MODULE.20.bss :
+ {
+ module_20.o (.sbss)
+ module_20.o (.bss)
+ } >> MODULE_20
+
+ .MODULE.21 : AT (0x281600)
+ {
+ module_21.o (.text)
+ module_21.o (.sdata)
+ module_21.o (.data)
+ } > MODULE_21
+
+ .MODULE.21.bss :
+ {
+ module_21.o (.sbss)
+ module_21.o (.bss)
+ } >> MODULE_21
+
+ .MODULE.22 : AT (0x281C00)
+ {
+ module_22.o (.text)
+ module_22.o (.sdata)
+ module_22.o (.data)
+ } > MODULE_22
+
+ .MODULE.22.bss :
+ {
+ module_22.o (.sbss)
+ module_22.o (.bss)
+ } >> MODULE_22
+
+ .MODULE.23 : AT (0x282C00)
+ {
+ module_23.o (.text)
+ module_23.o (.sdata)
+ module_23.o (.data)
+ } > MODULE_23
+
+ .MODULE.23.bss :
+ {
+ module_23.o (.sbss)
+ module_23.o (.bss)
+ } >> MODULE_23
+
+ .MODULE.24 : AT (0x284600)
+ {
+ module_24.o (.text)
+ module_24.o (.sdata)
+ module_24.o (.data)
+ } > MODULE_24
+
+ .MODULE.24.bss :
+ {
+ module_24.o (.sbss)
+ module_24.o (.bss)
+ } >> MODULE_24
+
+ .MODULE.25 : AT (0x285000)
+ {
+ module_25.o (.text)
+ module_25.o (.sdata)
+ module_25.o (.data)
+ } > MODULE_25
+
+ .MODULE.25.bss :
+ {
+ module_25.o (.sbss)
+ module_25.o (.bss)
+ } >> MODULE_25
+
+ .MODULE.26 : AT (0x285600)
+ {
+ module_26.o (.text)
+ module_26.o (.sdata)
+ module_26.o (.data)
+ } > MODULE_26
+
+ .MODULE.26.bss :
+ {
+ module_26.o (.sbss)
+ module_26.o (.bss)
+ } >> MODULE_26
+
+ .MODULE.27 : AT (0x285E00)
+ {
+ module_27.o (.text)
+ module_27.o (.sdata)
+ module_27.o (.data)
+ } > MODULE_27
+
+ .MODULE.27.bss :
+ {
+ module_27.o (.sbss)
+ module_27.o (.bss)
+ } >> MODULE_27
+
+ .MODULE.28 : AT (0x286A00)
+ {
+ module_28.o (.text)
+ module_28.o (.sdata)
+ module_28.o (.data)
+ } > MODULE_28
+
+ .MODULE.28.bss :
+ {
+ module_28.o (.sbss)
+ module_28.o (.bss)
+ } >> MODULE_28
+
OVERLAY_FILE(29, 0x288200, FILE_28C200.o)
OVERLAY_FILE(30, 0x288C00, FILE_28CC00.o)
OVERLAY_FILE(31, 0x289200, FILE_28D200.o)
diff --git a/arm9/asm/unk_020AF030.s b/arm9/asm/unk_020AF030.s
index ec33e3fa..3851b8c7 100644
--- a/arm9/asm/unk_020AF030.s
+++ b/arm9/asm/unk_020AF030.s
@@ -1960,7 +1960,9 @@ _020B0824: ; 0x020B0824
cmp r2, r1
strcc r1, [r4, #0x0]
ldmia sp!, {r4,pc}
-_020B0830: ; 0x020B0830
+
+ arm_func_start FUN_020B0830
+FUN_020B0830: ; 0x020B0830
ldrh r3, [r0, #0x6]
ldrh r2, [r0, #0x8]
mov r12, #0x0
diff --git a/arm9/global.inc b/arm9/global.inc
index 4d02cd08..ed81acc6 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -5395,6 +5395,74 @@
.extern MOD05_021F043C
.extern MOD05_021F04F8
.extern MOD05_021F4CD4
+.extern FUN_02006948
+.extern FUN_02006C88
+.extern FUN_02020A6C
+.extern FUN_02012690
+.extern MOD20_02252978
+.extern FUN_02020BF4
+.extern FUN_02020BFC
+.extern FUN_020893F0
+.extern FUN_02089418
+.extern FUN_02069B60
+.extern FUN_02089444
+.extern FUN_0208946C
+.extern MOD20_02252B68
+.extern MOD20_02252C08
+.extern MOD20_02253794
+.extern MOD20_022537B8
+.extern MOD20_02252B48
+.extern MOD20_02252C40
+.extern MOD20_022538BC
+.extern MOD20_02252B28
+.extern MOD20_02252D24
+.extern MOD20_022538A4
+.extern MOD20_022538A8
+.extern MOD20_022538AC
+.extern MOD20_022538B0
+.extern MOD20_02253E74
+.extern MOD20_02253F14
+.extern MOD20_02253F28
+.extern MOD20_02253F78
+.extern MOD20_02253FBC
+.extern MOD20_02254014
+.extern MOD20_022542AC
+.extern MOD20_0225298C
+.extern MOD20_022529A0
+.extern MOD20_02252C14
+.extern MOD20_02252D34
+.extern MOD20_02252D7C
+.extern MOD20_022536F4
+.extern MOD20_022537E0
+.extern MOD20_02253888
+.extern MOD20_022538A0
+.extern MOD20_02254130
+.extern MOD20_02254198
+.extern MOD20_02252DB4
+.extern MOD11_02252DB4
+.extern FUN_0204C0CC
+.extern FUN_0204C0D4
+.extern FUN_0204C0E8
+.extern MOD20_022529B4
+.extern MOD20_02252C3C
+.extern MOD20_0225396C
+.extern MOD20_02253F80
+.extern MOD20_022539C4
+.extern MOD20_02253F64
+.extern MOD20_02253F9C
+.extern MOD20_02253FA4
+.extern FUN_02020A98
+.extern FUN_02020ACC
+.extern FUN_0204BF14
+.extern FUN_0204BF1C
+.extern FUN_0204BF44
+.extern FUN_0204BF84
+.extern FUN_0204BF88
+.extern FUN_020893E0
+.extern FUN_020B0830
+.extern FUN_020B0888
+.extern FUN_020B0D58
+.extern FUN_020B1AF8
.extern FUN_02013E5C
.extern FUN_02013ECC
.extern FUN_02013EF0
diff --git a/arm9/modules/20/asm/module_20.s b/arm9/modules/20/asm/module_20.s
new file mode 100644
index 00000000..afe8646c
--- /dev/null
+++ b/arm9/modules/20/asm/module_20.s
@@ -0,0 +1,4570 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 2, 0
+
+ thumb_func_start MOD20_02252440
+MOD20_02252440: ; 0x02252440
+ ldr r3, _02252444 ; =0x02037791
+ bx r3
+ .align 2, 0
+_02252444: .word 0x02037791
+ thumb_func_end MOD20_02252440
+
+ thumb_func_start MOD20_02252448
+MOD20_02252448: ; 0x02252448
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r0, #0
+ add r5, r1, #0
+ mov r0, #3
+ str r2, [sp]
+ mov r1, #7
+ lsl r2, r0, #0xe
+ add r7, r3, #0
+ bl FUN_0201681C
+ mov r0, #3
+ mov r1, #8
+ lsl r2, r0, #0xe
+ bl FUN_0201681C
+ mov r0, #7
+ mov r1, #0x60
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _022524B2
+ str r4, [r5]
+ ldr r0, [sp]
+ str r6, [r4, #0x5c]
+ str r0, [r4, #0x54]
+ bl FUN_0204C1A8
+ str r0, [r4, #0x58]
+ ldr r0, [sp, #0x18]
+ str r7, [r4, #0x4c]
+ str r0, [r4, #0x50]
+ add r0, r4, #0
+ bl MOD20_0225253C
+ cmp r0, #0
+ beq _022524B2
+ bl FUN_0201CC08
+ mov r0, #4
+ bl FUN_0201CC24
+ ldr r0, _022524B4 ; =MOD20_022525F0
+ str r5, [r4, #0x34]
+ add r1, r4, #0
+ mov r2, #4
+ bl FUN_0200CA44
+ str r0, [r4, #0x38]
+ ldr r0, _022524B8 ; =MOD20_0225259C
+ add r1, r4, #0
+ mov r2, #0
+ bl FUN_0200CA44
+_022524B2:
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_022524B4: .word MOD20_022525F0
+_022524B8: .word MOD20_0225259C
+ thumb_func_end MOD20_02252448
+
+ thumb_func_start MOD20_022524BC
+MOD20_022524BC: ; 0x022524BC
+ push {r3, lr}
+ ldrb r1, [r0]
+ cmp r1, #3
+ beq _022524CE
+ cmp r1, #4
+ beq _022524CE
+ mov r1, #3
+ bl MOD20_022525F8
+_022524CE:
+ pop {r3, pc}
+ thumb_func_end MOD20_022524BC
+
+ thumb_func_start MOD20_022524D0
+MOD20_022524D0: ; 0x022524D0
+ cmp r0, #0
+ bne _022524D8
+ mov r0, #1
+ bx lr
+_022524D8:
+ mov r0, #0
+ bx lr
+ thumb_func_end MOD20_022524D0
+
+ thumb_func_start MOD20_022524DC
+MOD20_022524DC: ; 0x022524DC
+ push {r4, lr}
+ add r4, r0, #0
+ cmp r1, #5
+ bhi _0225252E
+ add r0, r1, r1
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_022524F0: ; jump table
+ .short _0225252E - _022524F0 - 2 ; case 0
+ .short _022524FC - _022524F0 - 2 ; case 1
+ .short _0225252E - _022524F0 - 2 ; case 2
+ .short _0225252E - _022524F0 - 2 ; case 3
+ .short _0225251E - _022524F0 - 2 ; case 4
+ .short _02252502 - _022524F0 - 2 ; case 5
+_022524FC:
+ mov r0, #1
+ strb r0, [r4, #4]
+ pop {r4, pc}
+_02252502:
+ ldr r0, [r4, #0x58]
+ bl FUN_0204BF84
+ add r1, r0, #1
+ ldr r0, _02252530 ; =0x0001869F
+ cmp r1, r0
+ bls _02252512
+ mov r1, #0
+_02252512:
+ ldr r0, [r4, #0x58]
+ bl FUN_0204BF88
+ mov r0, #1
+ strb r0, [r4, #7]
+ pop {r4, pc}
+_0225251E:
+ ldrb r0, [r4, #2]
+ cmp r0, #2
+ bne _0225252E
+ ldr r1, [r4, #0x44]
+ cmp r1, #0
+ beq _0225252E
+ ldr r0, [r4, #0x48]
+ blx r1
+_0225252E:
+ pop {r4, pc}
+ .align 2, 0
+_02252530: .word 0x0001869F
+ thumb_func_end MOD20_022524DC
+
+ thumb_func_start MOD20_02252534
+MOD20_02252534: ; 0x02252534
+ ldrb r0, [r0, #3]
+ bx lr
+ thumb_func_end MOD20_02252534
+
+ thumb_func_start MOD20_02252538
+MOD20_02252538: ; 0x02252538
+ ldr r0, [r0, #0x14]
+ bx lr
+ thumb_func_end MOD20_02252538
+
+ thumb_func_start MOD20_0225253C
+MOD20_0225253C: ; 0x0225253C
+ push {r4, lr}
+ add r4, r0, #0
+ add r1, r4, #0
+ ldr r2, [r4, #0x50]
+ add r0, #0x1c
+ add r1, #0x20
+ add r3, r4, #0
+ bl MOD20_02252C5C
+ cmp r0, #0
+ beq _02252578
+ mov r1, #0
+ strb r1, [r4]
+ strb r1, [r4, #1]
+ strb r1, [r4, #3]
+ strb r1, [r4, #4]
+ strb r1, [r4, #7]
+ strb r1, [r4, #5]
+ strb r1, [r4, #6]
+ sub r0, r1, #1
+ str r0, [r4, #0x14]
+ strb r1, [r4, #2]
+ add r0, r4, #0
+ str r1, [r4, #8]
+ bl MOD20_022529C4
+ cmp r0, #0
+ beq _02252578
+ mov r0, #1
+ pop {r4, pc}
+_02252578:
+ mov r0, #0
+ pop {r4, pc}
+ thumb_func_end MOD20_0225253C
+
+ thumb_func_start MOD20_0225257C
+MOD20_0225257C: ; 0x0225257C
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x38]
+ bl FUN_0200CAB4
+ add r0, r4, #0
+ bl MOD20_02252A08
+ add r0, r4, #0
+ bl MOD20_022528FC
+ ldr r0, [r4, #0x1c]
+ bl MOD20_02252E18
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD20_0225257C
+
+ thumb_func_start MOD20_0225259C
+MOD20_0225259C: ; 0x0225259C
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ ldrb r0, [r4]
+ cmp r0, #4
+ bhs _022525C0
+ cmp r0, #0
+ beq _022525B2
+ add r0, r4, #0
+ bl MOD20_02252A14
+_022525B2:
+ ldrb r1, [r4]
+ add r0, r4, #0
+ lsl r2, r1, #2
+ ldr r1, _022525EC ; =0x022544CC
+ ldr r1, [r1, r2]
+ blx r1
+ pop {r3, r4, r5, pc}
+_022525C0:
+ beq _022525C6
+ bl ErrorHandling
+_022525C6:
+ ldr r0, [r4, #0x34]
+ mov r1, #0
+ str r1, [r0]
+ add r0, r4, #0
+ bl MOD20_0225257C
+ add r0, r4, #0
+ bl FUN_02016A18
+ add r0, r5, #0
+ bl FUN_0200CAB4
+ mov r0, #7
+ bl FUN_020168D0
+ mov r0, #8
+ bl FUN_020168D0
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_022525EC: .word 0x022544CC
+ thumb_func_end MOD20_0225259C
+
+ thumb_func_start MOD20_022525F0
+MOD20_022525F0: ; 0x022525F0
+ mov r0, #0
+ strb r0, [r1, #4]
+ strb r0, [r1, #7]
+ bx lr
+ thumb_func_end MOD20_022525F0
+
+ thumb_func_start MOD20_022525F8
+MOD20_022525F8: ; 0x022525F8
+ strb r1, [r0]
+ mov r1, #0
+ strb r1, [r0, #1]
+ bx lr
+ thumb_func_end MOD20_022525F8
+
+ thumb_func_start MOD20_02252600
+MOD20_02252600: ; 0x02252600
+ push {r3, r4, r5, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #1]
+ cmp r1, #3
+ bhi _02252684
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_02252616: ; jump table
+ .short _0225261E - _02252616 - 2 ; case 0
+ .short _0225262E - _02252616 - 2 ; case 1
+ .short _0225265A - _02252616 - 2 ; case 2
+ .short _02252670 - _02252616 - 2 ; case 3
+_0225261E:
+ ldr r0, [r4, #0x1c]
+ mov r1, #0
+ bl MOD20_02252E80
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ pop {r3, r4, r5, pc}
+_0225262E:
+ ldr r0, [r4, #0x1c]
+ mov r1, #0
+ bl MOD20_02252EA4
+ cmp r0, #0
+ beq _02252684
+ ldr r0, [r4, #0x58]
+ bl FUN_0204BF14
+ add r5, r0, #0
+ add r0, r4, #0
+ add r1, r5, #0
+ bl MOD20_022528B0
+ add r0, r4, #0
+ add r1, r5, #0
+ bl MOD20_02252918
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ pop {r3, r4, r5, pc}
+_0225265A:
+ bl MOD20_0225293C
+ cmp r0, #0
+ beq _02252684
+ ldr r0, [r4, #0x1c]
+ mov r1, #1
+ bl MOD20_02252E80
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+_02252670:
+ ldr r0, [r4, #0x1c]
+ mov r1, #1
+ bl MOD20_02252EA4
+ cmp r0, #0
+ beq _02252684
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD20_022525F8
+_02252684:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02252600
+
+ thumb_func_start MOD20_02252688
+MOD20_02252688: ; 0x02252688
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #1]
+ cmp r1, #4
+ bls _02252694
+ b _022527AA
+_02252694:
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_022526A0: ; jump table
+ .short _022526AA - _022526A0 - 2 ; case 0
+ .short _022526D4 - _022526A0 - 2 ; case 1
+ .short _0225271A - _022526A0 - 2 ; case 2
+ .short _02252750 - _022526A0 - 2 ; case 3
+ .short _0225276C - _022526A0 - 2 ; case 4
+_022526AA:
+ bl MOD20_02252C08
+ cmp r0, #0
+ bne _022527AA
+ ldr r0, [r4, #8]
+ cmp r0, #3
+ beq _022526BC
+ cmp r0, #5
+ bne _022527AA
+_022526BC:
+ mov r0, #0
+ str r0, [r4, #0xc]
+ mov r0, #1
+ strb r0, [r4, #5]
+ ldr r0, [r4, #0x1c]
+ mov r1, #4
+ bl MOD20_02252E80
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ pop {r4, pc}
+_022526D4:
+ ldr r0, [r4, #8]
+ cmp r0, #3
+ beq _022526DE
+ cmp r0, #5
+ bne _022526E2
+_022526DE:
+ mov r0, #1
+ str r0, [r4, #0xc]
+_022526E2:
+ ldr r0, [r4, #0x1c]
+ bl MOD20_02252EB0
+ cmp r0, #0
+ beq _022527AA
+ ldr r0, [r4, #0x58]
+ bl FUN_0204BF1C
+ str r0, [r4, #0x20]
+ ldr r0, [r4, #0xc]
+ cmp r0, #0
+ beq _02252710
+ ldr r0, [r4, #0x1c]
+ mov r1, #9
+ bl MOD20_02252E80
+ mov r0, #0x1e
+ str r0, [r4, #0x10]
+ mov r0, #0
+ str r0, [r4, #0xc]
+ mov r0, #4
+ strb r0, [r4, #1]
+ pop {r4, pc}
+_02252710:
+ mov r0, #3
+ str r0, [r4, #0x10]
+ mov r0, #2
+ strb r0, [r4, #1]
+ pop {r4, pc}
+_0225271A:
+ ldr r1, [r4, #8]
+ cmp r1, #3
+ beq _02252724
+ cmp r1, #5
+ bne _0225273A
+_02252724:
+ ldr r0, [r4, #0x1c]
+ mov r1, #9
+ bl MOD20_02252E80
+ mov r0, #0x1e
+ str r0, [r4, #0x10]
+ mov r0, #0
+ str r0, [r4, #0xc]
+ mov r0, #4
+ strb r0, [r4, #1]
+ pop {r4, pc}
+_0225273A:
+ ldr r1, [r4, #0x10]
+ cmp r1, #0
+ beq _02252746
+ sub r0, r1, #1
+ str r0, [r4, #0x10]
+ pop {r4, pc}
+_02252746:
+ bl MOD20_0225294C
+ mov r0, #3
+ strb r0, [r4, #1]
+ pop {r4, pc}
+_02252750:
+ bl MOD20_02252968
+ cmp r0, #0
+ beq _022527AA
+ add r0, r4, #0
+ bl MOD20_022528FC
+ bl FUN_020893E0
+ add r0, r4, #0
+ mov r1, #2
+ bl MOD20_022525F8
+ pop {r4, pc}
+_0225276C:
+ ldr r0, [r4, #8]
+ cmp r0, #3
+ beq _02252776
+ cmp r0, #5
+ bne _0225278C
+_02252776:
+ ldr r0, [r4, #0x58]
+ bl FUN_0204BF1C
+ str r0, [r4, #0x20]
+ mov r0, #0x1e
+ str r0, [r4, #0x10]
+ ldr r0, [r4, #0x1c]
+ mov r1, #0xa
+ bl MOD20_02252E80
+ pop {r4, pc}
+_0225278C:
+ ldr r0, [r4, #0x10]
+ cmp r0, #0
+ beq _02252798
+ sub r0, r0, #1
+ str r0, [r4, #0x10]
+ pop {r4, pc}
+_02252798:
+ ldr r0, [r4, #0x1c]
+ mov r1, #0xb
+ bl MOD20_02252E80
+ add r0, r4, #0
+ bl MOD20_0225294C
+ mov r0, #3
+ strb r0, [r4, #1]
+_022527AA:
+ pop {r4, pc}
+ thumb_func_end MOD20_02252688
+
+ thumb_func_start MOD20_022527AC
+MOD20_022527AC: ; 0x022527AC
+ push {r3, r4, r5, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #1]
+ cmp r1, #0
+ beq _022527C0
+ cmp r1, #1
+ beq _022527E4
+ cmp r1, #2
+ beq _022527FC
+ pop {r3, r4, r5, pc}
+_022527C0:
+ mov r0, #1
+ strb r0, [r4, #6]
+ ldr r0, [r4, #0x58]
+ bl FUN_0204BF14
+ add r5, r0, #0
+ add r0, r4, #0
+ add r1, r5, #0
+ bl MOD20_022528B0
+ add r0, r4, #0
+ add r1, r5, #0
+ bl MOD20_02252918
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ pop {r3, r4, r5, pc}
+_022527E4:
+ bl MOD20_0225293C
+ cmp r0, #0
+ beq _02252816
+ ldr r0, [r4, #0x1c]
+ mov r1, #2
+ bl MOD20_02252E80
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ pop {r3, r4, r5, pc}
+_022527FC:
+ ldr r0, [r4, #0x1c]
+ mov r1, #2
+ bl MOD20_02252EA4
+ cmp r0, #0
+ beq _02252816
+ mov r0, #0
+ strb r0, [r4, #5]
+ strb r0, [r4, #6]
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD20_022525F8
+_02252816:
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD20_022527AC
+
+ thumb_func_start MOD20_02252818
+MOD20_02252818: ; 0x02252818
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #1]
+ cmp r1, #3
+ bhi _022528AC
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_0225282E: ; jump table
+ .short _02252836 - _0225282E - 2 ; case 0
+ .short _02252866 - _0225282E - 2 ; case 1
+ .short _0225287A - _0225282E - 2 ; case 2
+ .short _02252890 - _0225282E - 2 ; case 3
+_02252836:
+ ldrb r1, [r4, #2]
+ cmp r1, #3
+ bhi _022528AC
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_02252848: ; jump table
+ .short _02252860 - _02252848 - 2 ; case 0
+ .short _02252850 - _02252848 - 2 ; case 1
+ .short _02252856 - _02252848 - 2 ; case 2
+ .short _02252860 - _02252848 - 2 ; case 3
+_02252850:
+ mov r0, #1
+ strb r0, [r4, #1]
+ pop {r4, pc}
+_02252856:
+ bl MOD20_0225294C
+ mov r0, #2
+ strb r0, [r4, #1]
+ pop {r4, pc}
+_02252860:
+ mov r0, #2
+ strb r0, [r4, #1]
+ pop {r4, pc}
+_02252866:
+ bl MOD20_0225293C
+ cmp r0, #0
+ beq _022528AC
+ add r0, r4, #0
+ bl MOD20_0225294C
+ mov r0, #2
+ strb r0, [r4, #1]
+ pop {r4, pc}
+_0225287A:
+ bl MOD20_02252968
+ cmp r0, #0
+ beq _022528AC
+ ldr r0, [r4, #0x1c]
+ mov r1, #0xe
+ bl MOD20_02252E80
+ mov r0, #3
+ strb r0, [r4, #1]
+ pop {r4, pc}
+_02252890:
+ ldr r0, [r4, #0x1c]
+ bl MOD20_02252EB0
+ cmp r0, #0
+ beq _022528AC
+ add r0, r4, #0
+ bl MOD20_022528FC
+ bl FUN_0201CD04
+ add r0, r4, #0
+ mov r1, #4
+ bl MOD20_022525F8
+_022528AC:
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02252818
+
+ thumb_func_start MOD20_022528B0
+MOD20_022528B0: ; 0x022528B0
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ bmi _022528BC
+ cmp r4, #0x19
+ blo _022528C0
+_022528BC:
+ bl ErrorHandling
+_022528C0:
+ mov r0, #0
+ ldr r1, [r5, #0x14]
+ mvn r0, r0
+ cmp r1, r0
+ bne _022528F0
+ ldr r2, _022528F4 ; =0x022544DC
+ mov r1, #0
+_022528CE:
+ ldr r0, [r2]
+ cmp r4, r0
+ bne _022528E8
+ ldr r0, _022528F8 ; =0x022544E0
+ lsl r1, r1, #3
+ ldr r6, [r0, r1]
+ mov r1, #2
+ add r0, r6, #0
+ bl HandleLoadOverlay
+ str r4, [r5, #0x14]
+ str r6, [r5, #0x18]
+ pop {r4, r5, r6, pc}
+_022528E8:
+ add r1, r1, #1
+ add r2, #8
+ cmp r1, #0x19
+ blo _022528CE
+_022528F0:
+ pop {r4, r5, r6, pc}
+ nop
+_022528F4: .word 0x022544DC
+_022528F8: .word 0x022544E0
+ thumb_func_end MOD20_022528B0
+
+ thumb_func_start MOD20_022528FC
+MOD20_022528FC: ; 0x022528FC
+ push {r4, lr}
+ add r4, r0, #0
+ mov r0, #0
+ ldr r1, [r4, #0x14]
+ mvn r0, r0
+ cmp r1, r0
+ beq _02252916
+ ldr r0, [r4, #0x18]
+ bl UnloadOverlayByID
+ mov r0, #0
+ mvn r0, r0
+ str r0, [r4, #0x14]
+_02252916:
+ pop {r4, pc}
+ thumb_func_end MOD20_022528FC
+
+ thumb_func_start MOD20_02252918
+MOD20_02252918: ; 0x02252918
+ push {r3, r4, r5, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #2]
+ cmp r0, #0
+ beq _02252926
+ bl ErrorHandling
+_02252926:
+ add r0, r4, #0
+ ldr r2, [r4, #0x4c]
+ ldr r3, [r4, #0x14]
+ ldr r5, [r4, #0x3c]
+ add r0, #0x24
+ add r1, r4, #0
+ blx r5
+ mov r0, #1
+ strb r0, [r4, #2]
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02252918
+
+ thumb_func_start MOD20_0225293C
+MOD20_0225293C: ; 0x0225293C
+ ldrb r0, [r0, #2]
+ cmp r0, #2
+ bne _02252946
+ mov r0, #1
+ bx lr
+_02252946:
+ mov r0, #0
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_0225293C
+
+ thumb_func_start MOD20_0225294C
+MOD20_0225294C: ; 0x0225294C
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #2]
+ cmp r0, #2
+ beq _0225295A
+ bl ErrorHandling
+_0225295A:
+ ldr r0, [r4, #0x24]
+ ldr r1, [r4, #0x40]
+ blx r1
+ mov r0, #3
+ strb r0, [r4, #2]
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD20_0225294C
+
+ thumb_func_start MOD20_02252968
+MOD20_02252968: ; 0x02252968
+ ldrb r0, [r0, #2]
+ cmp r0, #0
+ bne _02252972
+ mov r0, #1
+ bx lr
+_02252972:
+ mov r0, #0
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_02252968
+
+ thumb_func_start MOD20_02252978
+MOD20_02252978: ; 0x02252978
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ bl MOD20_02252440
+ str r5, [r0, #0x3c]
+ str r4, [r0, #0x40]
+ mov r1, #0
+ str r1, [r0, #0x44]
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD20_02252978
+
+ thumb_func_start MOD20_0225298C
+MOD20_0225298C: ; 0x0225298C
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #2]
+ cmp r0, #1
+ beq _0225299A
+ bl ErrorHandling
+_0225299A:
+ mov r0, #2
+ strb r0, [r4, #2]
+ pop {r4, pc}
+ thumb_func_end MOD20_0225298C
+
+ thumb_func_start MOD20_022529A0
+MOD20_022529A0: ; 0x022529A0
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #2]
+ cmp r0, #3
+ beq _022529AE
+ bl ErrorHandling
+_022529AE:
+ mov r0, #0
+ strb r0, [r4, #2]
+ pop {r4, pc}
+ thumb_func_end MOD20_022529A0
+
+ thumb_func_start MOD20_022529B4
+MOD20_022529B4: ; 0x022529B4
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ bl MOD20_02252440
+ str r5, [r0, #0x44]
+ str r4, [r0, #0x48]
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD20_022529B4
+
+ thumb_func_start MOD20_022529C4
+MOD20_022529C4: ; 0x022529C4
+ push {r3, r4, lr}
+ sub sp, #4
+ add r4, r0, #0
+ mov r0, #7
+ str r0, [sp]
+ ldr r0, _02252A00 ; =0x022544C4
+ ldr r2, _02252A04 ; =MOD20_02252A24
+ mov r1, #2
+ add r3, r4, #0
+ bl MOD20_02254130
+ str r0, [r4, #0x28]
+ cmp r0, #0
+ beq _022529F8
+ mov r1, #0
+ add r2, r1, #0
+ mov r3, #7
+ bl MOD20_022542AC
+ mov r0, #0
+ mvn r0, r0
+ str r0, [r4, #0x2c]
+ str r0, [r4, #0x30]
+ add sp, #4
+ mov r0, #1
+ pop {r3, r4, pc}
+_022529F8:
+ mov r0, #0
+ add sp, #4
+ pop {r3, r4, pc}
+ nop
+_02252A00: .word 0x022544C4
+_02252A04: .word MOD20_02252A24
+ thumb_func_end MOD20_022529C4
+
+ thumb_func_start MOD20_02252A08
+MOD20_02252A08: ; 0x02252A08
+ ldr r3, _02252A10 ; =MOD20_02254198
+ ldr r0, [r0, #0x28]
+ bx r3
+ nop
+_02252A10: .word MOD20_02254198
+ thumb_func_end MOD20_02252A08
+
+ thumb_func_start MOD20_02252A14
+MOD20_02252A14: ; 0x02252A14
+ ldr r3, _02252A20 ; =MOD20_022541B4
+ mov r1, #0
+ str r1, [r0, #8]
+ ldr r0, [r0, #0x28]
+ bx r3
+ nop
+_02252A20: .word MOD20_022541B4
+ thumb_func_end MOD20_02252A14
+
+ thumb_func_start MOD20_02252A24
+MOD20_02252A24: ; 0x02252A24
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r3, #0
+ add r4, r0, #0
+ add r0, r5, #0
+ add r6, r1, #0
+ add r7, r2, #0
+ bl MOD20_02252C08
+ cmp r0, #0
+ bne _02252A4C
+ cmp r7, #0
+ beq _02252A46
+ cmp r7, #1
+ bne _02252A50
+ mov r0, #1
+ strb r0, [r5, #3]
+ b _02252A50
+_02252A46:
+ mov r0, #0
+ strb r0, [r5, #3]
+ b _02252A50
+_02252A4C:
+ mov r0, #0
+ strb r0, [r5, #3]
+_02252A50:
+ cmp r4, #1
+ bne _02252A6A
+ add r0, r5, #0
+ bl MOD20_02252C08
+ cmp r0, #0
+ beq _02252AEA
+ cmp r7, #1
+ bne _02252AEA
+ ldr r0, _02252AEC ; =0x0000066E
+ bl FUN_020054C8
+ pop {r3, r4, r5, r6, r7, pc}
+_02252A6A:
+ mov r4, #0
+ mvn r4, r4
+ cmp r7, #0
+ beq _02252A78
+ cmp r7, #1
+ beq _02252A7C
+ b _02252A94
+_02252A78:
+ mov r4, #8
+ b _02252A94
+_02252A7C:
+ add r0, r5, #0
+ bl MOD20_02252C08
+ cmp r0, #0
+ bne _02252A8C
+ ldrb r0, [r5, #6]
+ cmp r0, #0
+ beq _02252A92
+_02252A8C:
+ mov r4, #6
+ mov r6, #0
+ b _02252A94
+_02252A92:
+ mov r4, #7
+_02252A94:
+ mov r0, #0
+ ldr r1, [r5, #0x2c]
+ mvn r0, r0
+ cmp r1, r0
+ beq _02252AA4
+ add r0, r4, #0
+ add r4, r1, #0
+ str r0, [r5, #0x2c]
+_02252AA4:
+ mov r0, #0
+ mvn r0, r0
+ cmp r4, r0
+ beq _02252AC0
+ ldr r0, [r5, #0x1c]
+ add r1, r4, #0
+ bl MOD20_02252AF0
+ cmp r0, #0
+ beq _02252AC0
+ sub r0, r4, #6
+ cmp r0, #1
+ bhi _02252AC0
+ str r4, [r5, #0x30]
+_02252AC0:
+ cmp r6, #2
+ beq _02252AE0
+ cmp r6, #3
+ beq _02252AD6
+ cmp r6, #5
+ bne _02252AE8
+ ldr r0, [r5, #0x28]
+ mov r1, #0
+ bl MOD20_022542CC
+ b _02252AE8
+_02252AD6:
+ ldr r0, [r5, #0x30]
+ cmp r0, #6
+ bne _02252AE8
+ mov r6, #0
+ b _02252AE8
+_02252AE0:
+ ldr r0, [r5, #0x30]
+ cmp r0, #7
+ bne _02252AE8
+ mov r6, #3
+_02252AE8:
+ str r6, [r5, #8]
+_02252AEA:
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_02252AEC: .word 0x0000066E
+ thumb_func_end MOD20_02252A24
+
+ thumb_func_start MOD20_02252AF0
+MOD20_02252AF0: ; 0x02252AF0
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r4, #0
+_02252AF8:
+ add r0, r5, #0
+ add r1, r6, #0
+ bl MOD20_02252EA4
+ cmp r0, #0
+ bne _02252B08
+ mov r0, #0
+ pop {r4, r5, r6, pc}
+_02252B08:
+ add r4, r4, #1
+ cmp r4, #3
+ blo _02252AF8
+ add r0, r5, #0
+ add r1, r6, #0
+ bl MOD20_02252E80
+ mov r0, #1
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02252AF0
+
+ thumb_func_start MOD20_02252B1C
+MOD20_02252B1C: ; 0x02252B1C
+ push {r3, lr}
+ bl MOD20_02252440
+ ldr r0, [r0, #0x1c]
+ pop {r3, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02252B1C
+
+ thumb_func_start MOD20_02252B28
+MOD20_02252B28: ; 0x02252B28
+ push {r4, lr}
+ add r4, r0, #0
+ bl MOD20_02252440
+ ldrb r1, [r0, #5]
+ cmp r1, #0
+ bne _02252B46
+ bl MOD20_02252C08
+ cmp r0, #0
+ bne _02252B46
+ lsl r0, r4, #0x10
+ lsr r0, r0, #0x10
+ bl FUN_020054C8
+_02252B46:
+ pop {r4, pc}
+ thumb_func_end MOD20_02252B28
+
+ thumb_func_start MOD20_02252B48
+MOD20_02252B48: ; 0x02252B48
+ push {r4, lr}
+ add r4, r0, #0
+ bl MOD20_02252440
+ ldrb r1, [r0, #5]
+ cmp r1, #0
+ bne _02252B66
+ bl MOD20_02252C08
+ cmp r0, #0
+ bne _02252B66
+ lsl r0, r4, #0x10
+ lsr r0, r0, #0x10
+ bl FUN_02005578
+_02252B66:
+ pop {r4, pc}
+ thumb_func_end MOD20_02252B48
+
+ thumb_func_start MOD20_02252B68
+MOD20_02252B68: ; 0x02252B68
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ bl MOD20_02252440
+ ldrb r1, [r0, #5]
+ cmp r1, #0
+ bne _02252BB4
+ bl MOD20_02252C08
+ cmp r0, #0
+ bne _02252BB4
+ add r0, r5, #0
+ add r1, r4, #0
+ bl FUN_02020AB0
+ cmp r0, #0
+ beq _02252BB4
+ ldr r0, [r5]
+ sub r0, #0x10
+ cmp r0, #0xbf
+ bhs _02252B98
+ mov r1, #1
+ b _02252B9A
+_02252B98:
+ mov r1, #0
+_02252B9A:
+ ldr r0, [r4]
+ sub r0, #0x10
+ cmp r0, #0x9f
+ bhs _02252BA6
+ mov r0, #1
+ b _02252BA8
+_02252BA6:
+ mov r0, #0
+_02252BA8:
+ tst r0, r1
+ beq _02252BB0
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+_02252BB0:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+_02252BB4:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD20_02252B68
+
+ thumb_func_start MOD20_02252BB8
+MOD20_02252BB8: ; 0x02252BB8
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ bl MOD20_02252440
+ ldrb r1, [r0, #5]
+ cmp r1, #0
+ bne _02252C04
+ bl MOD20_02252C08
+ cmp r0, #0
+ bne _02252C04
+ add r0, r5, #0
+ add r1, r4, #0
+ bl FUN_02020ACC
+ cmp r0, #0
+ beq _02252C04
+ ldr r0, [r5]
+ sub r0, #0x10
+ cmp r0, #0xbf
+ bhs _02252BE8
+ mov r1, #1
+ b _02252BEA
+_02252BE8:
+ mov r1, #0
+_02252BEA:
+ ldr r0, [r4]
+ sub r0, #0x10
+ cmp r0, #0x9f
+ bhs _02252BF6
+ mov r0, #1
+ b _02252BF8
+_02252BF6:
+ mov r0, #0
+_02252BF8:
+ tst r0, r1
+ beq _02252C00
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+_02252C00:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+_02252C04:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD20_02252BB8
+
+ thumb_func_start MOD20_02252C08
+MOD20_02252C08: ; 0x02252C08
+ ldr r3, _02252C10 ; =0x0204646D
+ ldr r0, [r0, #0x5c]
+ bx r3
+ nop
+_02252C10: .word 0x0204646D
+ thumb_func_end MOD20_02252C08
+
+ thumb_func_start MOD20_02252C14
+MOD20_02252C14: ; 0x02252C14
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ bl MOD20_02252C08
+ cmp r0, #0
+ bne _02252C2E
+ ldrb r0, [r5, #5]
+ cmp r0, #0
+ bne _02252C2E
+ add r0, r4, #0
+ bl MOD20_022541B4
+_02252C2E:
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD20_02252C14
+
+ thumb_func_start MOD20_02252C30
+MOD20_02252C30: ; 0x02252C30
+ ldrb r0, [r0, #4]
+ bx lr
+ thumb_func_end MOD20_02252C30
+
+ thumb_func_start MOD20_02252C34
+MOD20_02252C34: ; 0x02252C34
+ ldrb r0, [r0, #7]
+ bx lr
+ thumb_func_end MOD20_02252C34
+
+ thumb_func_start MOD20_02252C38
+MOD20_02252C38: ; 0x02252C38
+ ldr r0, [r0, #0x5c]
+ bx lr
+ thumb_func_end MOD20_02252C38
+
+ thumb_func_start MOD20_02252C3C
+MOD20_02252C3C: ; 0x02252C3C
+ ldr r0, [r0, #0x58]
+ bx lr
+ thumb_func_end MOD20_02252C3C
+
+ thumb_func_start MOD20_02252C40
+MOD20_02252C40: ; 0x02252C40
+ ldr r0, [r0, #0x54]
+ bx lr
+ thumb_func_end MOD20_02252C40
+
+ thumb_func_start MOD20_02252C44
+MOD20_02252C44: ; 0x02252C44
+ push {r3, lr}
+ ldr r0, [r0, #0x54]
+ bl FUN_020238F4
+ bl FUN_020239CC
+ cmp r0, #1
+ beq _02252C58
+ mov r0, #1
+ pop {r3, pc}
+_02252C58:
+ mov r0, #0
+ pop {r3, pc}
+ thumb_func_end MOD20_02252C44
+
+ thumb_func_start MOD20_02252C5C
+MOD20_02252C5C: ; 0x02252C5C
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r1, #0
+ mov r1, #0xea
+ add r5, r0, #0
+ mov r0, #7
+ lsl r1, r1, #2
+ add r7, r2, #0
+ str r3, [sp]
+ bl FUN_02016998
+ str r0, [r5]
+ add r4, r0, #0
+ beq _02252D0A
+ mov r0, #0x15
+ lsl r0, r0, #4
+ str r7, [r4, r0]
+ ldr r0, [r4, r0]
+ bl FUN_020B0888
+ mov r0, #0x15
+ lsl r0, r0, #4
+ ldr r0, [r4, r0]
+ mov r1, #7
+ bl MOD20_02253BA4
+ mov r1, #0x55
+ lsl r1, r1, #2
+ str r0, [r4, r1]
+ ldr r0, [r4, r1]
+ cmp r0, #0
+ bne _02252CA6
+ ldr r0, [r5]
+ bl FUN_02016A18
+ mov r0, #0
+ str r0, [r5]
+ pop {r3, r4, r5, r6, r7, pc}
+_02252CA6:
+ mov r0, #7
+ str r6, [r4]
+ bl FUN_02016B94
+ mov r1, #6
+ lsl r1, r1, #6
+ str r0, [r4, r1]
+ ldr r0, [sp]
+ add r1, r1, #4
+ str r0, [r4, r1]
+ add r0, r4, #0
+ bl MOD20_02252D44
+ mov r1, #0x57
+ lsl r1, r1, #2
+ add r0, r4, r1
+ sub r1, #8
+ ldr r1, [r4, r1]
+ bl MOD20_02253428
+ ldr r0, [r5]
+ mov r1, #8
+ add r0, r0, #4
+ bl MOD20_022536F4
+ ldr r0, [r5]
+ mov r1, #0x88
+ add r0, #0x2c
+ bl MOD20_02252E5C
+ ldr r0, [r5]
+ mov r1, #0x8c
+ add r0, #0x84
+ bl MOD20_02252E5C
+ ldr r0, [r5]
+ mov r1, #0x90
+ add r0, #0xdc
+ bl MOD20_02252E5C
+ ldr r0, _02252D10 ; =MOD20_02252D14
+ add r1, r4, #0
+ mov r2, #0
+ bl FUN_0200CA98
+ mov r1, #0x56
+ lsl r1, r1, #2
+ str r0, [r4, r1]
+ mov r0, #1
+ pop {r3, r4, r5, r6, r7, pc}
+_02252D0A:
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_02252D10: .word MOD20_02252D14
+ thumb_func_end MOD20_02252C5C
+
+ thumb_func_start MOD20_02252D14
+MOD20_02252D14: ; 0x02252D14
+ mov r0, #0x55
+ lsl r0, r0, #2
+ ldr r3, _02252D20 ; =MOD20_02253C78
+ ldr r0, [r1, r0]
+ bx r3
+ nop
+_02252D20: .word MOD20_02253C78
+ thumb_func_end MOD20_02252D14
+
+ thumb_func_start MOD20_02252D24
+MOD20_02252D24: ; 0x02252D24
+ push {r3, lr}
+ bl MOD20_02252B1C
+ mov r1, #0x55
+ lsl r1, r1, #2
+ ldr r0, [r0, r1]
+ pop {r3, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02252D24
+
+ thumb_func_start MOD20_02252D34
+MOD20_02252D34: ; 0x02252D34
+ push {r3, lr}
+ bl MOD20_02252B1C
+ mov r1, #6
+ lsl r1, r1, #6
+ ldr r0, [r0, r1]
+ pop {r3, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02252D34
+
+ thumb_func_start MOD20_02252D44
+MOD20_02252D44: ; 0x02252D44
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ mov r0, #0xc
+ mov r1, #0
+ add r2, sp, #0
+ mov r3, #7
+ bl FUN_02006C08
+ add r4, r0, #0
+ beq _02252D7A
+ ldr r0, [sp]
+ mov r2, #0x62
+ lsl r2, r2, #2
+ add r1, r5, r2
+ ldr r0, [r0, #0xc]
+ add r2, #0x78
+ bl MIi_CpuCopy32
+ mov r1, #0x62
+ lsl r1, r1, #2
+ add r0, r5, r1
+ add r1, #0x78
+ bl DC_FlushRange
+ add r0, r4, #0
+ bl FUN_02016A18
+_02252D7A:
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD20_02252D44
+
+ thumb_func_start MOD20_02252D7C
+MOD20_02252D7C: ; 0x02252D7C
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r0, #0
+ add r7, r1, #0
+ bl MOD20_02252B1C
+ add r4, r0, #0
+ mov r0, #0x61
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD20_02252C3C
+ bl FUN_0204BF44
+ mov r1, #0x62
+ lsl r1, r1, #2
+ add r5, r4, r1
+ lsl r4, r0, #6
+ add r0, r5, r4
+ lsl r1, r6, #5
+ mov r2, #0x20
+ bl GXS_LoadBGPltt
+ add r0, r5, r4
+ add r1, r7, #0
+ mov r2, #0x20
+ bl GXS_LoadOBJPltt
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD20_02252D7C
+
+ thumb_func_start MOD20_02252DB4
+MOD20_02252DB4: ; 0x02252DB4
+ push {r3, r4, r5, lr}
+ bl MOD20_02252B1C
+ add r4, r0, #0
+ mov r0, #0x61
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD20_02252C3C
+ bl FUN_0204BF44
+ mov r1, #0x62
+ lsl r0, r0, #5
+ lsl r1, r1, #2
+ add r0, #0x10
+ add r4, r4, r1
+ lsl r5, r0, #1
+ add r0, r4, r5
+ mov r1, #0
+ mov r2, #0x20
+ bl GXS_LoadBGPltt
+ add r0, r4, r5
+ mov r1, #0
+ mov r2, #0x20
+ bl GXS_LoadOBJPltt
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD20_02252DB4
+
+ thumb_func_start MOD20_02252DEC
+MOD20_02252DEC: ; 0x02252DEC
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ bl MOD20_02252B1C
+ add r4, r0, #0
+ mov r0, #0x61
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD20_02252C3C
+ bl FUN_0204BF44
+ mov r1, #0x62
+ lsl r1, r1, #2
+ add r1, r4, r1
+ lsl r0, r0, #6
+ add r0, r1, r0
+ add r1, r5, #0
+ mov r2, #0x20
+ bl MIi_CpuCopy16
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD20_02252DEC
+
+ thumb_func_start MOD20_02252E18
+MOD20_02252E18: ; 0x02252E18
+ push {r4, lr}
+ add r4, r0, #0
+ beq _02252E58
+ mov r0, #0x57
+ lsl r0, r0, #2
+ add r0, r4, r0
+ bl MOD20_022535A4
+ mov r0, #0x55
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ cmp r0, #0
+ beq _02252E36
+ bl MOD20_02253C4C
+_02252E36:
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ cmp r0, #0
+ beq _02252E44
+ bl FUN_02016A18
+_02252E44:
+ mov r0, #0x56
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ cmp r0, #0
+ beq _02252E52
+ bl FUN_0200CAB4
+_02252E52:
+ add r0, r4, #0
+ bl FUN_02016A18
+_02252E58:
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02252E18
+
+ thumb_func_start MOD20_02252E5C
+MOD20_02252E5C: ; 0x02252E5C
+ push {r4, r5}
+ mov r2, #0xf
+ ldr r5, _02252E7C ; =0x022545EC
+ mov r4, #0
+ lsl r2, r2, #0xc
+_02252E66:
+ ldrh r3, [r5]
+ add r4, r4, #1
+ add r5, r5, #2
+ add r3, r1, r3
+ orr r3, r2
+ strh r3, [r0]
+ add r0, r0, #2
+ cmp r4, #0x2c
+ blo _02252E66
+ pop {r4, r5}
+ bx lr
+ .align 2, 0
+_02252E7C: .word 0x022545EC
+ thumb_func_end MOD20_02252E5C
+
+ thumb_func_start MOD20_02252E80
+MOD20_02252E80: ; 0x02252E80
+ push {lr}
+ sub sp, #0xc
+ add r2, r0, #0
+ add r0, r2, #4
+ str r0, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ mov r0, #7
+ str r0, [sp, #8]
+ ldr r0, _02252EA0 ; =0x02254644
+ ldr r3, [r2]
+ bl MOD20_022537E0
+ add sp, #0xc
+ pop {pc}
+ nop
+_02252EA0: .word 0x02254644
+ thumb_func_end MOD20_02252E80
+
+ thumb_func_start MOD20_02252EA4
+MOD20_02252EA4: ; 0x02252EA4
+ ldr r3, _02252EAC ; =MOD20_02253794
+ add r0, r0, #4
+ bx r3
+ nop
+_02252EAC: .word MOD20_02253794
+ thumb_func_end MOD20_02252EA4
+
+ thumb_func_start MOD20_02252EB0
+MOD20_02252EB0: ; 0x02252EB0
+ ldr r3, _02252EB8 ; =MOD20_022537B8
+ add r0, r0, #4
+ bx r3
+ nop
+_02252EB8: .word MOD20_022537B8
+ thumb_func_end MOD20_02252EB0
+
+ thumb_func_start MOD20_02252EBC
+MOD20_02252EBC: ; 0x02252EBC
+ push {r4, lr}
+ add r4, r0, #0
+ bl MOD20_022538A0
+ add r0, r0, #4
+ add r1, r4, #0
+ bl MOD20_02253888
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02252EBC
+
+ thumb_func_start MOD20_02252ED0
+MOD20_02252ED0: ; 0x02252ED0
+ push {r3, r4, r5, lr}
+ sub sp, #0x10
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ mov r0, #0
+ bl GXS_SetGraphicsMode
+ mov r0, #0x80
+ bl GX_SetBankForSubBG
+ mov r0, #1
+ lsl r0, r0, #8
+ bl GX_SetBankForSubOBJ
+ ldr r2, _02252FD8 ; =0x04001000
+ ldr r0, _02252FDC ; =0xFFCFFFEF
+ ldr r1, [r2]
+ and r1, r0
+ mov r0, #0x10
+ orr r0, r1
+ str r0, [r2]
+ bl FUN_0201E740
+ mov r0, #0x10
+ mov r1, #1
+ bl FUN_0201E74C
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ ldr r2, _02252FE0 ; =0x022545B4
+ mov r1, #4
+ mov r3, #0
+ bl FUN_02016C18
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ ldr r2, _02252FE4 ; =0x022545D0
+ mov r1, #5
+ mov r3, #0
+ bl FUN_02016C18
+ mov r0, #0x40
+ str r0, [sp]
+ mov r0, #0
+ str r0, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ mov r0, #7
+ str r0, [sp, #0xc]
+ mov r0, #0xc
+ lsl r2, r0, #5
+ ldr r2, [r4, r2]
+ mov r1, #0xe
+ mov r3, #4
+ bl FUN_0200687C
+ mov r0, #0
+ str r0, [sp]
+ str r0, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ mov r0, #7
+ str r0, [sp, #0xc]
+ mov r0, #0xc
+ lsl r2, r0, #5
+ ldr r2, [r4, r2]
+ mov r1, #0xf
+ mov r3, #4
+ bl FUN_020068C8
+ mov r0, #0x61
+ lsl r0, r0, #2
+ ldr r0, [r4, r0]
+ bl MOD20_02252C44
+ add r3, r0, #0
+ mov r0, #0x1e
+ lsl r0, r0, #4
+ str r0, [sp]
+ mov r0, #0x20
+ str r0, [sp, #4]
+ mov r0, #7
+ str r0, [sp, #8]
+ mov r0, #0xc
+ mov r1, #0xd
+ mov r2, #4
+ lsl r3, r3, #5
+ bl FUN_02006948
+ mov r3, #0
+ str r3, [sp]
+ mov r0, #0x20
+ str r0, [sp, #4]
+ mov r1, #0x18
+ str r1, [sp, #8]
+ mov r0, #0xf
+ str r0, [sp, #0xc]
+ lsl r0, r1, #4
+ ldr r0, [r4, r0]
+ mov r1, #5
+ mov r2, #0xd8
+ bl FUN_02018540
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ mov r1, #5
+ bl FUN_02017CD0
+ ldr r0, _02252FD8 ; =0x04001000
+ ldr r1, _02252FE8 ; =0xFFFFE0FF
+ ldr r2, [r0]
+ and r2, r1
+ mov r1, #0x13
+ lsl r1, r1, #8
+ orr r1, r2
+ str r1, [r0]
+ ldr r2, [r0]
+ ldr r1, _02252FEC ; =0xFFFF1FFF
+ and r1, r2
+ str r1, [r0]
+ add r0, r5, #0
+ bl MOD20_02252EBC
+ add sp, #0x10
+ pop {r3, r4, r5, pc}
+ nop
+_02252FD8: .word 0x04001000
+_02252FDC: .word 0xFFCFFFEF
+_02252FE0: .word 0x022545B4
+_02252FE4: .word 0x022545D0
+_02252FE8: .word 0xFFFFE0FF
+_02252FEC: .word 0xFFFF1FFF
+ thumb_func_end MOD20_02252ED0
+
+ thumb_func_start MOD20_02252FF0
+MOD20_02252FF0: ; 0x02252FF0
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x18
+ str r1, [sp, #0x10]
+ add r0, r1, #0
+ bl MOD20_022538A8
+ add r4, r0, #0
+ ldr r0, [sp, #0x10]
+ bl MOD20_022538A0
+ add r5, r0, #0
+ ldr r0, [sp, #0x10]
+ bl MOD20_022538AC
+ cmp r0, #0
+ beq _0225301C
+ cmp r0, #1
+ beq _02253028
+ cmp r0, #2
+ beq _022530F6
+ add sp, #0x18
+ pop {r3, r4, r5, r6, r7, pc}
+_0225301C:
+ mov r0, #0
+ strh r0, [r4]
+ strh r0, [r4, #2]
+ ldr r0, [sp, #0x10]
+ bl MOD20_022538B0
+_02253028:
+ ldrh r0, [r4]
+ add r0, r0, #1
+ strh r0, [r4]
+ ldrh r0, [r4]
+ cmp r0, #0
+ beq _022530FC
+ mov r0, #0
+ strh r0, [r4]
+ ldrh r0, [r4, #2]
+ add r0, #0xc
+ strh r0, [r4, #2]
+ ldrh r0, [r4, #2]
+ cmp r0, #0x28
+ bls _02253048
+ mov r0, #0x28
+ strh r0, [r4, #2]
+_02253048:
+ ldrh r1, [r4, #2]
+ lsr r3, r1, #0x1f
+ lsl r2, r1, #0x1e
+ lsr r0, r1, #2
+ sub r2, r2, r3
+ mov r1, #0x1e
+ ror r2, r1
+ mov r1, #0xc
+ sub r6, r1, r0
+ lsl r0, r0, #1
+ str r0, [sp, #0x14]
+ lsl r0, r6, #0x18
+ ldr r1, [sp, #0x14]
+ add r7, r3, r2
+ lsr r0, r0, #0x18
+ str r0, [sp]
+ mov r0, #0x18
+ lsl r1, r1, #0x18
+ str r0, [sp, #4]
+ lsr r1, r1, #0x18
+ str r1, [sp, #8]
+ mov r1, #0xf
+ str r1, [sp, #0xc]
+ lsl r0, r0, #4
+ ldr r0, [r5, r0]
+ mov r1, #5
+ mov r2, #0x40
+ mov r3, #2
+ bl FUN_02018540
+ cmp r7, #0
+ beq _022530DA
+ sub r0, r6, #1
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp]
+ mov r1, #0x18
+ add r2, r7, #0
+ add r2, #0xd8
+ lsl r2, r2, #0x10
+ str r1, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ mov r0, #0xf
+ str r0, [sp, #0xc]
+ lsl r0, r1, #4
+ ldr r0, [r5, r0]
+ mov r1, #5
+ lsr r2, r2, #0x10
+ mov r3, #2
+ bl FUN_02018540
+ ldr r0, [sp, #0x14]
+ mov r2, #0xd8
+ add r0, r6, r0
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp]
+ mov r1, #0x18
+ sub r2, r2, r7
+ lsl r2, r2, #0x10
+ str r1, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ mov r0, #0xf
+ str r0, [sp, #0xc]
+ lsl r0, r1, #4
+ ldr r0, [r5, r0]
+ mov r1, #5
+ lsr r2, r2, #0x10
+ mov r3, #2
+ bl FUN_02018540
+_022530DA:
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r5, r0]
+ mov r1, #5
+ bl FUN_02017CD0
+ ldrh r0, [r4, #2]
+ cmp r0, #0x28
+ bne _022530FC
+ ldr r0, [sp, #0x10]
+ bl MOD20_022538B0
+ add sp, #0x18
+ pop {r3, r4, r5, r6, r7, pc}
+_022530F6:
+ ldr r0, [sp, #0x10]
+ bl MOD20_02252EBC
+_022530FC:
+ add sp, #0x18
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD20_02252FF0
+
+ thumb_func_start MOD20_02253100
+MOD20_02253100: ; 0x02253100
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x18
+ str r1, [sp, #0x10]
+ add r0, r1, #0
+ bl MOD20_022538A8
+ add r4, r0, #0
+ ldr r0, [sp, #0x10]
+ bl MOD20_022538A0
+ add r5, r0, #0
+ ldr r0, [sp, #0x10]
+ bl MOD20_022538AC
+ cmp r0, #0
+ beq _0225312C
+ cmp r0, #1
+ beq _02253138
+ cmp r0, #2
+ beq _0225321E
+ add sp, #0x18
+ pop {r3, r4, r5, r6, r7, pc}
+_0225312C:
+ mov r0, #0
+ strh r0, [r4]
+ strh r0, [r4, #2]
+ ldr r0, [sp, #0x10]
+ bl MOD20_022538B0
+_02253138:
+ ldrh r0, [r4]
+ add r0, r0, #1
+ strh r0, [r4]
+ ldrh r0, [r4]
+ cmp r0, #0
+ beq _02253224
+ mov r0, #0
+ strh r0, [r4]
+ ldrh r0, [r4, #2]
+ add r0, #8
+ strh r0, [r4, #2]
+ ldrh r0, [r4, #2]
+ cmp r0, #0x28
+ bls _02253158
+ mov r0, #0x28
+ strh r0, [r4, #2]
+_02253158:
+ ldrh r0, [r4, #2]
+ mov r3, #2
+ lsr r2, r0, #0x1f
+ lsl r1, r0, #0x1e
+ lsr r7, r0, #2
+ sub r1, r1, r2
+ mov r0, #0x1e
+ ror r1, r0
+ add r6, r2, r1
+ mov r0, #0x16
+ sub r0, r0, r7
+ str r0, [sp, #0x14]
+ lsl r1, r7, #0x18
+ str r3, [sp]
+ mov r0, #0x18
+ str r0, [sp, #4]
+ lsr r1, r1, #0x18
+ str r1, [sp, #8]
+ mov r1, #0xf
+ str r1, [sp, #0xc]
+ lsl r0, r0, #4
+ ldr r0, [r5, r0]
+ mov r1, #5
+ mov r2, #0xd8
+ bl FUN_02018540
+ ldr r0, [sp, #0x14]
+ lsl r1, r7, #0x18
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp]
+ mov r0, #0x18
+ str r0, [sp, #4]
+ lsr r1, r1, #0x18
+ str r1, [sp, #8]
+ mov r1, #0xf
+ str r1, [sp, #0xc]
+ lsl r0, r0, #4
+ ldr r0, [r5, r0]
+ mov r1, #5
+ mov r2, #0xd8
+ mov r3, #2
+ bl FUN_02018540
+ cmp r6, #0
+ beq _02253202
+ mov r0, #0
+ str r0, [sp]
+ mov r1, #0x18
+ str r1, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ mov r0, #0xf
+ str r0, [sp, #0xc]
+ lsl r0, r1, #4
+ sub r3, r6, #1
+ mov r2, #0xdb
+ sub r2, r2, r3
+ lsl r2, r2, #0x10
+ ldr r0, [r5, r0]
+ mov r1, #5
+ lsr r2, r2, #0x10
+ mov r3, #2
+ bl FUN_02018540
+ ldr r0, [sp, #0x14]
+ add r6, #0xd4
+ sub r0, r0, #1
+ lsl r0, r0, #0x18
+ lsr r0, r0, #0x18
+ str r0, [sp]
+ mov r1, #0x18
+ lsl r2, r6, #0x10
+ str r1, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ mov r0, #0xf
+ str r0, [sp, #0xc]
+ lsl r0, r1, #4
+ ldr r0, [r5, r0]
+ mov r1, #5
+ lsr r2, r2, #0x10
+ mov r3, #2
+ bl FUN_02018540
+_02253202:
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r5, r0]
+ mov r1, #5
+ bl FUN_02017CD0
+ ldrh r0, [r4, #2]
+ cmp r0, #0x28
+ bne _02253224
+ ldr r0, [sp, #0x10]
+ bl MOD20_022538B0
+ add sp, #0x18
+ pop {r3, r4, r5, r6, r7, pc}
+_0225321E:
+ ldr r0, [sp, #0x10]
+ bl MOD20_02252EBC
+_02253224:
+ add sp, #0x18
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD20_02253100
+
+ thumb_func_start MOD20_02253228
+MOD20_02253228: ; 0x02253228
+ push {r4, r5, r6, lr}
+ sub sp, #0x10
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A8
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r0, r5, #0
+ bl MOD20_022538AC
+ add r2, r0, #0
+ cmp r2, #4
+ bhs _02253280
+ mov r3, #2
+ str r3, [sp]
+ mov r1, #0x18
+ mov r6, #0xd7
+ sub r2, r6, r2
+ lsl r2, r2, #0x10
+ str r1, [sp, #4]
+ mov r0, #0x14
+ str r0, [sp, #8]
+ mov r0, #0xf
+ str r0, [sp, #0xc]
+ lsl r0, r1, #4
+ ldr r0, [r4, r0]
+ mov r1, #5
+ lsr r2, r2, #0x10
+ bl FUN_02018540
+ add r0, r6, #0
+ add r0, #0xa9
+ ldr r0, [r4, r0]
+ mov r1, #5
+ bl FUN_02017CD0
+ add r0, r5, #0
+ bl MOD20_022538B0
+ add sp, #0x10
+ pop {r4, r5, r6, pc}
+_02253280:
+ add r0, r5, #0
+ bl MOD20_02252EBC
+ add sp, #0x10
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02253228
+
+ thumb_func_start MOD20_0225328C
+MOD20_0225328C: ; 0x0225328C
+ push {r4, r5, r6, lr}
+ sub sp, #0x10
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A8
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r0, r5, #0
+ bl MOD20_022538AC
+ add r2, r0, #0
+ cmp r2, #4
+ bhs _022532E4
+ mov r3, #2
+ str r3, [sp]
+ mov r1, #0x18
+ mov r6, #0xdb
+ sub r2, r6, r2
+ lsl r2, r2, #0x10
+ str r1, [sp, #4]
+ mov r0, #0x14
+ str r0, [sp, #8]
+ mov r0, #0xf
+ str r0, [sp, #0xc]
+ lsl r0, r1, #4
+ ldr r0, [r4, r0]
+ mov r1, #5
+ lsr r2, r2, #0x10
+ bl FUN_02018540
+ add r0, r6, #0
+ add r0, #0xa5
+ ldr r0, [r4, r0]
+ mov r1, #5
+ bl FUN_02017CD0
+ add r0, r5, #0
+ bl MOD20_022538B0
+ add sp, #0x10
+ pop {r4, r5, r6, pc}
+_022532E4:
+ add r0, r5, #0
+ bl MOD20_02252EBC
+ add sp, #0x10
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD20_0225328C
+
+ thumb_func_start MOD20_022532F0
+MOD20_022532F0: ; 0x022532F0
+ push {r4, r5, lr}
+ sub sp, #0xc
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ mov r0, #0xb
+ add r2, r4, #0
+ str r0, [sp]
+ mov r1, #4
+ str r1, [sp, #4]
+ str r0, [sp, #8]
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ add r2, #0x84
+ mov r3, #0x1b
+ bl FUN_02018148
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ mov r1, #4
+ bl FUN_02017CD0
+ ldr r0, _02253334 ; =0x00000671
+ bl FUN_020054C8
+ add r0, r5, #0
+ bl MOD20_02252EBC
+ add sp, #0xc
+ pop {r4, r5, pc}
+ .align 2, 0
+_02253334: .word 0x00000671
+ thumb_func_end MOD20_022532F0
+
+ thumb_func_start MOD20_02253338
+MOD20_02253338: ; 0x02253338
+ push {r4, r5, lr}
+ sub sp, #0xc
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ mov r0, #0xb
+ add r2, r4, #0
+ str r0, [sp]
+ mov r1, #4
+ str r1, [sp, #4]
+ str r0, [sp, #8]
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ add r2, #0x2c
+ mov r3, #0x1b
+ bl FUN_02018148
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ mov r1, #4
+ bl FUN_02017CD0
+ add r0, r5, #0
+ bl MOD20_02252EBC
+ add sp, #0xc
+ pop {r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02253338
+
+ thumb_func_start MOD20_02253378
+MOD20_02253378: ; 0x02253378
+ push {r4, r5, lr}
+ sub sp, #0xc
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ mov r0, #0xb
+ add r2, r4, #0
+ str r0, [sp]
+ mov r1, #4
+ str r1, [sp, #4]
+ str r0, [sp, #8]
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ add r2, #0xdc
+ mov r3, #0x1b
+ bl FUN_02018148
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ mov r1, #4
+ bl FUN_02017CD0
+ ldr r0, _022533BC ; =0x0000066F
+ bl FUN_020054C8
+ add r0, r5, #0
+ bl MOD20_02252EBC
+ add sp, #0xc
+ pop {r4, r5, pc}
+ .align 2, 0
+_022533BC: .word 0x0000066F
+ thumb_func_end MOD20_02253378
+
+ thumb_func_start MOD20_022533C0
+MOD20_022533C0: ; 0x022533C0
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ mov r1, #0x57
+ add r4, r0, #0
+ lsl r1, r1, #2
+ add r1, r4, r1
+ bl MOD20_02253430
+ mov r0, #0x57
+ lsl r0, r0, #2
+ ldr r1, [r4]
+ add r0, r4, r0
+ bl MOD20_0225354C
+ add r0, r5, #0
+ bl MOD20_02252EBC
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD20_022533C0
+
+ thumb_func_start MOD20_022533EC
+MOD20_022533EC: ; 0x022533EC
+ push {r4, lr}
+ add r4, r1, #0
+ add r0, r4, #0
+ bl MOD20_022538A0
+ add r1, r0, #0
+ mov r0, #0x57
+ lsl r0, r0, #2
+ add r0, r1, r0
+ ldr r1, [r1]
+ bl MOD20_0225354C
+ add r0, r4, #0
+ bl MOD20_02252EBC
+ pop {r4, pc}
+ thumb_func_end MOD20_022533EC
+
+ thumb_func_start MOD20_0225340C
+MOD20_0225340C: ; 0x0225340C
+ push {r4, lr}
+ add r4, r1, #0
+ add r0, r4, #0
+ bl MOD20_022538A0
+ mov r1, #0x57
+ lsl r1, r1, #2
+ add r0, r0, r1
+ bl MOD20_022535A4
+ add r0, r4, #0
+ bl MOD20_02252EBC
+ pop {r4, pc}
+ thumb_func_end MOD20_0225340C
+
+ thumb_func_start MOD20_02253428
+MOD20_02253428: ; 0x02253428
+ mov r2, #0
+ str r2, [r0]
+ str r1, [r0, #4]
+ bx lr
+ thumb_func_end MOD20_02253428
+
+ thumb_func_start MOD20_02253430
+MOD20_02253430: ; 0x02253430
+ push {r4, r5, lr}
+ sub sp, #0xc
+ add r5, r0, #0
+ add r4, r1, #0
+ mov r0, #7
+ str r0, [sp]
+ add r0, r4, #0
+ add r0, #8
+ mov r1, #0xc
+ mov r2, #3
+ mov r3, #4
+ bl MOD20_02253FBC
+ cmp r0, #0
+ beq _022534CC
+ mov r3, #0
+ str r3, [sp]
+ mov r2, #1
+ str r2, [sp, #4]
+ mov r0, #7
+ str r0, [sp, #8]
+ mov r0, #0xc
+ mov r1, #2
+ bl FUN_02006A34
+ mov r0, #0x60
+ str r0, [sp]
+ mov r0, #7
+ mov r1, #0
+ str r0, [sp, #4]
+ mov r0, #0xc
+ mov r2, #5
+ add r3, r1, #0
+ bl FUN_02006930
+ add r0, r5, #0
+ mov r1, #0xf
+ bl MOD20_022534D4
+ add r2, r4, #0
+ ldr r0, [r4, #4]
+ ldr r1, _022534D0 ; =0x022545A4
+ add r2, #8
+ bl MOD20_02253E74
+ str r0, [r4, #0x1c]
+ cmp r0, #0
+ beq _022534CC
+ add r2, r4, #0
+ ldr r0, [r4, #4]
+ ldr r1, _022534D0 ; =0x022545A4
+ add r2, #8
+ bl MOD20_02253E74
+ str r0, [r4, #0x20]
+ cmp r0, #0
+ bne _022534AE
+ ldr r0, [r4, #4]
+ ldr r1, [r4, #0x1c]
+ bl MOD20_02253F14
+ add sp, #0xc
+ pop {r4, r5, pc}
+_022534AE:
+ mov r1, #1
+ lsl r1, r1, #0x10
+ mov r2, #0
+ bl MOD20_02253F54
+ ldr r0, [r4, #0x1c]
+ mov r1, #0xf
+ bl MOD20_02253F9C
+ ldr r0, [r4, #0x20]
+ mov r1, #0xf
+ bl MOD20_02253F9C
+ mov r0, #1
+ str r0, [r4]
+_022534CC:
+ add sp, #0xc
+ pop {r4, r5, pc}
+ .align 2, 0
+_022534D0: .word 0x022545A4
+ thumb_func_end MOD20_02253430
+
+ thumb_func_start MOD20_022534D4
+MOD20_022534D4: ; 0x022534D4
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ mov r0, #0x61
+ lsl r0, r0, #2
+ ldr r0, [r5, r0]
+ add r4, r1, #0
+ bl MOD20_02252C3C
+ bl FUN_0204BF44
+ mov r1, #0x62
+ lsl r0, r0, #5
+ lsl r1, r1, #2
+ add r0, r0, #1
+ add r2, r5, r1
+ lsl r0, r0, #1
+ add r0, r2, r0
+ add r1, #0x5a
+ mov r2, #2
+ bl GXS_LoadBGPltt
+ mov r0, #0xe2
+ lsl r0, r0, #2
+ add r0, r5, r0
+ bl MOD20_02252DEC
+ ldr r1, _02253548 ; =0x0000038A
+ add r0, r1, #6
+ ldrh r2, [r5, r1]
+ ldrh r0, [r5, r0]
+ strh r0, [r5, r1]
+ add r0, r1, #6
+ strh r2, [r5, r0]
+ add r0, r1, #0
+ add r2, r1, #0
+ add r0, #0xe
+ add r2, #0x1c
+ ldrh r3, [r5, r2]
+ add r2, r1, #0
+ ldrh r0, [r5, r0]
+ add r2, #0xe
+ strh r3, [r5, r2]
+ add r2, r1, #0
+ add r2, #0x1c
+ strh r0, [r5, r2]
+ sub r0, r1, #2
+ add r0, r5, r0
+ mov r1, #0x20
+ bl DC_FlushRange
+ mov r0, #0xe2
+ lsl r0, r0, #2
+ add r0, r5, r0
+ lsl r1, r4, #5
+ mov r2, #0x20
+ bl GXS_LoadOBJPltt
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_02253548: .word 0x0000038A
+ thumb_func_end MOD20_022534D4
+
+ thumb_func_start MOD20_0225354C
+MOD20_0225354C: ; 0x0225354C
+ push {r3, r4, r5, lr}
+ add r4, r0, #0
+ ldr r0, [r4]
+ cmp r0, #0
+ beq _02253596
+ ldr r0, [r1]
+ ldr r2, _02253598 ; =0x04000280
+ mov r3, #0
+ add r0, r0, #1
+ strh r3, [r2]
+ str r0, [r2, #0x10]
+ add r0, r2, #0
+ mov r1, #0xa
+ add r0, #0x18
+ str r1, [r0]
+ str r3, [r0, #4]
+ lsr r0, r2, #0xb
+_0225356E:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _0225356E
+ ldr r0, _0225359C ; =0x040002A0
+ add r3, r0, #0
+ ldr r1, [r0]
+ sub r3, #0x20
+ lsr r0, r0, #0xb
+_0225357E:
+ ldrh r2, [r3]
+ tst r2, r0
+ bne _0225357E
+ ldr r0, _022535A0 ; =0x040002A8
+ ldr r5, [r0]
+ ldr r0, [r4, #0x1c]
+ bl MOD20_02253F28
+ ldr r0, [r4, #0x20]
+ add r1, r5, #0
+ bl MOD20_02253F28
+_02253596:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_02253598: .word 0x04000280
+_0225359C: .word 0x040002A0
+_022535A0: .word 0x040002A8
+ thumb_func_end MOD20_0225354C
+
+ thumb_func_start MOD20_022535A4
+MOD20_022535A4: ; 0x022535A4
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4]
+ cmp r0, #0
+ beq _022535CA
+ ldr r0, [r4, #4]
+ ldr r1, [r4, #0x1c]
+ bl MOD20_02253F14
+ ldr r0, [r4, #4]
+ ldr r1, [r4, #0x20]
+ bl MOD20_02253F14
+ add r0, r4, #0
+ add r0, #8
+ bl MOD20_02254014
+ mov r0, #0
+ str r0, [r4]
+_022535CA:
+ pop {r4, pc}
+ thumb_func_end MOD20_022535A4
+
+ thumb_func_start MOD20_022535CC
+MOD20_022535CC: ; 0x022535CC
+ push {r4, r5, r6, lr}
+ sub sp, #0x10
+ add r6, r1, #0
+ add r0, r6, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A8
+ add r0, r6, #0
+ bl MOD20_022538AC
+ add r5, r0, #0
+ cmp r5, #3
+ bhi _0225365E
+ add r0, r5, r5
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_022535F8: ; jump table
+ .short _02253600 - _022535F8 - 2 ; case 0
+ .short _0225361C - _022535F8 - 2 ; case 1
+ .short _0225361C - _022535F8 - 2 ; case 2
+ .short _0225361C - _022535F8 - 2 ; case 3
+_02253600:
+ mov r0, #6
+ str r0, [sp]
+ ldr r0, _02253664 ; =0x04001050
+ mov r1, #2
+ mov r2, #0x1c
+ mov r3, #0x1a
+ bl G2x_SetBlendAlpha_
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ mov r1, #4
+ bl FUN_02017CD0
+_0225361C:
+ mov r3, #2
+ str r3, [sp]
+ mov r1, #0x18
+ mov r2, #0xdb
+ sub r2, r2, r5
+ lsl r2, r2, #0x10
+ str r1, [sp, #4]
+ mov r0, #0x14
+ str r0, [sp, #8]
+ mov r0, #0xf
+ str r0, [sp, #0xc]
+ lsl r0, r1, #4
+ ldr r0, [r4, r0]
+ mov r1, #5
+ lsr r2, r2, #0x10
+ bl FUN_02018540
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ mov r1, #5
+ bl FUN_02017CD0
+ cmp r5, #3
+ bne _02253658
+ add r0, r6, #0
+ bl MOD20_02252EBC
+ add sp, #0x10
+ pop {r4, r5, r6, pc}
+_02253658:
+ add r0, r6, #0
+ bl MOD20_022538B0
+_0225365E:
+ add sp, #0x10
+ pop {r4, r5, r6, pc}
+ nop
+_02253664: .word 0x04001050
+ thumb_func_end MOD20_022535CC
+
+ thumb_func_start MOD20_02253668
+MOD20_02253668: ; 0x02253668
+ push {r3, r4, r5, lr}
+ sub sp, #0x10
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ mov r3, #2
+ add r4, r0, #0
+ str r3, [sp]
+ mov r1, #0x18
+ str r1, [sp, #4]
+ mov r0, #0x14
+ str r0, [sp, #8]
+ mov r0, #0xf
+ str r0, [sp, #0xc]
+ lsl r0, r1, #4
+ ldr r0, [r4, r0]
+ mov r1, #5
+ mov r2, #0x40
+ bl FUN_02018540
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ mov r1, #4
+ bl FUN_02017CD0
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ mov r1, #5
+ bl FUN_02017CD0
+ mov r1, #0
+ ldr r0, _022536C4 ; =0x04001050
+ add r2, r1, #0
+ mov r3, #0x1f
+ str r1, [sp]
+ bl G2x_SetBlendAlpha_
+ add r0, r5, #0
+ bl MOD20_02252EBC
+ add sp, #0x10
+ pop {r3, r4, r5, pc}
+ nop
+_022536C4: .word 0x04001050
+ thumb_func_end MOD20_02253668
+
+ thumb_func_start MOD20_022536C8
+MOD20_022536C8: ; 0x022536C8
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ mov r1, #4
+ bl FUN_020178A0
+ mov r0, #6
+ lsl r0, r0, #6
+ ldr r0, [r4, r0]
+ mov r1, #5
+ bl FUN_020178A0
+ add r0, r5, #0
+ bl MOD20_02252EBC
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD20_022536C8
+
+ thumb_func_start MOD20_022536F4
+MOD20_022536F4: ; 0x022536F4
+ ldr r2, _02253710 ; =0x12345678
+ str r1, [r0]
+ mov r3, #0
+ str r2, [r0, #4]
+ cmp r1, #0
+ bls _0225370C
+ sub r2, r3, #1
+_02253702:
+ add r3, r3, #1
+ str r2, [r0, #8]
+ add r0, r0, #4
+ cmp r3, r1
+ blo _02253702
+_0225370C:
+ bx lr
+ nop
+_02253710: .word 0x12345678
+ thumb_func_end MOD20_022536F4
+
+ thumb_func_start MOD20_02253714
+MOD20_02253714: ; 0x02253714
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ ldr r1, [r5, #4]
+ ldr r0, _02253750 ; =0x12345678
+ cmp r1, r0
+ beq _02253726
+ bl ErrorHandling
+_02253726:
+ ldr r6, [r5]
+ mov r2, #0
+ cmp r6, #0
+ bls _0225374A
+ add r3, r5, #0
+ sub r0, r2, #1
+_02253732:
+ ldr r1, [r3, #8]
+ cmp r1, r0
+ bne _02253742
+ lsl r0, r2, #2
+ add r0, r5, r0
+ str r4, [r0, #8]
+ mov r0, #1
+ pop {r4, r5, r6, pc}
+_02253742:
+ add r2, r2, #1
+ add r3, r3, #4
+ cmp r2, r6
+ blo _02253732
+_0225374A:
+ mov r0, #0
+ pop {r4, r5, r6, pc}
+ nop
+_02253750: .word 0x12345678
+ thumb_func_end MOD20_02253714
+
+ thumb_func_start MOD20_02253754
+MOD20_02253754: ; 0x02253754
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ ldr r1, [r5, #4]
+ ldr r0, _02253790 ; =0x12345678
+ cmp r1, r0
+ beq _02253766
+ bl ErrorHandling
+_02253766:
+ ldr r3, [r5]
+ mov r2, #0
+ cmp r3, #0
+ bls _0225378A
+ add r1, r5, #0
+_02253770:
+ ldr r0, [r1, #8]
+ cmp r4, r0
+ bne _02253782
+ mov r1, #0
+ lsl r0, r2, #2
+ mvn r1, r1
+ add r0, r5, r0
+ str r1, [r0, #8]
+ pop {r3, r4, r5, pc}
+_02253782:
+ add r2, r2, #1
+ add r1, r1, #4
+ cmp r2, r3
+ blo _02253770
+_0225378A:
+ bl ErrorHandling
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_02253790: .word 0x12345678
+ thumb_func_end MOD20_02253754
+
+ thumb_func_start MOD20_02253794
+MOD20_02253794: ; 0x02253794
+ push {r3, r4}
+ ldr r4, [r0]
+ mov r3, #0
+ cmp r4, #0
+ bls _022537B2
+_0225379E:
+ ldr r2, [r0, #8]
+ cmp r1, r2
+ bne _022537AA
+ mov r0, #0
+ pop {r3, r4}
+ bx lr
+_022537AA:
+ add r3, r3, #1
+ add r0, r0, #4
+ cmp r3, r4
+ blo _0225379E
+_022537B2:
+ mov r0, #1
+ pop {r3, r4}
+ bx lr
+ thumb_func_end MOD20_02253794
+
+ thumb_func_start MOD20_022537B8
+MOD20_022537B8: ; 0x022537B8
+ push {r3, r4}
+ ldr r4, [r0]
+ mov r3, #0
+ cmp r4, #0
+ bls _022537D8
+ sub r1, r3, #1
+_022537C4:
+ ldr r2, [r0, #8]
+ cmp r2, r1
+ beq _022537D0
+ mov r0, #0
+ pop {r3, r4}
+ bx lr
+_022537D0:
+ add r3, r3, #1
+ add r0, r0, #4
+ cmp r3, r4
+ blo _022537C4
+_022537D8:
+ mov r0, #1
+ pop {r3, r4}
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_022537B8
+
+ thumb_func_start MOD20_022537E0
+MOD20_022537E0: ; 0x022537E0
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0xc
+ add r7, r0, #0
+ str r2, [sp]
+ mov r0, #0
+ add r5, r1, #0
+ ldr r2, [r7]
+ sub r1, r0, #1
+ str r3, [sp, #4]
+ cmp r2, r1
+ beq _02253880
+ add r3, r7, #0
+ sub r1, r0, #1
+_022537FA:
+ ldr r2, [r3]
+ cmp r5, r2
+ bne _02253876
+ add r6, r0, #0
+ add r0, r7, #0
+ str r0, [sp, #8]
+ add r0, #8
+ mov r1, #0xc
+ str r0, [sp, #8]
+ mul r6, r1
+ ldr r1, [sp, #8]
+ ldr r0, [sp, #0x28]
+ ldr r1, [r1, r6]
+ add r1, #0x18
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02253870
+ ldr r0, [sp, #8]
+ ldr r0, [r0, r6]
+ cmp r0, #0
+ beq _0225382C
+ add r0, r4, #0
+ add r0, #0x18
+ b _0225382E
+_0225382C:
+ mov r0, #0
+_0225382E:
+ str r0, [r4, #0xc]
+ ldr r0, [sp, #0x20]
+ add r1, r5, #0
+ bl MOD20_02253714
+ cmp r0, #0
+ beq _02253866
+ ldr r0, [sp]
+ ldr r2, [sp, #0x24]
+ str r0, [r4, #8]
+ mov r0, #0
+ str r0, [r4, #4]
+ str r5, [r4]
+ ldr r0, [sp, #4]
+ add r5, r7, #4
+ str r0, [r4, #0x10]
+ ldr r0, [r5, r6]
+ add r1, r4, #0
+ bl FUN_0200CA44
+ str r0, [r4, #0x14]
+ cmp r0, #0
+ beq _02253884
+ ldr r2, [r5, r6]
+ add r1, r4, #0
+ blx r2
+ add sp, #0xc
+ pop {r4, r5, r6, r7, pc}
+_02253866:
+ add r0, r4, #0
+ bl FUN_02016A18
+ add sp, #0xc
+ pop {r4, r5, r6, r7, pc}
+_02253870:
+ bl ErrorHandling
+ b _02253880
+_02253876:
+ add r3, #0xc
+ ldr r2, [r3]
+ add r0, r0, #1
+ cmp r2, r1
+ bne _022537FA
+_02253880:
+ bl ErrorHandling
+_02253884:
+ add sp, #0xc
+ pop {r4, r5, r6, r7, pc}
+ thumb_func_end MOD20_022537E0
+
+ thumb_func_start MOD20_02253888
+MOD20_02253888: ; 0x02253888
+ push {r4, lr}
+ add r4, r1, #0
+ ldr r1, [r4]
+ bl MOD20_02253754
+ ldr r0, [r4, #0x14]
+ bl FUN_0200CAB4
+ add r0, r4, #0
+ bl FUN_02016A18
+ pop {r4, pc}
+ thumb_func_end MOD20_02253888
+
+ thumb_func_start MOD20_022538A0
+MOD20_022538A0: ; 0x022538A0
+ ldr r0, [r0, #8]
+ bx lr
+ thumb_func_end MOD20_022538A0
+
+ thumb_func_start MOD20_022538A4
+MOD20_022538A4: ; 0x022538A4
+ ldr r0, [r0, #0x10]
+ bx lr
+ thumb_func_end MOD20_022538A4
+
+ thumb_func_start MOD20_022538A8
+MOD20_022538A8: ; 0x022538A8
+ ldr r0, [r0, #0xc]
+ bx lr
+ thumb_func_end MOD20_022538A8
+
+ thumb_func_start MOD20_022538AC
+MOD20_022538AC: ; 0x022538AC
+ ldr r0, [r0, #4]
+ bx lr
+ thumb_func_end MOD20_022538AC
+
+ thumb_func_start MOD20_022538B0
+MOD20_022538B0: ; 0x022538B0
+ ldr r1, [r0, #4]
+ add r1, r1, #1
+ str r1, [r0, #4]
+ bx lr
+ thumb_func_end MOD20_022538B0
+
+ thumb_func_start MOD20_022538B8
+MOD20_022538B8: ; 0x022538B8
+ str r1, [r0, #4]
+ bx lr
+ thumb_func_end MOD20_022538B8
+
+ thumb_func_start MOD20_022538BC
+MOD20_022538BC: ; 0x022538BC
+ push {r3, r4, r5, r6}
+ mul r2, r3
+ ldr r4, [sp, #0x18]
+ add r1, r1, r2
+ lsl r6, r1, #1
+ lsl r4, r4, #0xc
+ ldr r1, [sp, #0x10]
+ add r5, r4, #0
+ orr r5, r1
+ add r2, r0, r6
+ strh r5, [r0, r6]
+ add r0, r1, #1
+ orr r0, r4
+ strh r0, [r2, #2]
+ ldr r0, [sp, #0x14]
+ lsl r3, r3, #1
+ add r1, r1, r0
+ add r0, r4, #0
+ orr r0, r1
+ strh r0, [r2, r3]
+ add r0, r1, #1
+ add r1, r4, #0
+ orr r1, r0
+ add r0, r2, r3
+ strh r1, [r0, #2]
+ pop {r3, r4, r5, r6}
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_022538BC
+
+ thumb_func_start MOD20_022538F4
+MOD20_022538F4: ; 0x022538F4
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r0, #8
+ mov r1, #0x20
+ bl FUN_02016998
+ add r7, r0, #0
+ beq _02253960
+ bl MOD20_02252DEC
+ mov r4, #0
+ cmp r6, #0
+ bls _0225395A
+_02253910:
+ ldrh r3, [r5]
+ mov r0, #0x1f
+ lsl r0, r0, #0xa
+ and r0, r3
+ asr r0, r0, #0xa
+ add r2, r0, #0
+ mov r1, #0x72
+ mov r0, #0x1f
+ mul r2, r1
+ and r0, r3
+ add r1, #0xb9
+ mul r1, r0
+ mov r0, #0x3e
+ lsl r0, r0, #4
+ and r0, r3
+ asr r3, r0, #5
+ ldr r0, _02253964 ; =0x0000024B
+ mul r0, r3
+ add r0, r1, r0
+ mov r1, #0xfa
+ add r0, r2, r0
+ lsl r1, r1, #2
+ bl _u32_div_f
+ lsr r1, r0, #3
+ cmp r1, #3
+ bls _02253948
+ mov r1, #3
+_02253948:
+ ldr r0, _02253968 ; =0x0225470C
+ add r4, r4, #1
+ ldrb r0, [r0, r1]
+ lsl r0, r0, #1
+ ldrh r0, [r7, r0]
+ strh r0, [r5]
+ add r5, r5, #2
+ cmp r4, r6
+ blo _02253910
+_0225395A:
+ add r0, r7, #0
+ bl FUN_02016A18
+_02253960:
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_02253964: .word 0x0000024B
+_02253968: .word 0x0225470C
+ thumb_func_end MOD20_022538F4
+
+ thumb_func_start MOD20_0225396C
+MOD20_0225396C: ; 0x0225396C
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r0, #0
+ add r7, r1, #0
+ mov r0, #8
+ mov r1, #0x20
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _022539C2
+ mov r0, #8
+ mov r1, #0x20
+ bl FUN_02016998
+ add r5, r0, #0
+ add r0, r4, #0
+ bl MOD20_02252DEC
+ cmp r5, #0
+ beq _022539BC
+ mov r0, #0
+ add r1, r5, #0
+ lsl r3, r6, #1
+_02253998:
+ ldrh r2, [r4, r3]
+ add r0, r0, #1
+ strh r2, [r1]
+ add r1, r1, #2
+ cmp r0, #0x10
+ blt _02253998
+ add r0, r5, #0
+ mov r1, #0x20
+ bl DC_FlushRange
+ add r0, r5, #0
+ lsl r1, r7, #5
+ mov r2, #0x20
+ bl GXS_LoadOBJPltt
+ add r0, r5, #0
+ bl FUN_02016A18
+_022539BC:
+ add r0, r4, #0
+ bl FUN_02016A18
+_022539C2:
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD20_0225396C
+
+ thumb_func_start MOD20_022539C4
+MOD20_022539C4: ; 0x022539C4
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ bl FUN_0206B888
+ add r1, r0, #0
+ mov r0, #0x13
+ add r2, sp, #0
+ mov r3, #8
+ bl FUN_02006C08
+ add r4, r0, #0
+ beq _02253A02
+ ldr r0, [sp]
+ mov r1, #0x40
+ ldr r0, [r0, #0xc]
+ bl MOD20_022538F4
+ ldr r0, [sp]
+ mov r1, #0x80
+ ldr r0, [r0, #0xc]
+ bl DC_FlushRange
+ ldr r0, [sp]
+ lsl r1, r5, #5
+ ldr r0, [r0, #0xc]
+ mov r2, #0x80
+ bl GXS_LoadOBJPltt
+ add r0, r4, #0
+ bl FUN_02016A18
+_02253A02:
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD20_022539C4
+
+ thumb_func_start MOD20_02253A04
+MOD20_02253A04: ; 0x02253A04
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x24
+ str r0, [sp, #4]
+ lsl r0, r3, #1
+ str r0, [sp, #0xc]
+ add r6, r1, #0
+ str r2, [sp, #8]
+ ldr r2, _02253A9C ; =0x02254708
+ ldr r1, [sp, #0xc]
+ mov r0, #8
+ ldrh r1, [r2, r1]
+ bl FUN_02016998
+ add r7, r0, #0
+ beq _02253A98
+ mov r0, #0x13
+ mov r1, #8
+ bl FUN_02006670
+ str r0, [sp, #0x1c]
+ cmp r0, #0
+ beq _02253A92
+ mov r0, #0
+ str r0, [sp, #0x18]
+ ldr r0, [sp, #8]
+ cmp r0, #0
+ bls _02253A8C
+ ldr r1, _02253AA0 ; =0x02254704
+ ldr r0, [sp, #0xc]
+ ldr r4, [sp, #0x18]
+ ldrh r5, [r1, r0]
+ ldr r1, _02253A9C ; =0x02254708
+ ldrh r0, [r1, r0]
+ str r0, [sp, #0x14]
+ ldr r0, [sp, #4]
+ lsl r0, r0, #5
+ str r0, [sp, #0x10]
+_02253A4E:
+ str r7, [sp]
+ ldr r0, [sp, #0x1c]
+ ldr r1, [r6]
+ ldr r3, [sp, #0x14]
+ mov r2, #0
+ bl FUN_02006814
+ add r0, r7, #0
+ add r1, sp, #0x20
+ bl FUN_020B0088
+ ldr r0, [sp, #0x20]
+ add r1, r5, #0
+ ldr r0, [r0, #0x14]
+ bl DC_FlushRange
+ ldr r0, [sp, #0x20]
+ ldr r1, [sp, #0x10]
+ ldr r0, [r0, #0x14]
+ add r1, r1, r4
+ add r2, r5, #0
+ bl GXS_LoadOBJ
+ ldr r0, [sp, #0x18]
+ add r6, r6, #4
+ add r1, r0, #1
+ ldr r0, [sp, #8]
+ add r4, r4, r5
+ str r1, [sp, #0x18]
+ cmp r1, r0
+ blo _02253A4E
+_02253A8C:
+ ldr r0, [sp, #0x1c]
+ bl FUN_020066F4
+_02253A92:
+ add r0, r7, #0
+ bl FUN_02016A18
+_02253A98:
+ add sp, #0x24
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_02253A9C: .word 0x02254708
+_02253AA0: .word 0x02254704
+ thumb_func_end MOD20_02253A04
+
+ thumb_func_start MOD20_02253AA4
+MOD20_02253AA4: ; 0x02253AA4
+ push {r3, r4, r5, r6, lr}
+ sub sp, #0x14
+ add r5, r1, #0
+ add r4, r2, #0
+ mov r1, #2
+ add r2, sp, #0xc
+ strh r1, [r2]
+ mov r3, #3
+ strh r3, [r2, #2]
+ mov r3, #0xa
+ strh r3, [r2, #4]
+ mov r3, #0xb
+ strh r3, [r2, #6]
+ str r3, [sp]
+ str r1, [sp, #4]
+ str r1, [sp, #8]
+ lsl r1, r4, #0x18
+ lsr r1, r1, #0x18
+ add r2, sp, #0xc
+ mov r3, #9
+ add r6, r0, #0
+ bl FUN_02018148
+ mov r1, #4
+ add r0, sp, #0xc
+ strh r1, [r0]
+ mov r1, #5
+ strh r1, [r0, #2]
+ mov r1, #0xc
+ strh r1, [r0, #4]
+ mov r1, #0xd
+ strh r1, [r0, #6]
+ mov r3, #0xb
+ lsl r1, r4, #0x18
+ str r3, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ str r0, [sp, #8]
+ add r0, r6, #0
+ lsr r1, r1, #0x18
+ add r2, sp, #0xc
+ bl FUN_02018148
+ mov r1, #6
+ add r0, sp, #0xc
+ strh r1, [r0]
+ mov r1, #7
+ strh r1, [r0, #2]
+ mov r1, #0xe
+ strh r1, [r0, #4]
+ mov r1, #0xf
+ strh r1, [r0, #6]
+ mov r0, #0xb
+ str r0, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ lsl r1, r4, #0x18
+ str r0, [sp, #8]
+ add r0, r6, #0
+ lsr r1, r1, #0x18
+ add r2, sp, #0xc
+ mov r3, #0xd
+ bl FUN_02018148
+ add r0, r5, #0
+ mov r1, #0xa
+ bl _u32_div_f
+ mov r1, #0xa
+ mul r1, r0
+ add r0, r0, #4
+ sub r5, r5, r1
+ lsr r1, r0, #2
+ lsl r0, r0, #0x1e
+ lsl r1, r1, #4
+ lsr r0, r0, #0x1d
+ add r2, r1, r0
+ add r0, sp, #0xc
+ strh r2, [r0]
+ add r1, r2, #1
+ strh r1, [r0, #2]
+ add r1, r2, #0
+ add r1, #8
+ strh r1, [r0, #4]
+ add r2, #9
+ strh r2, [r0, #6]
+ mov r0, #0xb
+ str r0, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ lsl r1, r4, #0x18
+ str r0, [sp, #8]
+ add r0, r6, #0
+ lsr r1, r1, #0x18
+ add r2, sp, #0xc
+ mov r3, #0xf
+ bl FUN_02018148
+ add r0, r5, #4
+ lsr r1, r0, #2
+ lsl r0, r0, #0x1e
+ lsl r1, r1, #4
+ lsr r0, r0, #0x1d
+ add r2, r1, r0
+ add r0, sp, #0xc
+ strh r2, [r0]
+ add r1, r2, #1
+ strh r1, [r0, #2]
+ add r1, r2, #0
+ add r1, #8
+ strh r1, [r0, #4]
+ add r2, #9
+ strh r2, [r0, #6]
+ mov r0, #0xb
+ str r0, [sp]
+ mov r0, #2
+ str r0, [sp, #4]
+ lsl r1, r4, #0x18
+ str r0, [sp, #8]
+ add r0, r6, #0
+ lsr r1, r1, #0x18
+ add r2, sp, #0xc
+ mov r3, #0x11
+ bl FUN_02018148
+ add sp, #0x14
+ pop {r3, r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02253AA4
+
+ thumb_func_start MOD20_02253BA4
+MOD20_02253BA4: ; 0x02253BA4
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r1, #0
+ add r7, r0, #0
+ add r0, r5, #0
+ mov r1, #0x1c
+ mov r6, #0
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02253C0E
+ add r0, r6, #0
+ str r0, [r4, #0x14]
+ str r0, [r4, #0xc]
+ str r0, [r4, #4]
+ str r7, [r4]
+ str r5, [r4, #0x18]
+ add r0, r7, #0
+ bl FUN_020B0830
+ strh r0, [r4, #0x10]
+ ldrh r1, [r4, #0x10]
+ add r0, r5, #0
+ lsl r1, r1, #3
+ bl FUN_02016998
+ str r0, [r4, #0x14]
+ cmp r0, #0
+ beq _02253C0E
+ ldrh r2, [r4, #0x10]
+ mov r1, #0x90
+ add r0, r5, #0
+ mul r1, r2
+ bl FUN_02016998
+ str r0, [r4, #0xc]
+ cmp r0, #0
+ beq _02253C0E
+ ldrh r1, [r4, #0x10]
+ add r0, r5, #0
+ lsl r1, r1, #2
+ bl FUN_02016998
+ str r0, [r4, #4]
+ cmp r0, #0
+ beq _02253C0E
+ ldrh r2, [r4, #0x10]
+ ldr r1, [r4, #0xc]
+ bl MOD20_0225403C
+ add r0, r6, #0
+ strh r0, [r4, #0x12]
+ str r0, [r4, #8]
+ mov r6, #1
+_02253C0E:
+ cmp r6, #0
+ bne _02253C46
+ cmp r4, #0
+ beq _02253C42
+ ldr r1, [r4, #0x14]
+ cmp r1, #0
+ beq _02253C22
+ add r0, r5, #0
+ bl FUN_02016A8C
+_02253C22:
+ ldr r1, [r4, #0xc]
+ cmp r1, #0
+ beq _02253C2E
+ add r0, r5, #0
+ bl FUN_02016A8C
+_02253C2E:
+ ldr r1, [r4, #4]
+ cmp r1, #0
+ beq _02253C3A
+ add r0, r5, #0
+ bl FUN_02016A8C
+_02253C3A:
+ add r0, r5, #0
+ add r1, r4, #0
+ bl FUN_02016A8C
+_02253C42:
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+_02253C46:
+ add r0, r4, #0
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02253BA4
+
+ thumb_func_start MOD20_02253C4C
+MOD20_02253C4C: ; 0x02253C4C
+ push {r4, lr}
+ add r4, r0, #0
+ beq _02253C76
+ ldr r0, [r4, #0x14]
+ cmp r0, #0
+ beq _02253C5C
+ bl FUN_02016A18
+_02253C5C:
+ ldr r0, [r4, #0xc]
+ cmp r0, #0
+ beq _02253C66
+ bl FUN_02016A18
+_02253C66:
+ ldr r0, [r4, #4]
+ cmp r0, #0
+ beq _02253C70
+ bl FUN_02016A18
+_02253C70:
+ add r0, r4, #0
+ bl FUN_02016A18
+_02253C76:
+ pop {r4, pc}
+ thumb_func_end MOD20_02253C4C
+
+ thumb_func_start MOD20_02253C78
+MOD20_02253C78: ; 0x02253C78
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x20
+ str r0, [sp, #0xc]
+ ldrh r0, [r0, #0x12]
+ cmp r0, #0
+ bne _02253C86
+ b _02253E52
+_02253C86:
+ ldr r0, [sp, #0xc]
+ ldr r4, [r0, #8]
+ ldr r5, [r0, #0x14]
+ ldrh r0, [r0, #0x10]
+ cmp r4, #0
+ str r0, [sp, #0x10]
+ bne _02253C96
+ b _02253E38
+_02253C96:
+ add r0, r4, #0
+ mov r1, #2
+ add r0, #8
+ lsl r1, r1, #0xc
+ bl FUN_020B1EC4
+ add r0, r4, #0
+ add r0, #0x86
+ ldrb r0, [r0]
+ cmp r0, #0
+ beq _02253CAE
+ b _02253E30
+_02253CAE:
+ add r6, r4, #0
+ add r6, #0x40
+ mov r0, #0xc
+ ldrsh r0, [r6, r0]
+ ldr r1, [r4, #0x64]
+ lsl r0, r0, #0xc
+ add r0, r1, r0
+ str r0, [sp, #0x18]
+ mov r0, #0xe
+ ldrsh r0, [r6, r0]
+ ldr r1, [r4, #0x68]
+ lsl r0, r0, #0xc
+ add r0, r1, r0
+ str r0, [sp, #0x1c]
+ add r0, r4, #0
+ add r0, #0x87
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _02253CEE
+ add r0, sp, #0x18
+ str r0, [sp]
+ mov r3, #0
+ str r3, [sp, #4]
+ ldr r1, [sp, #0x10]
+ str r3, [sp, #8]
+ lsl r1, r1, #0x10
+ ldr r2, [r4, #0x34]
+ add r0, r5, #0
+ lsr r1, r1, #0x10
+ bl FUN_020B1AF8
+ b _02253D86
+_02253CEE:
+ ldr r0, [r4, #0x6c]
+ bl MTX_Identity22_
+ ldrh r1, [r6, #0x12]
+ mov r0, #4
+ tst r0, r1
+ beq _02253D20
+ add r0, r4, #0
+ add r0, #0x8c
+ ldrh r2, [r6, #0x10]
+ ldrh r0, [r0]
+ ldr r1, _02253E58 ; =0x020FFA38
+ add r0, r2, r0
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ asr r0, r0, #4
+ lsl r3, r0, #2
+ add r2, r1, r3
+ ldrsh r1, [r1, r3]
+ mov r3, #2
+ ldrsh r2, [r2, r3]
+ ldr r0, [r4, #0x6c]
+ bl MTX_Rot22_
+ b _02253D3E
+_02253D20:
+ add r0, r4, #0
+ add r0, #0x8c
+ ldrh r0, [r0]
+ cmp r0, #0
+ beq _02253D3E
+ asr r0, r0, #4
+ lsl r3, r0, #2
+ ldr r1, _02253E58 ; =0x020FFA38
+ ldr r0, [r4, #0x6c]
+ add r2, r1, r3
+ ldrsh r1, [r1, r3]
+ mov r3, #2
+ ldrsh r2, [r2, r3]
+ bl MTX_Rot22_
+_02253D3E:
+ ldrh r1, [r6, #0x12]
+ mov r0, #2
+ tst r0, r1
+ beq _02253D62
+ ldr r0, [r6, #4]
+ ldr r7, [r4, #0x6c]
+ bl FX_Inv
+ str r0, [sp, #0x14]
+ ldr r0, [r6, #8]
+ bl FX_Inv
+ add r3, r0, #0
+ ldr r2, [sp, #0x14]
+ add r0, r7, #0
+ add r1, r7, #0
+ bl MTX_ScaleApply22
+_02253D62:
+ ldr r0, [sp, #0xc]
+ ldr r1, [r4, #0x6c]
+ ldr r0, [r0]
+ bl FUN_020B0BB0
+ add r1, sp, #0x18
+ str r1, [sp]
+ str r0, [sp, #4]
+ mov r0, #1
+ str r0, [sp, #8]
+ ldr r1, [sp, #0x10]
+ ldr r2, [r4, #0x34]
+ lsl r1, r1, #0x10
+ ldr r3, [r4, #0x6c]
+ add r0, r5, #0
+ lsr r1, r1, #0x10
+ bl FUN_020B1AF8
+_02253D86:
+ ldr r1, [sp, #0x10]
+ sub r1, r1, r0
+ str r1, [sp, #0x10]
+ add r1, r0, #0
+ sub r0, r0, #1
+ cmp r1, #0
+ beq _02253E30
+ ldr r7, _02253E5C ; =0xDFFFFFFF
+ asr r1, r7, #0x11
+_02253D98:
+ ldr r3, [r5, #4]
+ ldr r2, _02253E60 ; =0xFFFFF3FF
+ add r6, r4, #0
+ and r2, r3
+ add r3, r4, #0
+ add r3, #0x82
+ ldrh r3, [r3]
+ add r6, #0x84
+ lsl r3, r3, #0x1e
+ lsr r3, r3, #0x14
+ orr r2, r3
+ str r2, [r5, #4]
+ ldr r3, _02253E64 ; =0xFFFF0FFF
+ ldrh r6, [r6]
+ and r3, r2
+ lsl r2, r2, #0x10
+ lsr r2, r2, #0x1c
+ add r2, r2, r6
+ lsl r2, r2, #0x1c
+ lsr r2, r2, #0x10
+ orr r2, r3
+ add r6, r4, #0
+ ldr r3, _02253E68 ; =0xFFFFFC00
+ str r2, [r5, #4]
+ add r6, #0x88
+ and r3, r2
+ lsl r2, r2, #0x16
+ ldrh r6, [r6]
+ lsr r2, r2, #0x16
+ add r6, r2, r6
+ ldr r2, _02253E6C ; =0x000003FF
+ and r2, r6
+ orr r2, r3
+ add r6, r4, #0
+ str r2, [r5, #4]
+ add r6, #0x8a
+ ldr r2, [r5]
+ ldr r3, _02253E70 ; =0xEFFFFFFF
+ ldrb r6, [r6]
+ and r3, r2
+ lsl r2, r2, #3
+ lsr r2, r2, #0x1f
+ eor r2, r6
+ lsl r2, r2, #0x1f
+ lsr r2, r2, #3
+ orr r2, r3
+ add r6, r4, #0
+ add r3, r2, #0
+ str r2, [r5]
+ add r6, #0x8b
+ lsl r2, r2, #2
+ ldrb r6, [r6]
+ lsr r2, r2, #0x1f
+ and r3, r7
+ eor r2, r6
+ lsl r2, r2, #0x1f
+ lsr r2, r2, #2
+ orr r2, r3
+ add r6, r4, #0
+ add r3, r2, #0
+ str r2, [r5]
+ add r6, #0x8e
+ lsl r2, r2, #0x13
+ ldrb r6, [r6]
+ lsr r2, r2, #0x1f
+ and r3, r1
+ eor r2, r6
+ lsl r2, r2, #0x1f
+ lsr r2, r2, #0x13
+ orr r2, r3
+ str r2, [r5]
+ add r2, r0, #0
+ add r5, #8
+ sub r0, r0, #1
+ cmp r2, #0
+ bne _02253D98
+_02253E30:
+ ldr r4, [r4, #0x5c]
+ cmp r4, #0
+ beq _02253E38
+ b _02253C96
+_02253E38:
+ ldr r0, [sp, #0xc]
+ ldr r1, [r0, #0x14]
+ cmp r5, r1
+ bls _02253E52
+ sub r3, r5, r1
+ asr r2, r3, #2
+ lsr r2, r2, #0x1d
+ add r2, r3, r2
+ lsl r2, r2, #0xd
+ ldr r0, [r0]
+ lsr r2, r2, #0x10
+ bl FUN_020B0D58
+_02253E52:
+ add sp, #0x20
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_02253E58: .word 0x020FFA38
+_02253E5C: .word 0xDFFFFFFF
+_02253E60: .word 0xFFFFF3FF
+_02253E64: .word 0xFFFF0FFF
+_02253E68: .word 0xFFFFFC00
+_02253E6C: .word 0x000003FF
+_02253E70: .word 0xEFFFFFFF
+ thumb_func_end MOD20_02253C78
+
+ thumb_func_start MOD20_02253E74
+MOD20_02253E74: ; 0x02253E74
+ push {r3, r4, r5, r6, r7, lr}
+ add r7, r0, #0
+ add r5, r1, #0
+ add r6, r2, #0
+ bl MOD20_02254068
+ add r4, r0, #0
+ beq _02253F10
+ ldrb r1, [r5, #0xb]
+ add r0, #0x82
+ strh r1, [r0]
+ add r0, r4, #0
+ ldrb r1, [r5, #0xc]
+ add r0, #0x80
+ strh r1, [r0]
+ add r0, r7, #0
+ add r1, r4, #0
+ bl MOD20_022540A4
+ ldr r0, [r6, #8]
+ str r0, [r4]
+ ldr r0, [r6, #0xc]
+ str r0, [r4, #4]
+ ldrh r1, [r5, #8]
+ bl FUN_020AFC04
+ add r1, r0, #0
+ add r0, r4, #0
+ ldr r2, [r4]
+ add r0, #8
+ bl FUN_020B1F80
+ ldr r1, [r5]
+ ldr r0, [r5, #4]
+ str r1, [r4, #0x64]
+ add r1, r4, #0
+ str r0, [r4, #0x68]
+ mov r0, #0
+ add r1, #0x84
+ strh r0, [r1]
+ add r1, r4, #0
+ add r1, #0x88
+ strh r0, [r1]
+ ldrb r2, [r5, #0xa]
+ mov r1, #1
+ tst r2, r1
+ beq _02253ED4
+ add r0, r1, #0
+_02253ED4:
+ add r1, r4, #0
+ add r1, #0x8a
+ strb r0, [r1]
+ ldrb r1, [r5, #0xa]
+ mov r0, #2
+ tst r0, r1
+ beq _02253EE6
+ mov r1, #1
+ b _02253EE8
+_02253EE6:
+ mov r1, #0
+_02253EE8:
+ add r0, r4, #0
+ add r0, #0x8b
+ strb r1, [r0]
+ add r1, r4, #0
+ mov r0, #0
+ add r1, #0x8e
+ strb r0, [r1]
+ add r1, r4, #0
+ add r1, #0x8c
+ strh r0, [r1]
+ add r1, r4, #0
+ add r1, #0x70
+ str r1, [r4, #0x6c]
+ add r1, r4, #0
+ ldrb r2, [r5, #0xd]
+ add r1, #0x87
+ strb r2, [r1]
+ add r1, r4, #0
+ add r1, #0x86
+ strb r0, [r1]
+_02253F10:
+ add r0, r4, #0
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD20_02253E74
+
+ thumb_func_start MOD20_02253F14
+MOD20_02253F14: ; 0x02253F14
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ bl MOD20_022540FC
+ add r0, r5, #0
+ add r1, r4, #0
+ bl MOD20_02254080
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD20_02253F14
+
+ thumb_func_start MOD20_02253F28
+MOD20_02253F28: ; 0x02253F28
+ push {r4, lr}
+ add r4, r0, #0
+ lsl r1, r1, #0x10
+ ldr r0, [r4, #4]
+ lsr r1, r1, #0x10
+ bl FUN_020AFC04
+ add r1, r0, #0
+ add r0, r4, #0
+ ldr r2, [r4]
+ add r0, #8
+ bl FUN_020B1F80
+ pop {r4, pc}
+ thumb_func_end MOD20_02253F28
+
+ thumb_func_start MOD20_02253F44
+MOD20_02253F44: ; 0x02253F44
+ ldr r0, [r0, #0x10]
+ cmp r0, #0
+ bne _02253F4E
+ mov r0, #1
+ bx lr
+_02253F4E:
+ mov r0, #0
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_02253F44
+
+ thumb_func_start MOD20_02253F54
+MOD20_02253F54: ; 0x02253F54
+ ldr r3, [r0, #0x64]
+ add r1, r3, r1
+ str r1, [r0, #0x64]
+ ldr r1, [r0, #0x68]
+ add r1, r1, r2
+ str r1, [r0, #0x68]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_02253F54
+
+ thumb_func_start MOD20_02253F64
+MOD20_02253F64: ; 0x02253F64
+ str r1, [r0, #0x64]
+ str r2, [r0, #0x68]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_02253F64
+
+ thumb_func_start MOD20_02253F6C
+MOD20_02253F6C: ; 0x02253F6C
+ ldr r3, [r0, #0x64]
+ str r3, [r1]
+ ldr r0, [r0, #0x68]
+ str r0, [r2]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_02253F6C
+
+ thumb_func_start MOD20_02253F78
+MOD20_02253F78: ; 0x02253F78
+ add r0, #0x86
+ strb r1, [r0]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_02253F78
+
+ thumb_func_start MOD20_02253F80
+MOD20_02253F80: ; 0x02253F80
+ push {r4, r5, r6, lr}
+ add r5, r1, #0
+ add r6, r0, #0
+ add r4, r2, #0
+ bl MOD20_022540FC
+ add r0, r5, #0
+ add r0, #0x80
+ strh r4, [r0]
+ add r0, r6, #0
+ add r1, r5, #0
+ bl MOD20_022540A4
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD20_02253F80
+
+ thumb_func_start MOD20_02253F9C
+MOD20_02253F9C: ; 0x02253F9C
+ add r0, #0x84
+ strh r1, [r0]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_02253F9C
+
+ thumb_func_start MOD20_02253FA4
+MOD20_02253FA4: ; 0x02253FA4
+ add r0, #0x88
+ strh r1, [r0]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_02253FA4
+
+ thumb_func_start MOD20_02253FAC
+MOD20_02253FAC: ; 0x02253FAC
+ add r0, #0x8e
+ strb r1, [r0]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_02253FAC
+
+ thumb_func_start MOD20_02253FB4
+MOD20_02253FB4: ; 0x02253FB4
+ add r0, #0x8c
+ strh r1, [r0]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_02253FB4
+
+ thumb_func_start MOD20_02253FBC
+MOD20_02253FBC: ; 0x02253FBC
+ push {r3, r4, r5, r6, r7, lr}
+ ldr r4, [sp, #0x18]
+ add r5, r0, #0
+ add r6, r1, #0
+ add r1, r2, #0
+ add r7, r3, #0
+ str r4, [r5, #0x10]
+ add r0, r6, #0
+ add r2, r4, #0
+ bl FUN_02006C88
+ str r0, [r5]
+ add r0, r6, #0
+ add r1, r7, #0
+ add r2, r4, #0
+ bl FUN_02006C88
+ str r0, [r5, #4]
+ ldr r0, [r5]
+ cmp r0, #0
+ beq _0225400E
+ ldr r1, [r5, #4]
+ cmp r1, #0
+ beq _0225400E
+ add r1, r5, #0
+ add r1, #8
+ bl FUN_020AFEB8
+ cmp r0, #0
+ bne _02253FFC
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+_02253FFC:
+ ldr r0, [r5, #4]
+ add r5, #0xc
+ add r1, r5, #0
+ bl thunk_FUN_020afda0
+ cmp r0, #0
+ bne _0225400E
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+_0225400E:
+ mov r0, #1
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02253FBC
+
+ thumb_func_start MOD20_02254014
+MOD20_02254014: ; 0x02254014
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r1, [r4]
+ cmp r1, #0
+ beq _02254028
+ ldr r0, [r4, #0x10]
+ bl FUN_02016A8C
+ mov r0, #0
+ str r0, [r4]
+_02254028:
+ ldr r1, [r4, #4]
+ cmp r1, #0
+ beq _02254038
+ ldr r0, [r4, #0x10]
+ bl FUN_02016A8C
+ mov r0, #0
+ str r0, [r4, #4]
+_02254038:
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02254014
+
+ thumb_func_start MOD20_0225403C
+MOD20_0225403C: ; 0x0225403C
+ push {r4, r5, r6, lr}
+ add r6, r2, #0
+ add r5, r0, #0
+ add r0, r6, #0
+ add r4, r1, #0
+ sub r6, r6, #1
+ cmp r0, #0
+ beq _0225405E
+_0225404C:
+ add r0, r4, #0
+ stmia r5!, {r4}
+ bl MOD20_02254060
+ add r0, r6, #0
+ add r4, #0x90
+ sub r6, r6, #1
+ cmp r0, #0
+ bne _0225404C
+_0225405E:
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD20_0225403C
+
+ thumb_func_start MOD20_02254060
+MOD20_02254060: ; 0x02254060
+ mov r1, #0
+ str r1, [r0, #0x5c]
+ str r1, [r0, #0x60]
+ bx lr
+ thumb_func_end MOD20_02254060
+
+ thumb_func_start MOD20_02254068
+MOD20_02254068: ; 0x02254068
+ ldrh r2, [r0, #0x12]
+ ldrh r1, [r0, #0x10]
+ cmp r2, r1
+ bhs _0225407C
+ add r1, r2, #1
+ strh r1, [r0, #0x12]
+ ldr r1, [r0, #4]
+ lsl r0, r2, #2
+ ldr r0, [r1, r0]
+ bx lr
+_0225407C:
+ mov r0, #0
+ bx lr
+ thumb_func_end MOD20_02254068
+
+ thumb_func_start MOD20_02254080
+MOD20_02254080: ; 0x02254080
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ ldrh r0, [r5, #0x12]
+ add r4, r1, #0
+ cmp r0, #0
+ beq _022540A0
+ add r0, r4, #0
+ bl MOD20_02254060
+ ldrh r0, [r5, #0x12]
+ sub r0, r0, #1
+ strh r0, [r5, #0x12]
+ ldrh r0, [r5, #0x12]
+ ldr r1, [r5, #4]
+ lsl r0, r0, #2
+ str r4, [r1, r0]
+_022540A0:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02254080
+
+ thumb_func_start MOD20_022540A4
+MOD20_022540A4: ; 0x022540A4
+ push {r4, r5}
+ ldr r3, [r0, #8]
+ cmp r3, #0
+ bne _022540B8
+ str r1, [r0, #8]
+ mov r0, #0
+ str r0, [r1, #0x5c]
+ str r0, [r1, #0x60]
+ pop {r4, r5}
+ bx lr
+_022540B8:
+ add r4, r1, #0
+ add r4, #0x80
+ ldr r5, [r4]
+ add r2, r3, #0
+_022540C0:
+ add r4, r2, #0
+ add r4, #0x80
+ ldr r4, [r4]
+ cmp r5, r4
+ bhs _022540E2
+ cmp r2, r3
+ bne _022540D0
+ str r1, [r0, #8]
+_022540D0:
+ ldr r0, [r2, #0x60]
+ str r0, [r1, #0x60]
+ cmp r0, #0
+ beq _022540DA
+ str r1, [r0, #0x5c]
+_022540DA:
+ str r2, [r1, #0x5c]
+ str r1, [r2, #0x60]
+ pop {r4, r5}
+ bx lr
+_022540E2:
+ ldr r4, [r2, #0x5c]
+ cmp r4, #0
+ bne _022540F4
+ str r1, [r2, #0x5c]
+ str r2, [r1, #0x60]
+ mov r0, #0
+ str r0, [r1, #0x5c]
+ pop {r4, r5}
+ bx lr
+_022540F4:
+ add r2, r4, #0
+ b _022540C0
+ thumb_func_end MOD20_022540A4
+
+ thumb_func_start MOD20_022540F8
+MOD20_022540F8: ; 0x022540F8
+ pop {r4, r5}
+ bx lr
+ thumb_func_end MOD20_022540F8
+
+ thumb_func_start MOD20_022540FC
+MOD20_022540FC: ; 0x022540FC
+ ldr r2, [r1, #0x60]
+ cmp r2, #0
+ beq _02254118
+ ldr r0, [r1, #0x5c]
+ cmp r0, #0
+ beq _02254112
+ str r0, [r2, #0x5c]
+ ldr r2, [r1, #0x60]
+ ldr r0, [r1, #0x5c]
+ str r2, [r0, #0x60]
+ bx lr
+_02254112:
+ mov r0, #0
+ str r0, [r2, #0x5c]
+ bx lr
+_02254118:
+ ldr r3, [r1, #0x5c]
+ cmp r3, #0
+ beq _02254128
+ mov r2, #0
+ str r2, [r3, #0x60]
+ ldr r1, [r1, #0x5c]
+ str r1, [r0, #8]
+ bx lr
+_02254128:
+ mov r1, #0
+ str r1, [r0, #8]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_022540FC
+
+ thumb_func_start MOD20_02254130
+MOD20_02254130: ; 0x02254130
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #8
+ add r6, r0, #0
+ add r7, r1, #0
+ str r2, [sp]
+ str r3, [sp, #4]
+ ldr r5, [sp, #0x20]
+ bne _02254144
+ bl ErrorHandling
+_02254144:
+ add r0, r5, #0
+ mov r1, #0x18
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02254192
+ ldr r0, [sp]
+ str r5, [r4, #8]
+ str r0, [r4, #4]
+ str r6, [r4]
+ mov r1, #0xe
+ ldr r0, [sp, #4]
+ str r7, [r4, #0xc]
+ str r0, [r4, #0x10]
+ add r0, r5, #0
+ mul r1, r7
+ bl FUN_02016998
+ str r0, [r4, #0x14]
+ cmp r0, #0
+ beq _02254188
+ mov r6, #0
+ cmp r7, #0
+ bls _02254192
+ add r5, r6, #0
+_02254176:
+ ldr r0, [r4, #0x14]
+ add r0, r0, r5
+ bl MOD20_022542E4
+ add r6, r6, #1
+ add r5, #0xe
+ cmp r6, r7
+ blo _02254176
+ b _02254192
+_02254188:
+ add r0, r5, #0
+ add r1, r4, #0
+ bl FUN_02016A8C
+ mov r4, #0
+_02254192:
+ add r0, r4, #0
+ add sp, #8
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD20_02254130
+
+ thumb_func_start MOD20_02254198
+MOD20_02254198: ; 0x02254198
+ push {r4, lr}
+ add r4, r0, #0
+ bne _022541A2
+ bl ErrorHandling
+_022541A2:
+ ldr r0, [r4, #8]
+ ldr r1, [r4, #0x14]
+ bl FUN_02016A8C
+ ldr r0, [r4, #8]
+ add r1, r4, #0
+ bl FUN_02016A8C
+ pop {r4, pc}
+ thumb_func_end MOD20_02254198
+
+ thumb_func_start MOD20_022541B4
+MOD20_022541B4: ; 0x022541B4
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #8
+ add r5, r0, #0
+ bl FUN_02020A98
+ str r0, [sp, #4]
+ cmp r0, #0
+ beq _0225420C
+ bl FUN_02020AA4
+ ldr r1, [r5, #0xc]
+ mov r7, #0
+ str r0, [sp]
+ cmp r1, #0
+ bls _02254232
+ add r4, r7, #0
+ add r6, r7, #0
+_022541D6:
+ ldr r0, [r5, #0x14]
+ add r1, r0, r4
+ ldrb r0, [r1, #1]
+ strb r0, [r1, #2]
+ ldr r0, [r5, #0x14]
+ add r0, r0, r4
+ ldrb r0, [r0, #1]
+ cmp r0, #0
+ ldr r0, [r5]
+ beq _022541F2
+ add r0, r0, r6
+ bl FUN_02020A40
+ b _022541F8
+_022541F2:
+ add r0, r0, r6
+ bl FUN_02020A6C
+_022541F8:
+ ldr r1, [r5, #0x14]
+ add r7, r7, #1
+ add r1, r1, r4
+ strb r0, [r1, #1]
+ ldr r1, [r5, #0xc]
+ add r4, #0xe
+ add r6, r6, #4
+ cmp r7, r1
+ blo _022541D6
+ b _02254232
+_0225420C:
+ ldr r1, [r5, #0xc]
+ mov r2, #0
+ str r2, [sp]
+ cmp r1, #0
+ bls _02254232
+ add r0, r2, #0
+ add r3, r2, #0
+_0225421A:
+ ldr r1, [r5, #0x14]
+ add r2, r2, #1
+ add r4, r1, r0
+ ldrb r1, [r4, #1]
+ strb r1, [r4, #2]
+ ldr r1, [r5, #0x14]
+ add r1, r1, r0
+ strb r3, [r1, #1]
+ ldr r1, [r5, #0xc]
+ add r0, #0xe
+ cmp r2, r1
+ blo _0225421A
+_02254232:
+ mov r6, #0
+ cmp r1, #0
+ bls _02254278
+ ldr r7, _022542A8 ; =0x02254710
+ add r4, r6, #0
+_0225423C:
+ ldr r3, [r5, #0x14]
+ ldr r1, [sp, #4]
+ add r0, r3, r4
+ ldrb r3, [r3, r4]
+ ldr r2, [sp]
+ lsl r3, r3, #2
+ ldr r3, [r7, r3]
+ blx r3
+ add r1, r0, #0
+ ldr r0, [r5, #0x14]
+ add r0, r0, r4
+ ldrb r2, [r0, #1]
+ ldrb r0, [r0, #2]
+ cmp r2, r0
+ bne _0225425C
+ mov r2, #2
+_0225425C:
+ cmp r1, #0
+ bne _02254264
+ cmp r2, #2
+ beq _0225426E
+_02254264:
+ ldr r3, [r5, #0x10]
+ ldr r4, [r5, #4]
+ add r0, r6, #0
+ blx r4
+ b _02254278
+_0225426E:
+ ldr r0, [r5, #0xc]
+ add r6, r6, #1
+ add r4, #0xe
+ cmp r6, r0
+ blo _0225423C
+_02254278:
+ ldr r0, [r5, #0xc]
+ add r6, r6, #1
+ cmp r6, r0
+ bhs _022542A2
+ mov r0, #0xe
+ add r4, r6, #0
+ ldr r7, _022542A8 ; =0x02254710
+ mul r4, r0
+_02254288:
+ ldr r3, [r5, #0x14]
+ ldr r1, [sp, #4]
+ add r0, r3, r4
+ ldrb r3, [r3, r4]
+ ldr r2, [sp]
+ lsl r3, r3, #2
+ ldr r3, [r7, r3]
+ blx r3
+ ldr r0, [r5, #0xc]
+ add r6, r6, #1
+ add r4, #0xe
+ cmp r6, r0
+ blo _02254288
+_022542A2:
+ add sp, #8
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_022542A8: .word 0x02254710
+ thumb_func_end MOD20_022541B4
+
+ thumb_func_start MOD20_022542AC
+MOD20_022542AC: ; 0x022542AC
+ push {r3, r4}
+ ldr r4, [r0, #0x14]
+ mov r0, #0xe
+ mul r0, r1
+ add r1, r4, r0
+ lsl r0, r2, #1
+ add r0, r1, r0
+ strh r3, [r0, #8]
+ pop {r3, r4}
+ bx lr
+ thumb_func_end MOD20_022542AC
+
+ thumb_func_start MOD20_022542C0
+MOD20_022542C0: ; 0x022542C0
+ ldr r3, [r0, #0x14]
+ mov r0, #0xe
+ mul r0, r1
+ add r0, r3, r0
+ strh r2, [r0, #0xc]
+ bx lr
+ thumb_func_end MOD20_022542C0
+
+ thumb_func_start MOD20_022542CC
+MOD20_022542CC: ; 0x022542CC
+ add r3, r1, #0
+ mov r2, #0xe
+ mul r3, r2
+ ldr r1, [r0, #0x14]
+ mov r2, #0
+ add r1, r1, r3
+ strh r2, [r1, #4]
+ ldr r0, [r0, #0x14]
+ mov r1, #4
+ strb r1, [r0, r3]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_022542CC
+
+ thumb_func_start MOD20_022542E4
+MOD20_022542E4: ; 0x022542E4
+ mov r2, #0
+ strb r2, [r0]
+ strb r2, [r0, #1]
+ strb r2, [r0, #2]
+ strh r2, [r0, #4]
+ strh r2, [r0, #6]
+ add r3, r0, #0
+ add r1, r2, #0
+_022542F4:
+ add r2, r2, #1
+ strh r1, [r3, #8]
+ add r3, r3, #2
+ cmp r2, #2
+ blo _022542F4
+ strh r1, [r0, #0xc]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_022542E4
+
+ thumb_func_start MOD20_02254304
+MOD20_02254304: ; 0x02254304
+ strb r1, [r0]
+ mov r1, #0
+ strh r1, [r0, #4]
+ bx lr
+ thumb_func_end MOD20_02254304
+
+ thumb_func_start MOD20_0225430C
+MOD20_0225430C: ; 0x0225430C
+ strb r1, [r0]
+ bx lr
+ thumb_func_end MOD20_0225430C
+
+ thumb_func_start MOD20_02254310
+MOD20_02254310: ; 0x02254310
+ ldrh r2, [r0, #4]
+ ldr r1, _02254320 ; =0x0000FFFF
+ cmp r2, r1
+ bhs _0225431C
+ add r1, r2, #1
+ strh r1, [r0, #4]
+_0225431C:
+ bx lr
+ nop
+_02254320: .word 0x0000FFFF
+ thumb_func_end MOD20_02254310
+
+ thumb_func_start MOD20_02254324
+MOD20_02254324: ; 0x02254324
+ ldrh r3, [r0, #4]
+ mov r2, #0
+_02254328:
+ ldrh r1, [r0, #8]
+ cmp r3, r1
+ bne _02254332
+ add r0, r2, #5
+ bx lr
+_02254332:
+ add r2, r2, #1
+ add r0, r0, #2
+ cmp r2, #2
+ blo _02254328
+ mov r0, #0
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD20_02254324
+
+ thumb_func_start MOD20_02254340
+MOD20_02254340: ; 0x02254340
+ push {r3, lr}
+ ldrb r1, [r0, #1]
+ cmp r1, #0
+ beq _02254356
+ cmp r2, #0
+ beq _02254356
+ mov r1, #1
+ bl MOD20_02254304
+ mov r0, #1
+ pop {r3, pc}
+_02254356:
+ mov r0, #0
+ pop {r3, pc}
+ .align 2, 0
+ thumb_func_end MOD20_02254340
+
+ thumb_func_start MOD20_0225435C
+MOD20_0225435C: ; 0x0225435C
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ bl MOD20_02254310
+ ldrb r0, [r5, #1]
+ cmp r0, #0
+ beq _0225438A
+ add r0, r5, #0
+ bl MOD20_02254324
+ cmp r0, #0
+ bne _022543B8
+ ldrh r1, [r5, #0xc]
+ cmp r1, #0
+ beq _022543B6
+ ldrh r0, [r5, #4]
+ cmp r0, r1
+ blo _022543B6
+ mov r0, #0
+ strh r0, [r5, #4]
+ mov r0, #7
+ pop {r3, r4, r5, pc}
+_0225438A:
+ cmp r4, #0
+ beq _0225439A
+ add r0, r5, #0
+ mov r1, #0
+ bl MOD20_02254304
+ mov r0, #2
+ pop {r3, r4, r5, pc}
+_0225439A:
+ ldrh r0, [r5, #6]
+ cmp r0, #0
+ beq _022543AA
+ add r0, r5, #0
+ mov r1, #2
+ bl MOD20_0225430C
+ b _022543B6
+_022543AA:
+ add r0, r5, #0
+ mov r1, #0
+ bl MOD20_02254304
+ mov r0, #3
+ pop {r3, r4, r5, pc}
+_022543B6:
+ mov r0, #0
+_022543B8:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD20_0225435C
+
+ thumb_func_start MOD20_022543BC
+MOD20_022543BC: ; 0x022543BC
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r2, #0
+ bl MOD20_02254310
+ ldrh r1, [r5, #4]
+ ldrh r0, [r5, #6]
+ cmp r1, r0
+ bls _022543DA
+ add r0, r5, #0
+ mov r1, #0
+ bl MOD20_02254304
+ mov r0, #3
+ pop {r3, r4, r5, pc}
+_022543DA:
+ ldrb r0, [r5, #1]
+ cmp r0, #0
+ beq _022543F0
+ cmp r4, #0
+ beq _022543F0
+ add r0, r5, #0
+ mov r1, #3
+ bl MOD20_02254304
+ mov r0, #4
+ pop {r3, r4, r5, pc}
+_022543F0:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD20_022543BC
+
+ thumb_func_start MOD20_022543F4
+MOD20_022543F4: ; 0x022543F4
+ push {r3, lr}
+ ldrb r1, [r0, #1]
+ cmp r1, #0
+ beq _02254402
+ bl MOD20_02254310
+ b _02254408
+_02254402:
+ mov r1, #0
+ bl MOD20_02254304
+_02254408:
+ mov r0, #0
+ pop {r3, pc}
+ thumb_func_end MOD20_022543F4
+
+ thumb_func_start MOD20_0225440C
+MOD20_0225440C: ; 0x0225440C
+ push {r3, lr}
+ ldrb r1, [r0, #1]
+ cmp r1, #0
+ bne _0225441A
+ mov r1, #0
+ bl MOD20_02254304
+_0225441A:
+ mov r0, #0
+ pop {r3, pc}
+ .align 2, 0
+ thumb_func_end MOD20_0225440C
+
+ thumb_func_start MOD20_02254420
+MOD20_02254420: ; 0x02254420
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ add r6, r2, #0
+ add r7, r3, #0
+ cmp r5, #0x1e
+ blo _02254432
+ bl ErrorHandling
+_02254432:
+ cmp r4, #0x21
+ blo _0225443A
+ bl ErrorHandling
+_0225443A:
+ cmp r5, #0x1e
+ blo _02254440
+ mov r5, #0
+_02254440:
+ cmp r4, #0x21
+ blo _02254446
+ mov r4, #0
+_02254446:
+ ldr r0, _02254458 ; =0x02254744
+ lsl r1, r5, #1
+ ldrh r0, [r0, r1]
+ lsl r1, r4, #1
+ str r0, [r6]
+ ldr r0, _0225445C ; =0x02254780
+ ldrh r0, [r0, r1]
+ str r0, [r7]
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_02254458: .word 0x02254744
+_0225445C: .word 0x02254780
+ thumb_func_end MOD20_02254420
+
+ thumb_func_start MOD20_02254460
+MOD20_02254460: ; 0x02254460
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ add r6, r2, #0
+ cmp r5, #4
+ blo _02254470
+ bl ErrorHandling
+_02254470:
+ ldr r0, _02254480 ; =0x02254724
+ lsl r1, r5, #3
+ ldr r0, [r0, r1]
+ str r0, [r4]
+ ldr r0, _02254484 ; =0x02254728
+ ldr r0, [r0, r1]
+ str r0, [r6]
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_02254480: .word 0x02254724
+_02254484: .word 0x02254728
+ thumb_func_end MOD20_02254460
+
+ thumb_func_start MOD20_02254488
+MOD20_02254488: ; 0x02254488
+ push {r4, r5}
+ ldr r5, _022544B8 ; =0x022547C2
+ mov r4, #0
+_0225448E:
+ ldrh r3, [r5]
+ cmp r0, r3
+ bne _022544A8
+ ldr r0, _022544BC ; =0x022547C4
+ lsl r3, r4, #2
+ ldrb r0, [r0, r3]
+ str r0, [r1]
+ ldr r0, _022544C0 ; =0x022547C5
+ ldrb r0, [r0, r3]
+ str r0, [r2]
+ mov r0, #1
+ pop {r4, r5}
+ bx lr
+_022544A8:
+ add r4, r4, #1
+ add r5, r5, #4
+ cmp r4, #0x1d
+ blo _0225448E
+ mov r0, #0
+ pop {r4, r5}
+ bx lr
+ nop
+_022544B8: .word 0x022547C2
+_022544BC: .word 0x022547C4
+_022544C0: .word 0x022547C5
+ thumb_func_end MOD20_02254488
+
+ .section .data
+ ; 0x022544C4
+ .incbin "baserom.nds", 0x285284, 0x37C
diff --git a/arm9/modules/21/asm/module_21.s b/arm9/modules/21/asm/module_21.s
new file mode 100644
index 00000000..cea8f6e8
--- /dev/null
+++ b/arm9/modules/21/asm/module_21.s
@@ -0,0 +1,726 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD21_02254840
+MOD21_02254840: ; 0x02254840
+ ldr r3, _02254848 ; =MOD20_02252978
+ ldr r0, _0225484C ; =MOD21_02254854
+ ldr r1, _02254850 ; =MOD21_0225496C
+ bx r3
+ .align 2, 0
+_02254848: .word MOD20_02252978
+_0225484C: .word MOD21_02254854
+_02254850: .word MOD21_0225496C
+ thumb_func_end MOD21_02254840
+
+ thumb_func_start MOD21_02254854
+MOD21_02254854: ; 0x02254854
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r0, #8
+ mov r1, #0x2c
+ 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 MOD21_0225489C
+ cmp r0, #0
+ beq _0225488C
+ ldr r0, _02254898 ; =MOD21_02254930
+ 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 MOD21_02254930
+ thumb_func_end MOD21_02254854
+
+ thumb_func_start MOD21_0225489C
+MOD21_0225489C: ; 0x0225489C
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ add r1, r5, #0
+ add r0, #0x24
+ add r1, #0x14
+ bl MOD21_02254A6C
+ cmp r0, #0
+ beq _0225490A
+ mov r1, #0
+ strb r1, [r5]
+ strb r1, [r5, #1]
+ strb r1, [r5, #2]
+ mov r0, #1
+ strb r0, [r5, #3]
+ strb r1, [r5, #6]
+ add r0, r5, #0
+ str r1, [r5, #0x20]
+ add r0, #0x14
+ bl FUN_02012690
+ ldr r0, [r5, #0x14]
+ cmp r0, #0x18
+ blo _022548D6
+ mov r1, #0x18
+ bl _u32_div_f
+ str r1, [r5, #0x14]
+_022548D6:
+ ldr r0, [r5, #0x18]
+ cmp r0, #0x3c
+ blo _022548E6
+ ldr r0, [r5, #0x14]
+ mov r1, #0x3c
+ bl _u32_div_f
+ str r1, [r5, #0x14]
+_022548E6:
+ ldr r0, [r5, #0x18]
+ ldr r2, _02254910 ; =MOD21_02254974
+ strb r0, [r5, #5]
+ mov r0, #8
+ str r0, [sp]
+ ldr r0, _02254914 ; =0x02254D80
+ mov r1, #1
+ add r3, r5, #0
+ bl MOD20_02254130
+ str r0, [r5, #0x10]
+ cmp r0, #0
+ bne _02254904
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+_02254904:
+ str r4, [r5, #0x28]
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+_0225490A:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ nop
+_02254910: .word MOD21_02254974
+_02254914: .word 0x02254D80
+ thumb_func_end MOD21_0225489C
+
+ thumb_func_start MOD21_02254918
+MOD21_02254918: ; 0x02254918
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x24]
+ bl MOD21_02254B04
+ ldr r0, [r4, #0x10]
+ bl MOD20_02254198
+ add r0, r4, #0
+ bl FUN_02016A18
+ pop {r4, pc}
+ thumb_func_end MOD21_02254918
+
+ thumb_func_start MOD21_02254930
+MOD21_02254930: ; 0x02254930
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ ldrb r0, [r4]
+ cmp r0, #3
+ bhs _02254966
+ ldr r0, [r4, #0x28]
+ ldr r1, [r4, #0x10]
+ bl MOD20_02252C14
+ ldrb r1, [r4]
+ add r0, r4, #0
+ lsl r2, r1, #2
+ ldr r1, _02254968 ; =0x02254D84
+ ldr r1, [r1, r2]
+ blx r1
+ cmp r0, #0
+ beq _02254966
+ add r0, r4, #0
+ bl MOD21_02254918
+ add r0, r5, #0
+ bl FUN_0200CAB4
+ ldr r0, [r4, #0x28]
+ bl MOD20_022529A0
+_02254966:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_02254968: .word 0x02254D84
+ thumb_func_end MOD21_02254930
+
+ thumb_func_start MOD21_0225496C
+MOD21_0225496C: ; 0x0225496C
+ mov r1, #1
+ strb r1, [r0, #2]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD21_0225496C
+
+ thumb_func_start MOD21_02254974
+MOD21_02254974: ; 0x02254974
+ cmp r2, #0
+ beq _02254984
+ cmp r2, #1
+ bne _0225498C
+ mov r0, #1
+ str r0, [r3, #0x20]
+ strb r0, [r3, #6]
+ bx lr
+_02254984:
+ mov r0, #0
+ str r0, [r3, #0x20]
+ mov r0, #1
+ strb r0, [r3, #6]
+_0225498C:
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD21_02254974
+
+ thumb_func_start MOD21_02254990
+MOD21_02254990: ; 0x02254990
+ ldrb r2, [r0, #2]
+ cmp r2, #0
+ bne _02254998
+ b _0225499A
+_02254998:
+ mov r1, #2
+_0225499A:
+ strb r1, [r0]
+ mov r1, #0
+ strb r1, [r0, #1]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD21_02254990
+
+ thumb_func_start MOD21_022549A4
+MOD21_022549A4: ; 0x022549A4
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _022549B4
+ cmp r0, #1
+ beq _022549C4
+ b _022549DE
+_022549B4:
+ ldr r0, [r4, #0x24]
+ mov r1, #0
+ bl MOD21_02254B10
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _022549DE
+_022549C4:
+ ldr r0, [r4, #0x24]
+ mov r1, #0
+ bl MOD21_02254B34
+ cmp r0, #0
+ beq _022549DE
+ ldr r0, [r4, #0x28]
+ bl MOD20_0225298C
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD21_02254990
+_022549DE:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD21_022549A4
+
+ thumb_func_start MOD21_022549E4
+MOD21_022549E4: ; 0x022549E4
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #2]
+ cmp r1, #0
+ beq _022549F8
+ mov r1, #2
+ bl MOD21_02254990
+ mov r0, #0
+ pop {r4, pc}
+_022549F8:
+ ldrb r0, [r4, #6]
+ cmp r0, #0
+ beq _02254A0A
+ mov r0, #0
+ strb r0, [r4, #6]
+ ldr r0, [r4, #0x24]
+ mov r1, #2
+ bl MOD21_02254B10
+_02254A0A:
+ ldr r0, [r4, #0x24]
+ mov r1, #1
+ bl MOD21_02254B34
+ cmp r0, #0
+ beq _02254A32
+ ldr r0, [r4, #0x18]
+ strb r0, [r4, #5]
+ add r0, r4, #0
+ add r0, #0x14
+ bl FUN_02012690
+ ldrb r1, [r4, #5]
+ ldr r0, [r4, #0x18]
+ cmp r1, r0
+ beq _02254A32
+ ldr r0, [r4, #0x24]
+ mov r1, #1
+ bl MOD21_02254B10
+_02254A32:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD21_022549E4
+
+ thumb_func_start MOD21_02254A38
+MOD21_02254A38: ; 0x02254A38
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _02254A48
+ cmp r0, #1
+ beq _02254A58
+ b _02254A66
+_02254A48:
+ ldr r0, [r4, #0x24]
+ mov r1, #3
+ bl MOD21_02254B10
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254A66
+_02254A58:
+ ldr r0, [r4, #0x24]
+ bl MOD21_02254B40
+ cmp r0, #0
+ beq _02254A66
+ mov r0, #1
+ pop {r4, pc}
+_02254A66:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD21_02254A38
+
+ thumb_func_start MOD21_02254A6C
+MOD21_02254A6C: ; 0x02254A6C
+ push {r4, r5, r6, lr}
+ sub sp, #8
+ add r6, r1, #0
+ mov r1, #3
+ add r5, r0, #0
+ mov r0, #8
+ lsl r1, r1, #8
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02254ACC
+ add r0, #8
+ mov r1, #8
+ bl MOD20_022536F4
+ str r6, [r4]
+ bl MOD20_02252D34
+ str r0, [r4, #4]
+ mov r0, #8
+ str r0, [sp]
+ mov r0, #0xc
+ mov r1, #0x19
+ mov r2, #1
+ add r3, sp, #4
+ bl FUN_02006BDC
+ add r6, r0, #0
+ bne _02254AB2
+ add r0, r4, #0
+ bl FUN_02016A18
+ add sp, #8
+ mov r0, #0
+ pop {r4, r5, r6, pc}
+_02254AB2:
+ ldr r0, [sp, #4]
+ add r1, r4, #0
+ add r0, #0xc
+ add r1, #0x30
+ bl MOD21_02254AD4
+ add r0, r6, #0
+ bl FUN_02016A18
+ add sp, #8
+ str r4, [r5]
+ mov r0, #1
+ pop {r4, r5, r6, pc}
+_02254ACC:
+ mov r0, #0
+ add sp, #8
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD21_02254A6C
+
+ thumb_func_start MOD21_02254AD4
+MOD21_02254AD4: ; 0x02254AD4
+ push {r3, r4, r5, r6, r7, lr}
+ mov r6, #9
+ add r5, r0, #0
+ add r4, r1, #0
+ mov r7, #0
+ lsl r6, r6, #6
+_02254AE0:
+ add r0, r5, #0
+ add r1, r4, #0
+ mov r2, #0x40
+ bl MIi_CpuCopy16
+ add r1, r4, #0
+ add r0, r5, r6
+ add r1, #0x40
+ mov r2, #0x10
+ bl MIi_CpuCopy16
+ add r7, r7, #1
+ add r5, #0x40
+ add r4, #0x50
+ sub r6, #0x30
+ cmp r7, #9
+ blt _02254AE0
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD21_02254AD4
+
+ thumb_func_start MOD21_02254B04
+MOD21_02254B04: ; 0x02254B04
+ push {r3, lr}
+ cmp r0, #0
+ beq _02254B0E
+ bl FUN_02016A18
+_02254B0E:
+ pop {r3, pc}
+ thumb_func_end MOD21_02254B04
+
+ thumb_func_start MOD21_02254B10
+MOD21_02254B10: ; 0x02254B10
+ 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, _02254B30 ; =0x02254DAC
+ ldr r3, [r2]
+ bl MOD20_022537E0
+ add sp, #0xc
+ pop {pc}
+ nop
+_02254B30: .word 0x02254DAC
+ thumb_func_end MOD21_02254B10
+
+ thumb_func_start MOD21_02254B34
+MOD21_02254B34: ; 0x02254B34
+ ldr r3, _02254B3C ; =0x02253795
+ add r0, #8
+ bx r3
+ nop
+_02254B3C: .word 0x02253795
+ thumb_func_end MOD21_02254B34
+
+ thumb_func_start MOD21_02254B40
+MOD21_02254B40: ; 0x02254B40
+ ldr r3, _02254B48 ; =0x022537B9
+ add r0, #8
+ bx r3
+ nop
+_02254B48: .word 0x022537B9
+ thumb_func_end MOD21_02254B40
+
+ thumb_func_start MOD21_02254B4C
+MOD21_02254B4C: ; 0x02254B4C
+ 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 MOD21_02254B4C
+
+ thumb_func_start MOD21_02254B60
+MOD21_02254B60: ; 0x02254B60
+ 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, _02254BE8 ; =0x02254D90
+ 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, #0x17
+ mov r3, #6
+ bl FUN_0200687C
+ 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, #0x18
+ mov r3, #6
+ bl FUN_020068C8
+ mov r0, #0
+ add r1, r0, #0
+ bl MOD20_02252D7C
+ add r0, r5, #0
+ bl MOD21_02254C5C
+ ldr r0, [r5, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ ldr r1, _02254BEC ; =0x04001000
+ ldr r0, _02254BF0 ; =0xFFFFE0FF
+ ldr r3, [r1]
+ ldr r2, [r1]
+ str r3, [sp, #0x10]
+ 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 MOD21_02254B4C
+ add sp, #0x14
+ pop {r4, r5, pc}
+ .align 2, 0
+_02254BE8: .word 0x02254D90
+_02254BEC: .word 0x04001000
+_02254BF0: .word 0xFFFFE0FF
+ thumb_func_end MOD21_02254B60
+
+ thumb_func_start MOD21_02254BF4
+MOD21_02254BF4: ; 0x02254BF4
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ bl MOD21_02254C5C
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r5, #0
+ bl MOD21_02254B4C
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD21_02254BF4
+
+ thumb_func_start MOD21_02254C14
+MOD21_02254C14: ; 0x02254C14
+ push {r4, lr}
+ add r4, r1, #0
+ add r0, r4, #0
+ bl MOD20_022538A0
+ ldr r0, [r0]
+ ldr r0, [r0, #0xc]
+ cmp r0, #0
+ beq _02254C30
+ mov r0, #0
+ add r1, r0, #0
+ bl MOD11_02252DB4
+ b _02254C38
+_02254C30:
+ mov r0, #0
+ add r1, r0, #0
+ bl MOD20_02252D7C
+_02254C38:
+ add r0, r4, #0
+ bl MOD21_02254B4C
+ pop {r4, pc}
+ thumb_func_end MOD21_02254C14
+
+ thumb_func_start MOD21_02254C40
+MOD21_02254C40: ; 0x02254C40
+ 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 MOD21_02254B4C
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD21_02254C40
+
+ thumb_func_start MOD21_02254C5C
+MOD21_02254C5C: ; 0x02254C5C
+ push {r4, r5, lr}
+ sub sp, #0x1c
+ add r4, r0, #0
+ ldr r0, [r4]
+ ldr r2, _02254D74 ; =0x04000280
+ ldr r0, [r0]
+ mov r3, #0
+ strh r3, [r2]
+ str r0, [r2, #0x10]
+ add r0, r2, #0
+ mov r1, #0xa
+ add r0, #0x18
+ str r1, [r0]
+ str r3, [r0, #4]
+ lsr r0, r2, #0xb
+_02254C7A:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _02254C7A
+ ldr r0, _02254D78 ; =0x040002A0
+ add r3, r0, #0
+ ldr r1, [r0]
+ sub r3, #0x20
+ lsr r0, r0, #0xb
+_02254C8A:
+ ldrh r2, [r3]
+ tst r2, r0
+ bne _02254C8A
+ ldr r0, _02254D7C ; =0x040002A8
+ add r2, r4, #0
+ ldr r5, [r0]
+ mov r0, #4
+ str r0, [sp]
+ mov r0, #9
+ lsl r1, r1, #0x1a
+ str r0, [sp, #4]
+ add r2, #0x30
+ str r2, [sp, #8]
+ lsr r1, r1, #0x18
+ str r1, [sp, #0xc]
+ mov r1, #0
+ str r1, [sp, #0x10]
+ mov r1, #0x28
+ str r1, [sp, #0x14]
+ str r0, [sp, #0x18]
+ ldr r0, [r4, #4]
+ mov r1, #6
+ mov r2, #3
+ mov r3, #7
+ bl FUN_02018170
+ mov r0, #4
+ str r0, [sp]
+ mov r0, #9
+ add r1, r4, #0
+ str r0, [sp, #4]
+ add r1, #0x30
+ str r1, [sp, #8]
+ lsl r1, r5, #0x1a
+ lsr r1, r1, #0x18
+ str r1, [sp, #0xc]
+ mov r1, #0
+ str r1, [sp, #0x10]
+ mov r1, #0x28
+ str r1, [sp, #0x14]
+ str r0, [sp, #0x18]
+ ldr r0, [r4, #4]
+ mov r1, #6
+ mov r2, #8
+ mov r3, #7
+ bl FUN_02018170
+ ldr r0, [r4]
+ ldr r2, _02254D74 ; =0x04000280
+ ldr r0, [r0, #4]
+ mov r3, #0
+ strh r3, [r2]
+ str r0, [r2, #0x10]
+ add r0, r2, #0
+ mov r1, #0xa
+ add r0, #0x18
+ str r1, [r0]
+ str r3, [r0, #4]
+ lsr r0, r2, #0xb
+_02254D00:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _02254D00
+ ldr r0, _02254D78 ; =0x040002A0
+ add r3, r0, #0
+ ldr r1, [r0]
+ sub r3, #0x20
+ lsr r0, r0, #0xb
+_02254D10:
+ ldrh r2, [r3]
+ tst r2, r0
+ bne _02254D10
+ ldr r0, _02254D7C ; =0x040002A8
+ add r2, r4, #0
+ ldr r5, [r0]
+ mov r0, #4
+ str r0, [sp]
+ mov r0, #9
+ lsl r1, r1, #0x1a
+ str r0, [sp, #4]
+ add r2, #0x30
+ str r2, [sp, #8]
+ lsr r1, r1, #0x18
+ str r1, [sp, #0xc]
+ mov r1, #0
+ str r1, [sp, #0x10]
+ mov r1, #0x28
+ str r1, [sp, #0x14]
+ str r0, [sp, #0x18]
+ ldr r0, [r4, #4]
+ mov r1, #6
+ mov r2, #0xf
+ mov r3, #7
+ bl FUN_02018170
+ mov r0, #4
+ str r0, [sp]
+ mov r0, #9
+ add r1, r4, #0
+ str r0, [sp, #4]
+ add r1, #0x30
+ str r1, [sp, #8]
+ lsl r1, r5, #0x1a
+ lsr r1, r1, #0x18
+ str r1, [sp, #0xc]
+ mov r1, #0
+ str r1, [sp, #0x10]
+ mov r1, #0x28
+ str r1, [sp, #0x14]
+ str r0, [sp, #0x18]
+ ldr r0, [r4, #4]
+ mov r1, #6
+ mov r2, #0x14
+ mov r3, #7
+ bl FUN_02018170
+ add sp, #0x1c
+ pop {r4, r5, pc}
+ nop
+_02254D74: .word 0x04000280
+_02254D78: .word 0x040002A0
+_02254D7C: .word 0x040002A8
+ thumb_func_end MOD21_02254C5C
+
+ .section .data
+ ; 0x02254D80
+ .incbin "baserom.nds", 0x285B40, 0x80
diff --git a/arm9/modules/22/asm/module_22.s b/arm9/modules/22/asm/module_22.s
new file mode 100644
index 00000000..77e6bff4
--- /dev/null
+++ b/arm9/modules/22/asm/module_22.s
@@ -0,0 +1,1845 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD22_02254840
+MOD22_02254840: ; 0x02254840
+ ldr r3, _02254848 ; =MOD20_02252978
+ ldr r0, _0225484C ; =MOD22_02254854
+ ldr r1, _02254850 ; =MOD22_022549D8
+ bx r3
+ .align 2, 0
+_02254848: .word MOD20_02252978
+_0225484C: .word MOD22_02254854
+_02254850: .word MOD22_022549D8
+ thumb_func_end MOD22_02254840
+
+ thumb_func_start MOD22_02254854
+MOD22_02254854: ; 0x02254854
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r0, #8
+ mov r1, #0x68
+ add r7, r2, #0
+ str r3, [sp]
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02254892
+ ldr r2, [sp]
+ add r1, r7, #0
+ bl MOD22_0225489C
+ cmp r0, #0
+ beq _0225488C
+ ldr r0, _02254898 ; =MOD22_0225497C
+ add r1, r4, #0
+ mov r2, #1
+ str r6, [r4, #0x64]
+ bl FUN_0200CA44
+ cmp r0, #0
+ beq _02254892
+ 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 MOD22_0225497C
+ thumb_func_end MOD22_02254854
+
+ thumb_func_start MOD22_0225489C
+MOD22_0225489C: ; 0x0225489C
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ add r1, r5, #0
+ str r2, [r5, #8]
+ add r0, r2, #0
+ add r1, #0x38
+ mov r2, #0x24
+ bl FUN_02089418
+ cmp r0, #0
+ beq _022548F0
+ add r0, r5, #0
+ add r0, #0x4c
+ ldmia r0!, {r2, r3}
+ add r0, r5, #0
+ add r0, #0xc
+ stmia r0!, {r2, r3}
+ add r0, r5, #0
+ add r0, #0x54
+ ldmia r0!, {r2, r3}
+ add r0, r5, #0
+ add r0, #0x14
+ stmia r0!, {r2, r3}
+ ldr r0, [r5, #0x3c]
+ str r0, [r5, #0x30]
+ ldr r0, [r5, #0x40]
+ str r0, [r5, #0x2c]
+ ldr r0, [r5, #0x44]
+ str r0, [r5, #0x28]
+ ldr r0, [r5, #0x48]
+ str r0, [r5, #0x24]
+ ldr r0, [r5, #0x38]
+ str r0, [r5, #0x1c]
+ cmp r0, #0
+ beq _022548EA
+ mov r0, #2
+ str r0, [r5, #0x34]
+ b _022548FA
+_022548EA:
+ mov r0, #0
+ str r0, [r5, #0x34]
+ b _022548FA
+_022548F0:
+ add r0, r5, #0
+ bl MOD22_02254CE4
+ mov r0, #0
+ str r0, [r5, #0x34]
+_022548FA:
+ add r0, r5, #0
+ add r1, r5, #0
+ add r0, #0x60
+ add r1, #0x1c
+ add r2, r4, #0
+ bl MOD22_02254E8C
+ cmp r0, #0
+ beq _02254926
+ mov r1, #0
+ strb r1, [r5]
+ strb r1, [r5, #1]
+ ldrb r0, [r5]
+ strb r0, [r5, #3]
+ add r0, r5, #0
+ strb r1, [r5, #2]
+ bl MOD22_02254C88
+ cmp r0, #0
+ beq _02254926
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+_02254926:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD22_0225489C
+
+ thumb_func_start MOD22_0225492C
+MOD22_0225492C: ; 0x0225492C
+ push {r4, lr}
+ add r4, r0, #0
+ add r0, #0xc
+ ldmia r0!, {r2, r3}
+ add r0, r4, #0
+ add r0, #0x4c
+ stmia r0!, {r2, r3}
+ add r0, r4, #0
+ add r0, #0x14
+ ldmia r0!, {r2, r3}
+ add r0, r4, #0
+ add r0, #0x54
+ stmia r0!, {r2, r3}
+ ldr r0, [r4, #0x30]
+ add r1, r4, #0
+ str r0, [r4, #0x3c]
+ ldr r0, [r4, #0x2c]
+ add r1, #0x38
+ str r0, [r4, #0x40]
+ ldr r0, [r4, #0x28]
+ mov r2, #0x24
+ str r0, [r4, #0x44]
+ ldr r0, [r4, #0x24]
+ str r0, [r4, #0x48]
+ ldr r0, [r4, #0x1c]
+ str r0, [r4, #0x38]
+ ldr r0, [r4, #8]
+ bl FUN_020893F0
+ add r0, r4, #0
+ bl MOD22_02254CD4
+ ldr r0, [r4, #0x60]
+ bl MOD22_02254F10
+ add r0, r4, #0
+ bl FUN_02016A18
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD22_0225492C
+
+ thumb_func_start MOD22_0225497C
+MOD22_0225497C: ; 0x0225497C
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ ldrb r1, [r4]
+ add r5, r0, #0
+ cmp r1, #6
+ bhs _022549D2
+ ldrb r0, [r4, #2]
+ cmp r0, #0
+ beq _0225499E
+ cmp r1, #5
+ beq _0225499E
+ add r0, r4, #0
+ mov r1, #5
+ bl MOD22_022549E0
+ mov r0, #0
+ strb r0, [r4, #2]
+_0225499E:
+ ldr r0, [r4, #0x64]
+ ldr r1, [r4, #0x5c]
+ bl MOD20_02252C14
+ add r1, r4, #0
+ add r0, r4, #0
+ add r1, #0x1c
+ bl MOD22_02254D58
+ ldrb r1, [r4]
+ add r0, r4, #0
+ lsl r2, r1, #2
+ ldr r1, _022549D4 ; =0x0225561C
+ ldr r1, [r1, r2]
+ blx r1
+ cmp r0, #0
+ beq _022549D2
+ add r0, r4, #0
+ bl MOD22_0225492C
+ add r0, r5, #0
+ bl FUN_0200CAB4
+ ldr r0, [r4, #0x64]
+ bl MOD20_022529A0
+_022549D2:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_022549D4: .word 0x0225561C
+ thumb_func_end MOD22_0225497C
+
+ thumb_func_start MOD22_022549D8
+MOD22_022549D8: ; 0x022549D8
+ mov r1, #1
+ strb r1, [r0, #2]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD22_022549D8
+
+ thumb_func_start MOD22_022549E0
+MOD22_022549E0: ; 0x022549E0
+ ldrb r2, [r0]
+ strb r2, [r0, #3]
+ ldrb r2, [r0, #2]
+ cmp r2, #0
+ bne _022549EE
+ strb r1, [r0]
+ b _022549F6
+_022549EE:
+ mov r1, #5
+ strb r1, [r0]
+ mov r1, #0
+ strb r1, [r0, #2]
+_022549F6:
+ mov r1, #0
+ strb r1, [r0, #1]
+ bx lr
+ thumb_func_end MOD22_022549E0
+
+ thumb_func_start MOD22_022549FC
+MOD22_022549FC: ; 0x022549FC
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _02254A0C
+ cmp r0, #1
+ beq _02254A1C
+ b _02254A46
+_02254A0C:
+ ldr r0, [r4, #0x60]
+ mov r1, #0
+ bl MOD22_02255048
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254A46
+_02254A1C:
+ ldr r0, [r4, #0x60]
+ mov r1, #0
+ bl MOD22_0225506C
+ cmp r0, #0
+ beq _02254A46
+ ldr r0, [r4, #0x64]
+ bl MOD20_0225298C
+ ldr r0, [r4, #0x1c]
+ cmp r0, #0
+ beq _02254A3E
+ add r0, r4, #0
+ mov r1, #2
+ bl MOD22_022549E0
+ b _02254A46
+_02254A3E:
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD22_022549E0
+_02254A46:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD22_022549FC
+
+ thumb_func_start MOD22_02254A4C
+MOD22_02254A4C: ; 0x02254A4C
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _02254A5C
+ cmp r0, #1
+ beq _02254A74
+ b _02254AC8
+_02254A5C:
+ ldrb r0, [r4, #4]
+ cmp r0, #1
+ bne _02254AC8
+ mov r1, #1
+ str r1, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ bl MOD22_02255048
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254AC8
+_02254A74:
+ ldrb r0, [r4, #4]
+ cmp r0, #2
+ beq _02254A84
+ cmp r0, #3
+ beq _02254A98
+ cmp r0, #5
+ beq _02254AB4
+ b _02254AC8
+_02254A84:
+ mov r0, #0
+ str r0, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_02255048
+ ldrb r0, [r4, #1]
+ sub r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254AC8
+_02254A98:
+ mov r0, #2
+ str r0, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_02255048
+ add r0, r4, #0
+ bl MOD22_02254D00
+ add r0, r4, #0
+ mov r1, #2
+ bl MOD22_022549E0
+ b _02254AC8
+_02254AB4:
+ mov r0, #3
+ str r0, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_02255048
+ add r0, r4, #0
+ mov r1, #3
+ bl MOD22_022549E0
+_02254AC8:
+ mov r0, #0
+ pop {r4, pc}
+ thumb_func_end MOD22_02254A4C
+
+ thumb_func_start MOD22_02254ACC
+MOD22_02254ACC: ; 0x02254ACC
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #1]
+ cmp r1, #0
+ beq _02254ADC
+ cmp r1, #1
+ beq _02254AFA
+ b _02254B4A
+_02254ADC:
+ ldrb r1, [r4, #4]
+ cmp r1, #1
+ bne _02254B4A
+ mov r1, #1
+ str r1, [r4, #0x34]
+ bl MOD22_02254D44
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_02255048
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254B4A
+_02254AFA:
+ ldrb r0, [r4, #4]
+ cmp r0, #2
+ beq _02254B0A
+ cmp r0, #3
+ beq _02254B20
+ cmp r0, #5
+ beq _02254B36
+ b _02254B4A
+_02254B0A:
+ mov r0, #0
+ str r0, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_02255048
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD22_022549E0
+ b _02254B4A
+_02254B20:
+ mov r0, #0
+ str r0, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_02255048
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD22_022549E0
+ b _02254B4A
+_02254B36:
+ mov r0, #3
+ str r0, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_02255048
+ add r0, r4, #0
+ mov r1, #3
+ bl MOD22_022549E0
+_02254B4A:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD22_02254ACC
+
+ thumb_func_start MOD22_02254B50
+MOD22_02254B50: ; 0x02254B50
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #4]
+ cmp r1, #2
+ beq _02254B84
+ cmp r1, #3
+ beq _02254B64
+ cmp r1, #6
+ beq _02254B9A
+ b _02254BAE
+_02254B64:
+ ldrb r1, [r4, #3]
+ cmp r1, #1
+ bne _02254B84
+ bl MOD22_02254D00
+ mov r0, #2
+ str r0, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_02255048
+ add r0, r4, #0
+ mov r1, #2
+ bl MOD22_022549E0
+ b _02254BAE
+_02254B84:
+ mov r0, #0
+ str r0, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_02255048
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD22_022549E0
+ b _02254BAE
+_02254B9A:
+ mov r0, #4
+ str r0, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_02255048
+ add r0, r4, #0
+ mov r1, #4
+ bl MOD22_022549E0
+_02254BAE:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD22_02254B50
+
+ thumb_func_start MOD22_02254BB4
+MOD22_02254BB4: ; 0x02254BB4
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #3
+ bhi _02254C4A
+ add r0, r0, r0
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_02254BCA: ; jump table
+ .short _02254BD2 - _02254BCA - 2 ; case 0
+ .short _02254BDC - _02254BCA - 2 ; case 1
+ .short _02254C00 - _02254BCA - 2 ; case 2
+ .short _02254C2A - _02254BCA - 2 ; case 3
+_02254BD2:
+ mov r0, #0
+ strh r0, [r4, #6]
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+_02254BDC:
+ ldrh r0, [r4, #6]
+ add r0, r0, #1
+ strh r0, [r4, #6]
+ ldrh r0, [r4, #6]
+ cmp r0, #0x5a
+ blo _02254C4A
+ mov r0, #5
+ str r0, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_02255048
+ mov r0, #0
+ strh r0, [r4, #6]
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254C4A
+_02254C00:
+ ldrh r0, [r4, #6]
+ add r0, r0, #1
+ strh r0, [r4, #6]
+ ldrh r0, [r4, #6]
+ cmp r0, #0x3c
+ blo _02254C4A
+ mov r0, #6
+ str r0, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_02255048
+ add r0, r4, #0
+ bl MOD22_02254CE4
+ mov r0, #0
+ strh r0, [r4, #6]
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254C4A
+_02254C2A:
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_0225506C
+ cmp r0, #0
+ beq _02254C4A
+ mov r0, #0
+ str r0, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ mov r1, #1
+ bl MOD22_02255048
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD22_022549E0
+_02254C4A:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD22_02254BB4
+
+ thumb_func_start MOD22_02254C50
+MOD22_02254C50: ; 0x02254C50
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _02254C60
+ cmp r0, #1
+ beq _02254C74
+ b _02254C82
+_02254C60:
+ mov r0, #7
+ str r0, [r4, #0x34]
+ ldr r0, [r4, #0x60]
+ mov r1, #3
+ bl MOD22_02255048
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254C82
+_02254C74:
+ ldr r0, [r4, #0x60]
+ bl MOD22_02255078
+ cmp r0, #0
+ beq _02254C82
+ mov r0, #1
+ pop {r4, pc}
+_02254C82:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD22_02254C50
+
+ thumb_func_start MOD22_02254C88
+MOD22_02254C88: ; 0x02254C88
+ push {r3, r4, lr}
+ sub sp, #4
+ add r4, r0, #0
+ mov r0, #8
+ str r0, [sp]
+ ldr r0, _02254CCC ; =0x02255618
+ ldr r2, _02254CD0 ; =MOD22_02254CE0
+ mov r1, #1
+ add r3, r4, #0
+ bl MOD20_02254130
+ str r0, [r4, #0x5c]
+ cmp r0, #0
+ beq _02254CC4
+ mov r1, #0
+ add r2, r1, #0
+ mov r3, #0xf
+ bl MOD20_022542AC
+ ldr r0, [r4, #0x5c]
+ mov r1, #0
+ mov r2, #1
+ mov r3, #0x4b
+ bl MOD20_022542AC
+ mov r0, #0
+ strb r0, [r4, #4]
+ add sp, #4
+ mov r0, #1
+ pop {r3, r4, pc}
+_02254CC4:
+ mov r0, #0
+ add sp, #4
+ pop {r3, r4, pc}
+ nop
+_02254CCC: .word 0x02255618
+_02254CD0: .word MOD22_02254CE0
+ thumb_func_end MOD22_02254C88
+
+ thumb_func_start MOD22_02254CD4
+MOD22_02254CD4: ; 0x02254CD4
+ ldr r3, _02254CDC ; =0x02254199
+ ldr r0, [r0, #0x5c]
+ bx r3
+ nop
+_02254CDC: .word 0x02254199
+ thumb_func_end MOD22_02254CD4
+
+ thumb_func_start MOD22_02254CE0
+MOD22_02254CE0: ; 0x02254CE0
+ strb r1, [r3, #4]
+ bx lr
+ thumb_func_end MOD22_02254CE0
+
+ thumb_func_start MOD22_02254CE4
+MOD22_02254CE4: ; 0x02254CE4
+ mov r2, #0
+ str r2, [r0, #0x1c]
+ mov r1, #1
+ str r1, [r0, #0x20]
+ str r2, [r0, #0x24]
+ str r2, [r0, #0x28]
+ str r2, [r0, #0x2c]
+ str r2, [r0, #0x30]
+ str r2, [r0, #0xc]
+ str r2, [r0, #0x10]
+ str r2, [r0, #0x14]
+ str r2, [r0, #0x18]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD22_02254CE4
+
+ thumb_func_start MOD22_02254D00
+MOD22_02254D00: ; 0x02254D00
+ push {r3, r4, r5, r6, r7, lr}
+ add r4, r0, #0
+ ldr r3, [r4, #0xc]
+ mov r0, #0
+ ldr r2, [r4, #0x10]
+ mov r1, #0
+ eor r1, r2
+ eor r0, r3
+ orr r0, r1
+ beq _02254D32
+ bl FUN_02020BF4
+ add r5, r4, #0
+ add r5, #0xc
+ ldr r7, [r4, #0x14]
+ ldr r2, [r4, #0xc]
+ ldr r6, [r4, #0x18]
+ sub r0, r0, r7
+ sbc r1, r6
+ ldr r3, [r5, #4]
+ add r0, r2, r0
+ adc r3, r1
+ str r0, [r4, #0xc]
+ str r3, [r5, #4]
+ b _02254D3A
+_02254D32:
+ bl FUN_02020BF4
+ str r0, [r4, #0xc]
+ str r1, [r4, #0x10]
+_02254D3A:
+ mov r0, #1
+ str r0, [r4, #0x1c]
+ mov r0, #0
+ str r0, [r4, #0x20]
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD22_02254D00
+
+ thumb_func_start MOD22_02254D44
+MOD22_02254D44: ; 0x02254D44
+ push {r4, lr}
+ add r4, r0, #0
+ bl FUN_02020BF4
+ str r0, [r4, #0x14]
+ str r1, [r4, #0x18]
+ mov r0, #0
+ str r0, [r4, #0x1c]
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD22_02254D44
+
+ thumb_func_start MOD22_02254D58
+MOD22_02254D58: ; 0x02254D58
+ push {r3, r4, r5, r6, r7, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ ldr r0, [r4]
+ cmp r0, #0
+ bne _02254D66
+ b _02254E7C
+_02254D66:
+ bl FUN_02020BF4
+ ldr r3, [r5, #0xc]
+ ldr r2, [r5, #0x10]
+ sub r0, r0, r3
+ sbc r1, r2
+ bl FUN_02020BFC
+ ldr r2, _02254E80 ; =0x04000280
+ mov r3, #1
+ strh r3, [r2]
+ add r3, r2, #0
+ add r3, #0x10
+ str r0, [r3]
+ str r1, [r3, #4]
+ mov r3, #0xfa
+ add r0, r2, #0
+ lsl r3, r3, #2
+ add r0, #0x18
+ mov r1, #0
+ str r3, [r0]
+ str r1, [r0, #4]
+ lsr r0, r2, #0xb
+_02254D94:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _02254D94
+ ldr r0, _02254E84 ; =0x040002A0
+ add r3, r0, #0
+ ldr r6, [r0]
+ ldr r5, [r0, #4]
+ sub r3, #0x20
+ lsr r0, r0, #0xb
+_02254DA6:
+ ldrh r1, [r3]
+ tst r1, r0
+ bne _02254DA6
+ ldr r2, _02254E88 ; =0x040002A8
+ mov r0, #1
+ ldr r1, [r2]
+ ldr r7, [r2, #4]
+ strh r0, [r3]
+ add r0, r2, #0
+ sub r0, #0x18
+ str r1, [r0]
+ str r7, [r0, #4]
+ mov r1, #0xa
+ sub r2, #0x10
+ str r1, [r2]
+ mov r0, #0
+ ldr r1, _02254E80 ; =0x04000280
+ str r0, [r2, #4]
+ lsr r0, r1, #0xb
+_02254DCC:
+ ldrh r2, [r1]
+ tst r2, r0
+ bne _02254DCC
+ ldr r0, _02254E84 ; =0x040002A0
+ ldr r2, [r0]
+ str r2, [r4, #8]
+ mov r2, #1
+ strh r2, [r1]
+ add r1, r0, #0
+ sub r1, #0x10
+ str r6, [r1]
+ str r5, [r1, #4]
+ mov r2, #0x3c
+ sub r0, #8
+ str r2, [r0]
+ mov r1, #0
+ ldr r2, _02254E80 ; =0x04000280
+ str r1, [r0, #4]
+ lsr r0, r2, #0xb
+_02254DF2:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _02254DF2
+ ldr r0, _02254E84 ; =0x040002A0
+ add r1, r0, #0
+ ldr r3, [r0]
+ ldr r2, [r0, #4]
+ sub r1, #0x20
+ lsr r0, r0, #0xb
+_02254E04:
+ ldrh r5, [r1]
+ tst r5, r0
+ bne _02254E04
+ ldr r0, _02254E88 ; =0x040002A8
+ ldr r5, [r0]
+ str r5, [r4, #0xc]
+ mov r5, #1
+ strh r5, [r1]
+ add r1, r0, #0
+ sub r1, #0x18
+ str r3, [r1]
+ str r2, [r1, #4]
+ mov r2, #0x3c
+ sub r0, #0x10
+ str r2, [r0]
+ mov r1, #0
+ ldr r2, _02254E80 ; =0x04000280
+ str r1, [r0, #4]
+ lsr r0, r2, #0xb
+_02254E2A:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _02254E2A
+ ldr r0, _02254E84 ; =0x040002A0
+ add r2, r0, #0
+ ldr r5, [r0]
+ ldr r3, [r0, #4]
+ sub r2, #0x20
+ lsr r0, r0, #0xb
+_02254E3C:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _02254E3C
+ ldr r1, _02254E88 ; =0x040002A8
+ mov r6, #0x18
+ ldr r0, [r1]
+ str r0, [r4, #0x10]
+ mov r0, #0
+ sub r6, r5, r6
+ mov ip, r3
+ mov r6, ip
+ sbc r6, r0
+ blo _02254E7A
+ mov r0, #1
+ strh r0, [r2]
+ add r0, r1, #0
+ sub r0, #0x18
+ str r5, [r0]
+ str r3, [r0, #4]
+ mov r2, #0x18
+ sub r1, #0x10
+ str r2, [r1]
+ mov r0, #0
+ ldr r2, _02254E80 ; =0x04000280
+ str r0, [r1, #4]
+ lsr r0, r2, #0xb
+_02254E70:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _02254E70
+ ldr r0, _02254E88 ; =0x040002A8
+ ldr r5, [r0]
+_02254E7A:
+ str r5, [r4, #0x14]
+_02254E7C:
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_02254E80: .word 0x04000280
+_02254E84: .word 0x040002A0
+_02254E88: .word 0x040002A8
+ thumb_func_end MOD22_02254D58
+
+ thumb_func_start MOD22_02254E8C
+MOD22_02254E8C: ; 0x02254E8C
+ push {r3, r4, r5, r6, lr}
+ sub sp, #4
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r0, #8
+ mov r1, #0x88
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02254F08
+ str r6, [r4]
+ bl MOD20_02252D24
+ str r0, [r4, #0x5c]
+ mov r0, #8
+ bl FUN_02016B94
+ str r0, [r4, #4]
+ cmp r0, #0
+ bne _02254EBA
+ add sp, #4
+ mov r0, #0
+ pop {r3, r4, r5, r6, pc}
+_02254EBA:
+ mov r0, #8
+ str r0, [sp]
+ add r0, r4, #0
+ add r0, #0x34
+ mov r1, #0xc
+ mov r2, #0x12
+ mov r3, #0x13
+ bl MOD20_02253FBC
+ cmp r0, #0
+ beq _02254F08
+ mov r0, #8
+ str r0, [sp]
+ add r0, r4, #0
+ add r0, #0x48
+ mov r1, #0xc
+ mov r2, #3
+ mov r3, #4
+ bl MOD20_02253FBC
+ cmp r0, #0
+ beq _02254F00
+ add r0, r4, #0
+ add r0, #8
+ mov r1, #8
+ bl MOD20_022536F4
+ add r0, r4, #0
+ mov r1, #0
+ add r0, #0x84
+ str r1, [r0]
+ add sp, #4
+ str r4, [r5]
+ mov r0, #1
+ pop {r3, r4, r5, r6, pc}
+_02254F00:
+ add r4, #0x34
+ add r0, r4, #0
+ bl MOD20_02254014
+_02254F08:
+ mov r0, #0
+ add sp, #4
+ pop {r3, r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD22_02254E8C
+
+ thumb_func_start MOD22_02254F10
+MOD22_02254F10: ; 0x02254F10
+ push {r4, lr}
+ add r4, r0, #0
+ beq _02254F26
+ ldr r0, [r4, #4]
+ cmp r0, #0
+ beq _02254F20
+ bl FUN_02016A18
+_02254F20:
+ add r0, r4, #0
+ bl FUN_02016A18
+_02254F26:
+ pop {r4, pc}
+ thumb_func_end MOD22_02254F10
+
+ thumb_func_start MOD22_02254F28
+MOD22_02254F28: ; 0x02254F28
+ ldr r3, _02254F30 ; =MOD22_02254F34
+ add r0, r1, #0
+ bx r3
+ nop
+_02254F30: .word MOD22_02254F34
+ thumb_func_end MOD22_02254F28
+
+ thumb_func_start MOD22_02254F34
+MOD22_02254F34: ; 0x02254F34
+ push {r3, r4, r5, lr}
+ add r4, r0, #0
+ ldr r0, [r4]
+ ldr r2, _0225503C ; =0x04000280
+ ldr r0, [r0, #0x14]
+ mov r3, #0
+ strh r3, [r2]
+ str r0, [r2, #0x10]
+ add r0, r2, #0
+ mov r1, #0xa
+ add r0, #0x18
+ str r1, [r0]
+ str r3, [r0, #4]
+ lsr r0, r2, #0xb
+_02254F50:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _02254F50
+ ldr r0, _02255040 ; =0x040002A0
+ add r3, r0, #0
+ ldr r1, [r0]
+ sub r3, #0x20
+ lsr r0, r0, #0xb
+_02254F60:
+ ldrh r2, [r3]
+ tst r2, r0
+ bne _02254F60
+ ldr r0, _02255044 ; =0x040002A8
+ ldr r5, [r0]
+ ldr r0, [r4, #0x60]
+ bl MOD20_02253F28
+ ldr r0, [r4, #0x64]
+ add r1, r5, #0
+ bl MOD20_02253F28
+ ldr r0, [r4]
+ ldr r2, _0225503C ; =0x04000280
+ ldr r0, [r0, #0x10]
+ mov r3, #0
+ strh r3, [r2]
+ str r0, [r2, #0x10]
+ add r0, r2, #0
+ mov r1, #0xa
+ add r0, #0x18
+ str r1, [r0]
+ str r3, [r0, #4]
+ lsr r0, r2, #0xb
+_02254F90:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _02254F90
+ ldr r0, _02255040 ; =0x040002A0
+ add r3, r0, #0
+ ldr r1, [r0]
+ sub r3, #0x20
+ lsr r0, r0, #0xb
+_02254FA0:
+ ldrh r2, [r3]
+ tst r2, r0
+ bne _02254FA0
+ ldr r0, _02255044 ; =0x040002A8
+ ldr r5, [r0]
+ ldr r0, [r4, #0x68]
+ bl MOD20_02253F28
+ ldr r0, [r4, #0x6c]
+ add r1, r5, #0
+ bl MOD20_02253F28
+ ldr r0, [r4]
+ ldr r2, _0225503C ; =0x04000280
+ ldr r0, [r0, #0xc]
+ mov r3, #0
+ strh r3, [r2]
+ str r0, [r2, #0x10]
+ add r0, r2, #0
+ mov r1, #0xa
+ add r0, #0x18
+ str r1, [r0]
+ str r3, [r0, #4]
+ lsr r0, r2, #0xb
+_02254FD0:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _02254FD0
+ ldr r0, _02255040 ; =0x040002A0
+ add r3, r0, #0
+ ldr r1, [r0]
+ sub r3, #0x20
+ lsr r0, r0, #0xb
+_02254FE0:
+ ldrh r2, [r3]
+ tst r2, r0
+ bne _02254FE0
+ ldr r0, _02255044 ; =0x040002A8
+ ldr r5, [r0]
+ ldr r0, [r4, #0x70]
+ bl MOD20_02253F28
+ ldr r0, [r4, #0x74]
+ add r1, r5, #0
+ bl MOD20_02253F28
+ ldr r0, [r4]
+ ldr r2, _0225503C ; =0x04000280
+ ldr r0, [r0, #8]
+ mov r3, #0
+ strh r3, [r2]
+ str r0, [r2, #0x10]
+ add r0, r2, #0
+ mov r1, #0xa
+ add r0, #0x18
+ str r1, [r0]
+ str r3, [r0, #4]
+ lsr r0, r2, #0xb
+_02255010:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _02255010
+ ldr r0, _02255040 ; =0x040002A0
+ add r3, r0, #0
+ ldr r1, [r0]
+ sub r3, #0x20
+ lsr r0, r0, #0xb
+_02255020:
+ ldrh r2, [r3]
+ tst r2, r0
+ bne _02255020
+ ldr r0, _02255044 ; =0x040002A8
+ ldr r5, [r0]
+ ldr r0, [r4, #0x78]
+ bl MOD20_02253F28
+ ldr r0, [r4, #0x7c]
+ add r1, r5, #0
+ bl MOD20_02253F28
+ pop {r3, r4, r5, pc}
+ nop
+_0225503C: .word 0x04000280
+_02255040: .word 0x040002A0
+_02255044: .word 0x040002A8
+ thumb_func_end MOD22_02254F34
+
+ thumb_func_start MOD22_02255048
+MOD22_02255048: ; 0x02255048
+ 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, _02255068 ; =0x02255670
+ ldr r3, [r2]
+ bl MOD20_022537E0
+ add sp, #0xc
+ pop {pc}
+ nop
+_02255068: .word 0x02255670
+ thumb_func_end MOD22_02255048
+
+ thumb_func_start MOD22_0225506C
+MOD22_0225506C: ; 0x0225506C
+ ldr r3, _02255074 ; =0x02253795
+ add r0, #8
+ bx r3
+ nop
+_02255074: .word 0x02253795
+ thumb_func_end MOD22_0225506C
+
+ thumb_func_start MOD22_02255078
+MOD22_02255078: ; 0x02255078
+ ldr r3, _02255080 ; =0x022537B9
+ add r0, #8
+ bx r3
+ nop
+_02255080: .word 0x022537B9
+ thumb_func_end MOD22_02255078
+
+ thumb_func_start MOD22_02255084
+MOD22_02255084: ; 0x02255084
+ 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 MOD22_02255084
+
+ thumb_func_start MOD22_02255098
+MOD22_02255098: ; 0x02255098
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x14
+ add r7, r1, #0
+ add r0, r7, #0
+ bl MOD20_022538A0
+ add r5, r0, #0
+ ldr r0, [r5, #4]
+ ldr r2, _0225515C ; =0x02255654
+ 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, #0x15
+ mov r3, #6
+ bl FUN_0200687C
+ 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, #0x14
+ mov r3, #6
+ bl FUN_020068C8
+ mov r0, #0
+ add r1, r0, #0
+ bl MOD20_02252D7C
+ ldr r0, [r5, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r7, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r0, r7, #0
+ bl MOD20_022538A4
+ add r6, r0, #0
+ add r0, r4, #0
+ bl MOD22_0225516C
+ add r0, r4, #0
+ add r1, r6, #0
+ bl MOD22_022551A4
+ ldr r0, _02255160 ; =MOD22_02254F28
+ add r1, r5, #0
+ mov r2, #3
+ bl FUN_0200CA44
+ add r5, #0x84
+ str r0, [r5]
+ add r0, r4, #0
+ bl MOD22_02254F34
+ ldr r0, [r6]
+ cmp r0, #0
+ beq _02255136
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD22_02255048
+_02255136:
+ ldr r1, _02255164 ; =0x04001000
+ ldr r0, _02255168 ; =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, r7, #0
+ bl MOD22_02255084
+ add sp, #0x14
+ pop {r4, r5, r6, r7, pc}
+ nop
+_0225515C: .word 0x02255654
+_02255160: .word MOD22_02254F28
+_02255164: .word 0x04001000
+_02255168: .word 0xFFFFE0FF
+ thumb_func_end MOD22_02255098
+
+ thumb_func_start MOD22_0225516C
+MOD22_0225516C: ; 0x0225516C
+ push {lr}
+ sub sp, #0xc
+ mov r3, #0
+ str r3, [sp]
+ mov r2, #1
+ str r2, [sp, #4]
+ mov r0, #8
+ str r0, [sp, #8]
+ mov r0, #0xc
+ mov r1, #2
+ bl FUN_02006A34
+ mov r0, #0
+ str r0, [sp]
+ mov r2, #1
+ mov r3, #0xa
+ str r2, [sp, #4]
+ mov r0, #8
+ str r0, [sp, #8]
+ mov r0, #0xc
+ mov r1, #0x16
+ lsl r3, r3, #8
+ bl FUN_02006A34
+ mov r0, #1
+ add sp, #0xc
+ pop {pc}
+ .align 2, 0
+ thumb_func_end MOD22_0225516C
+
+ thumb_func_start MOD22_022551A4
+MOD22_022551A4: ; 0x022551A4
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #8
+ add r7, r0, #0
+ str r0, [sp, #4]
+ add r0, #0x48
+ ldr r4, _022551FC ; =0x022556A0
+ str r1, [sp]
+ mov r6, #0
+ add r5, r7, #0
+ str r0, [sp, #4]
+_022551B8:
+ ldr r0, [r7, #0x5c]
+ ldr r2, [sp, #4]
+ add r1, r4, #0
+ bl MOD20_02253E74
+ str r0, [r5, #0x60]
+ add r6, r6, #1
+ add r4, #0x10
+ add r5, r5, #4
+ cmp r6, #7
+ bls _022551B8
+ ldr r2, _022551FC ; =0x022556A0
+ lsl r1, r6, #4
+ add r1, r2, r1
+ add r2, r7, #0
+ ldr r0, [r7, #0x5c]
+ add r2, #0x34
+ bl MOD20_02253E74
+ add r1, r7, #0
+ add r1, #0x80
+ str r0, [r1]
+ ldr r0, [sp]
+ ldr r0, [r0]
+ cmp r0, #0
+ bne _022551F6
+ add r7, #0x80
+ ldr r0, [r7]
+ mov r1, #1
+ bl MOD20_02253F78
+_022551F6:
+ add sp, #8
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_022551FC: .word 0x022556A0
+ thumb_func_end MOD22_022551A4
+
+ thumb_func_start MOD22_02255200
+MOD22_02255200: ; 0x02255200
+ push {r4, r5, r6, lr}
+ add r6, r1, #0
+ add r5, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A4
+ add r4, r0, #0
+ ldr r1, [r4, #0x18]
+ add r0, r5, #0
+ lsl r2, r1, #2
+ ldr r1, _0225522C ; =0x02255638
+ ldr r1, [r1, r2]
+ bl FUN_0201B6C4
+ ldr r2, [r4, #0x18]
+ add r0, r5, #0
+ lsl r3, r2, #2
+ ldr r2, _0225522C ; =0x02255638
+ add r1, r6, #0
+ ldr r2, [r2, r3]
+ blx r2
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_0225522C: .word 0x02255638
+ thumb_func_end MOD22_02255200
+
+ thumb_func_start MOD22_02255230
+MOD22_02255230: ; 0x02255230
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r0, r5, #0
+ bl MOD20_022538A4
+ add r0, r4, #0
+ add r0, #0x80
+ ldr r0, [r0]
+ mov r1, #1
+ bl MOD20_02253F78
+ ldr r0, [r4, #4]
+ mov r1, #0
+ bl MOD22_02255544
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r5, #0
+ bl MOD22_02255084
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD22_02255230
+
+ thumb_func_start MOD22_02255268
+MOD22_02255268: ; 0x02255268
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r0, #0x80
+ ldr r0, [r0]
+ mov r1, #0
+ bl MOD20_02253F78
+ add r0, r4, #0
+ add r0, #0x80
+ ldr r0, [r0]
+ mov r1, #0xb
+ bl MOD20_02253F28
+ ldr r0, [r4, #4]
+ mov r1, #1
+ bl MOD22_02255544
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ ldr r0, _022552A8 ; =0x00000669
+ bl MOD20_02252B28
+ add r0, r5, #0
+ bl MOD22_02255084
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_022552A8: .word 0x00000669
+ thumb_func_end MOD22_02255268
+
+ thumb_func_start MOD22_022552AC
+MOD22_022552AC: ; 0x022552AC
+ push {r4, r5, r6, lr}
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A4
+ add r6, r0, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ ldr r0, [r6, #0x18]
+ cmp r0, #2
+ beq _022552CE
+ add r0, r5, #0
+ bl MOD22_02255084
+ pop {r4, r5, r6, pc}
+_022552CE:
+ add r0, r5, #0
+ bl MOD20_022538AC
+ cmp r0, #0
+ beq _022552DC
+ cmp r0, #1
+ pop {r4, r5, r6, pc}
+_022552DC:
+ add r0, r4, #0
+ add r0, #0x80
+ ldr r0, [r0]
+ mov r1, #0xc
+ bl MOD20_02253F28
+ ldr r0, [r4, #4]
+ mov r1, #0
+ bl MOD22_02255544
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r5, #0
+ bl MOD20_022538B0
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD22_022552AC
+
+ thumb_func_start MOD22_02255300
+MOD22_02255300: ; 0x02255300
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r1, #0
+ add r0, r6, #0
+ bl MOD20_022538A4
+ add r7, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A8
+ add r5, r0, #0
+ ldr r0, [r7, #0x18]
+ cmp r0, #3
+ beq _0225532A
+ add r0, r6, #0
+ bl MOD22_02255084
+ pop {r3, r4, r5, r6, r7, pc}
+_0225532A:
+ add r0, r6, #0
+ bl MOD20_022538AC
+ cmp r0, #0
+ beq _0225533A
+ cmp r0, #1
+ beq _02255358
+ pop {r3, r4, r5, r6, r7, pc}
+_0225533A:
+ mov r0, #6
+ strh r0, [r5]
+ mov r0, #2
+ strb r0, [r5, #3]
+ mov r0, #0
+ strb r0, [r5, #2]
+ add r0, r4, #0
+ add r0, #0x80
+ ldr r0, [r0]
+ mov r1, #0xd
+ bl MOD20_02253F28
+ add r0, r6, #0
+ bl MOD20_022538B0
+_02255358:
+ add r0, r5, #0
+ mov r1, #6
+ bl MOD22_02255510
+ cmp r0, #0
+ beq _0225537A
+ ldr r0, _0225537C ; =0x00000669
+ bl MOD20_02252B28
+ ldrb r1, [r5, #3]
+ ldr r0, [r4, #4]
+ bl MOD22_02255544
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+_0225537A:
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_0225537C: .word 0x00000669
+ thumb_func_end MOD22_02255300
+
+ thumb_func_start MOD22_02255380
+MOD22_02255380: ; 0x02255380
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r1, #0
+ add r0, r6, #0
+ bl MOD20_022538A4
+ add r7, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A8
+ add r5, r0, #0
+ ldr r0, [r7, #0x18]
+ cmp r0, #4
+ beq _022553AA
+ add r0, r6, #0
+ bl MOD22_02255084
+ pop {r3, r4, r5, r6, r7, pc}
+_022553AA:
+ add r0, r6, #0
+ bl MOD20_022538AC
+ cmp r0, #0
+ beq _022553BA
+ cmp r0, #1
+ beq _022553D8
+ pop {r3, r4, r5, r6, r7, pc}
+_022553BA:
+ mov r0, #3
+ strh r0, [r5]
+ mov r0, #2
+ strb r0, [r5, #3]
+ mov r0, #0
+ strb r0, [r5, #2]
+ add r0, r4, #0
+ add r0, #0x80
+ ldr r0, [r0]
+ mov r1, #0xe
+ bl MOD20_02253F28
+ add r0, r6, #0
+ bl MOD20_022538B0
+_022553D8:
+ add r0, r5, #0
+ mov r1, #3
+ bl MOD22_02255510
+ cmp r0, #0
+ beq _022553FA
+ ldr r0, _022553FC ; =0x00000669
+ bl MOD20_02252B28
+ ldrb r1, [r5, #3]
+ ldr r0, [r4, #4]
+ bl MOD22_02255544
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+_022553FA:
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_022553FC: .word 0x00000669
+ thumb_func_end MOD22_02255380
+
+ thumb_func_start MOD22_02255400
+MOD22_02255400: ; 0x02255400
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r1, #0
+ add r0, r6, #0
+ bl MOD20_022538A4
+ add r7, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A8
+ add r5, r0, #0
+ ldr r0, [r7, #0x18]
+ cmp r0, #5
+ beq _0225542A
+ add r0, r6, #0
+ bl MOD22_02255084
+ pop {r3, r4, r5, r6, r7, pc}
+_0225542A:
+ add r0, r6, #0
+ bl MOD20_022538AC
+ cmp r0, #0
+ beq _0225543A
+ cmp r0, #1
+ beq _02255468
+ pop {r3, r4, r5, r6, r7, pc}
+_0225543A:
+ mov r0, #0
+ strh r0, [r5]
+ strb r0, [r5, #2]
+ add r0, r4, #0
+ add r0, #0x80
+ ldr r0, [r0]
+ mov r1, #0xf
+ bl MOD20_02253F28
+ ldr r0, [r4, #4]
+ mov r1, #5
+ bl MOD22_02255544
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ ldr r0, _02255498 ; =0x00000666
+ bl MOD20_02252B28
+ add r0, r6, #0
+ bl MOD20_022538B0
+_02255468:
+ ldrh r0, [r5]
+ add r0, r0, #1
+ strh r0, [r5]
+ ldrh r0, [r5]
+ cmp r0, #2
+ bls _02255496
+ mov r0, #0
+ strh r0, [r5]
+ ldrb r1, [r5, #2]
+ mov r0, #1
+ eor r0, r1
+ strb r0, [r5, #2]
+ ldrb r0, [r5, #2]
+ add r0, r0, #5
+ strb r0, [r5, #3]
+ ldrb r1, [r5, #3]
+ ldr r0, [r4, #4]
+ bl MOD22_02255544
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+_02255496:
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_02255498: .word 0x00000666
+ thumb_func_end MOD22_02255400
+
+ thumb_func_start MOD22_0225549C
+MOD22_0225549C: ; 0x0225549C
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A4
+ add r7, r0, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r6, r0, #0
+ add r0, r5, #0
+ bl MOD20_022538A8
+ add r4, r0, #0
+ ldr r0, [r7, #0x18]
+ cmp r0, #6
+ beq _022554C6
+ add r0, r5, #0
+ bl MOD22_02255084
+ pop {r3, r4, r5, r6, r7, pc}
+_022554C6:
+ add r0, r5, #0
+ bl MOD20_022538AC
+ cmp r0, #0
+ beq _022554D6
+ cmp r0, #1
+ beq _022554FC
+ pop {r3, r4, r5, r6, r7, pc}
+_022554D6:
+ add r0, r6, #0
+ add r0, #0x80
+ ldr r0, [r0]
+ mov r1, #0x10
+ bl MOD20_02253F28
+ ldr r0, [r6, #4]
+ mov r1, #6
+ bl MOD22_02255544
+ ldr r0, [r6, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r5, #0
+ bl MOD20_022538B0
+ mov r0, #0
+ strh r0, [r4]
+_022554FC:
+ ldrh r0, [r4]
+ add r0, r0, #1
+ strh r0, [r4]
+ ldrh r0, [r4]
+ cmp r0, #0x50
+ bls _0225550E
+ add r0, r5, #0
+ bl MOD22_02255084
+_0225550E:
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD22_0225549C
+
+ thumb_func_start MOD22_02255510
+MOD22_02255510: ; 0x02255510
+ ldrh r2, [r0]
+ add r2, r2, #1
+ strh r2, [r0]
+ ldrh r2, [r0]
+ cmp r2, r1
+ bls _0225553A
+ mov r2, #0
+ strh r2, [r0]
+ ldrb r1, [r0, #2]
+ add r1, r1, #1
+ strb r1, [r0, #2]
+ ldrb r1, [r0, #2]
+ cmp r1, #3
+ blo _0225552E
+ strb r2, [r0, #2]
+_0225552E:
+ ldrb r2, [r0, #2]
+ ldr r1, _02255540 ; =0x02255634
+ ldrb r1, [r1, r2]
+ strb r1, [r0, #3]
+ mov r0, #1
+ bx lr
+_0225553A:
+ mov r0, #0
+ bx lr
+ nop
+_02255540: .word 0x02255634
+ thumb_func_end MOD22_02255510
+
+ thumb_func_start MOD22_02255544
+MOD22_02255544: ; 0x02255544
+ push {r3, r4, r5, r6, r7, lr}
+ add r4, r1, #0
+ mov r1, #6
+ bl FUN_0201886C
+ ldr r1, _022555A0 ; =0x00000252
+ mov r7, #1
+ add r1, r0, r1
+ lsl r0, r4, #2
+ add r0, r4, r0
+ add r0, r0, #2
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ str r0, [sp]
+ mov r0, #0
+ mov ip, r0
+ lsl r7, r7, #0xa
+ mov r6, #9
+_02255568:
+ ldr r3, [sp]
+ mov r2, #0
+ add r4, r1, #0
+_0225556E:
+ sub r5, r6, r2
+ add r0, r3, #0
+ strh r3, [r4]
+ orr r0, r7
+ lsl r5, r5, #1
+ add r2, r2, #1
+ strh r0, [r1, r5]
+ add r3, r3, #1
+ add r4, r4, #2
+ cmp r2, #5
+ blo _0225556E
+ ldr r0, [sp]
+ add r1, #0x40
+ add r0, #0x25
+ str r0, [sp]
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ str r0, [sp]
+ mov r0, ip
+ add r0, r0, #1
+ mov ip, r0
+ cmp r0, #0xb
+ blo _02255568
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_022555A0: .word 0x00000252
+ thumb_func_end MOD22_02255544
+
+ thumb_func_start MOD22_022555A4
+MOD22_022555A4: ; 0x022555A4
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r0, r5, #0
+ bl MOD20_022538AC
+ cmp r0, #0
+ beq _022555C0
+ cmp r0, #1
+ beq _022555CC
+ pop {r3, r4, r5, pc}
+_022555C0:
+ add r0, r4, #0
+ bl MOD22_022555FC
+ add r0, r5, #0
+ bl MOD20_022538B0
+_022555CC:
+ add r0, r4, #0
+ add r0, #0x34
+ bl MOD20_02254014
+ add r0, r4, #0
+ add r0, #0x48
+ bl MOD20_02254014
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_020178A0
+ add r0, r4, #0
+ add r0, #0x84
+ ldr r0, [r0]
+ bl FUN_0200CAB4
+ mov r0, #0
+ add r4, #0x84
+ str r0, [r4]
+ add r0, r5, #0
+ bl MOD22_02255084
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD22_022555A4
+
+ thumb_func_start MOD22_022555FC
+MOD22_022555FC: ; 0x022555FC
+ push {r4, r5, r6, lr}
+ add r6, r0, #0
+ mov r4, #0
+ add r5, r6, #0
+_02255604:
+ ldr r0, [r6, #0x5c]
+ ldr r1, [r5, #0x60]
+ bl MOD20_02253F14
+ add r4, r4, #1
+ add r5, r5, #4
+ cmp r4, #9
+ blo _02255604
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD22_022555FC
+
+ .section .data
+ ; 0x02255618
+ .incbin "baserom.nds", 0x2869D8, 0x128
diff --git a/arm9/modules/23/asm/module_23.s b/arm9/modules/23/asm/module_23.s
new file mode 100644
index 00000000..6688578e
--- /dev/null
+++ b/arm9/modules/23/asm/module_23.s
@@ -0,0 +1,2794 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD23_02254840
+MOD23_02254840: ; 0x02254840
+ ldr r3, _02254848 ; =MOD20_02252978
+ ldr r0, _0225484C ; =MOD23_02254854
+ ldr r1, _02254850 ; =MOD23_022549A4
+ bx r3
+ .align 2, 0
+_02254848: .word MOD20_02252978
+_0225484C: .word MOD23_02254854
+_02254850: .word MOD23_022549A4
+ thumb_func_end MOD23_02254840
+
+ thumb_func_start MOD23_02254854
+MOD23_02254854: ; 0x02254854
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r0, #8
+ mov r1, #0x28
+ add r7, r2, #0
+ str r3, [sp]
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02254888
+ ldr r1, [sp]
+ add r2, r7, #0
+ bl MOD23_02254890
+ cmp r0, #0
+ beq _02254888
+ ldr r0, _0225488C ; =MOD23_0225494C
+ str r6, [r4, #0x10]
+ add r1, r4, #0
+ mov r2, #1
+ bl FUN_0200CA44
+ str r4, [r5]
+ mov r0, #1
+ pop {r3, r4, r5, r6, r7, pc}
+_02254888:
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_0225488C: .word MOD23_0225494C
+ thumb_func_end MOD23_02254854
+
+ thumb_func_start MOD23_02254890
+MOD23_02254890: ; 0x02254890
+ push {r3, r4, lr}
+ sub sp, #4
+ add r4, r0, #0
+ add r1, r4, #0
+ add r0, #0x14
+ add r1, #0x18
+ bl MOD23_02254FFC
+ cmp r0, #0
+ beq _0225490A
+ mov r0, #0
+ strb r0, [r4]
+ strb r0, [r4, #1]
+ strb r0, [r4, #3]
+ strb r0, [r4, #2]
+ strb r0, [r4, #4]
+ mov r0, #0x11
+ strh r0, [r4, #6]
+ sub r0, #0x12
+ str r0, [r4, #8]
+ add r0, r4, #0
+ add r0, #0x1c
+ mov r1, #0xa
+ bl MOD23_0225551C
+ add r0, r4, #0
+ add r0, #0x20
+ mov r1, #0xa
+ bl MOD23_0225551C
+ add r0, r4, #0
+ add r0, #0x24
+ mov r1, #0xa
+ bl MOD23_0225551C
+ ldr r0, [r4, #0x1c]
+ cmp r0, #0
+ beq _022548E8
+ ldr r0, [r4, #0x20]
+ cmp r0, #0
+ beq _022548E8
+ ldr r0, [r4, #0x24]
+ cmp r0, #0
+ bne _022548EE
+_022548E8:
+ add sp, #4
+ mov r0, #0
+ pop {r3, r4, pc}
+_022548EE:
+ mov r0, #8
+ str r0, [sp]
+ ldr r0, _02254910 ; =0x02255CD8
+ ldr r2, _02254914 ; =MOD23_022549C4
+ mov r1, #0x11
+ add r3, r4, #0
+ bl MOD20_02254130
+ str r0, [r4, #0xc]
+ cmp r0, #0
+ bne _0225490A
+ add sp, #4
+ mov r0, #0
+ pop {r3, r4, pc}
+_0225490A:
+ mov r0, #1
+ add sp, #4
+ pop {r3, r4, pc}
+ .align 2, 0
+_02254910: .word 0x02255CD8
+_02254914: .word MOD23_022549C4
+ thumb_func_end MOD23_02254890
+
+ thumb_func_start MOD23_02254918
+MOD23_02254918: ; 0x02254918
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x1c]
+ cmp r0, #0
+ beq _02254926
+ bl MOD23_02255540
+_02254926:
+ ldr r0, [r4, #0x20]
+ cmp r0, #0
+ beq _02254930
+ bl MOD23_02255540
+_02254930:
+ ldr r0, [r4, #0x24]
+ cmp r0, #0
+ beq _0225493A
+ bl MOD23_02255540
+_0225493A:
+ ldr r0, [r4, #0xc]
+ cmp r0, #0
+ beq _02254944
+ bl MOD20_02254198
+_02254944:
+ ldr r0, [r4, #0x14]
+ bl MOD23_0225502C
+ pop {r4, pc}
+ thumb_func_end MOD23_02254918
+
+ thumb_func_start MOD23_0225494C
+MOD23_0225494C: ; 0x0225494C
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ ldrb r0, [r4, #3]
+ cmp r0, #0
+ beq _02254964
+ add r0, r4, #0
+ mov r1, #6
+ bl MOD23_022549AC
+ mov r0, #0
+ strb r0, [r4, #3]
+_02254964:
+ ldrb r0, [r4]
+ cmp r0, #7
+ bhs _0225499E
+ mov r0, #0x11
+ strh r0, [r4, #6]
+ ldr r0, [r4, #0x10]
+ ldr r1, [r4, #0xc]
+ bl MOD20_02252C14
+ ldrb r1, [r4]
+ add r0, r4, #0
+ lsl r2, r1, #2
+ ldr r1, _022549A0 ; =0x02255CBC
+ ldr r1, [r1, r2]
+ blx r1
+ cmp r0, #0
+ beq _0225499E
+ add r0, r4, #0
+ bl MOD23_02254918
+ add r0, r4, #0
+ bl FUN_02016A18
+ add r0, r5, #0
+ bl FUN_0200CAB4
+ ldr r0, [r4, #0x10]
+ bl MOD20_022529A0
+_0225499E:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_022549A0: .word 0x02255CBC
+ thumb_func_end MOD23_0225494C
+
+ thumb_func_start MOD23_022549A4
+MOD23_022549A4: ; 0x022549A4
+ mov r1, #1
+ strb r1, [r0, #3]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD23_022549A4
+
+ thumb_func_start MOD23_022549AC
+MOD23_022549AC: ; 0x022549AC
+ ldrb r2, [r0, #3]
+ cmp r2, #0
+ bne _022549B4
+ b _022549B6
+_022549B4:
+ mov r1, #6
+_022549B6:
+ strb r1, [r0]
+ ldrb r1, [r0]
+ strb r1, [r0, #2]
+ mov r1, #0
+ strb r1, [r0, #1]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD23_022549AC
+
+ thumb_func_start MOD23_022549C4
+MOD23_022549C4: ; 0x022549C4
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ add r4, r3, #0
+ cmp r2, #0
+ beq _022549D6
+ cmp r2, #1
+ beq _022549E2
+ b _022549EC
+_022549D6:
+ strh r5, [r4, #0x18]
+ ldr r0, [r4, #0x14]
+ mov r1, #2
+ bl MOD23_02255038
+ b _022549EC
+_022549E2:
+ strh r5, [r4, #0x18]
+ ldr r0, [r4, #0x14]
+ mov r1, #1
+ bl MOD23_02255038
+_022549EC:
+ cmp r6, #3
+ bne _022549F2
+ strh r5, [r4, #6]
+_022549F2:
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD23_022549C4
+
+ thumb_func_start MOD23_022549F4
+MOD23_022549F4: ; 0x022549F4
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _02254A04
+ cmp r0, #1
+ beq _02254A14
+ b _02254A2E
+_02254A04:
+ ldr r0, [r4, #0x14]
+ mov r1, #0
+ bl MOD23_02255038
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254A2E
+_02254A14:
+ ldr r0, [r4, #0x14]
+ mov r1, #0
+ bl MOD23_0225505C
+ cmp r0, #0
+ beq _02254A2E
+ ldr r0, [r4, #0x10]
+ bl MOD20_0225298C
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD23_022549AC
+_02254A2E:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD23_022549F4
+
+ thumb_func_start MOD23_02254A34
+MOD23_02254A34: ; 0x02254A34
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #1]
+ cmp r1, #0
+ beq _02254A44
+ cmp r1, #1
+ beq _02254AE8
+ b _02254B08
+_02254A44:
+ mov r1, #0
+ mvn r1, r1
+ str r1, [r4, #8]
+ ldrh r1, [r4, #6]
+ add r2, r1, #0
+ sub r2, #0xa
+ cmp r2, #7
+ bhi _02254A9E
+ add r2, r2, r2
+ add r2, pc
+ ldrh r2, [r2, #6]
+ lsl r2, r2, #0x10
+ asr r2, r2, #0x10
+ add pc, r2
+_02254A60: ; jump table
+ .short _02254A7A - _02254A60 - 2 ; case 0
+ .short _02254A80 - _02254A60 - 2 ; case 1
+ .short _02254A80 - _02254A60 - 2 ; case 2
+ .short _02254A80 - _02254A60 - 2 ; case 3
+ .short _02254A80 - _02254A60 - 2 ; case 4
+ .short _02254A90 - _02254A60 - 2 ; case 5
+ .short _02254A70 - _02254A60 - 2 ; case 6
+ .short _02254AC0 - _02254A60 - 2 ; case 7
+_02254A70:
+ bl MOD23_02254EE8
+ mov r0, #4
+ str r0, [r4, #8]
+ b _02254AC0
+_02254A7A:
+ mov r0, #1
+ strb r0, [r4, #4]
+ b _02254AC0
+_02254A80:
+ strh r1, [r4, #0x1a]
+ mov r0, #0
+ strb r0, [r4, #4]
+ mov r0, #8
+ str r0, [r4, #8]
+ mov r0, #2
+ strb r0, [r4, #2]
+ b _02254AC0
+_02254A90:
+ ldr r1, [r4, #0x1c]
+ bl MOD23_02254F94
+ ldr r0, [r4, #0x1c]
+ bl MOD23_02255548
+ b _02254AC0
+_02254A9E:
+ ldrb r0, [r4, #4]
+ cmp r0, #0
+ ldr r0, [r4, #0x1c]
+ beq _02254AB4
+ bl MOD23_02255838
+ cmp r0, #0
+ beq _02254AC0
+ mov r0, #3
+ str r0, [r4, #8]
+ b _02254AC0
+_02254AB4:
+ bl MOD23_022557FC
+ cmp r0, #0
+ beq _02254AC0
+ mov r0, #3
+ str r0, [r4, #8]
+_02254AC0:
+ mov r0, #0
+ ldr r1, [r4, #8]
+ mvn r0, r0
+ cmp r1, r0
+ beq _02254AD8
+ ldr r0, [r4, #0x14]
+ bl MOD23_02255038
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254B08
+_02254AD8:
+ ldrb r1, [r4, #2]
+ ldrb r0, [r4]
+ cmp r1, r0
+ beq _02254B08
+ add r0, r4, #0
+ bl MOD23_022549AC
+ b _02254B08
+_02254AE8:
+ ldr r0, [r4, #0x14]
+ ldr r1, [r4, #8]
+ bl MOD23_0225505C
+ cmp r0, #0
+ beq _02254B08
+ ldrb r1, [r4, #2]
+ ldrb r0, [r4]
+ cmp r1, r0
+ beq _02254B04
+ add r0, r4, #0
+ bl MOD23_022549AC
+ b _02254B08
+_02254B04:
+ mov r0, #0
+ strb r0, [r4, #1]
+_02254B08:
+ mov r0, #0
+ pop {r4, pc}
+ thumb_func_end MOD23_02254A34
+
+ thumb_func_start MOD23_02254B0C
+MOD23_02254B0C: ; 0x02254B0C
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #1]
+ cmp r1, #0
+ beq _02254B1C
+ cmp r1, #1
+ beq _02254BE4
+ b _02254C04
+_02254B1C:
+ mov r1, #0
+ mvn r1, r1
+ str r1, [r4, #8]
+ ldrh r1, [r4, #6]
+ add r2, r1, #0
+ sub r2, #0xa
+ cmp r2, #7
+ bhi _02254BA2
+ add r2, r2, r2
+ add r2, pc
+ ldrh r2, [r2, #6]
+ lsl r2, r2, #0x10
+ asr r2, r2, #0x10
+ add pc, r2
+_02254B38: ; jump table
+ .short _02254B56 - _02254B38 - 2 ; case 0
+ .short _02254B6A - _02254B38 - 2 ; case 1
+ .short _02254B6A - _02254B38 - 2 ; case 2
+ .short _02254B6A - _02254B38 - 2 ; case 3
+ .short _02254B6A - _02254B38 - 2 ; case 4
+ .short _02254B72 - _02254B38 - 2 ; case 5
+ .short _02254B48 - _02254B38 - 2 ; case 6
+ .short _02254BBC - _02254B38 - 2 ; case 7
+_02254B48:
+ bl MOD23_02254EE8
+ mov r0, #4
+ str r0, [r4, #8]
+ mov r0, #1
+ strb r0, [r4, #2]
+ b _02254BBC
+_02254B56:
+ ldr r0, [r4, #0x20]
+ bl MOD23_02255548
+ mov r0, #5
+ str r0, [r4, #8]
+ mov r0, #1
+ strb r0, [r4, #4]
+ mov r0, #3
+ strb r0, [r4, #2]
+ b _02254BBC
+_02254B6A:
+ strh r1, [r4, #0x1a]
+ mov r0, #8
+ str r0, [r4, #8]
+ b _02254BBC
+_02254B72:
+ ldr r0, [r4, #0x20]
+ ldr r1, [r4, #0x1c]
+ bl MOD23_02255558
+ ldrh r1, [r4, #0x1a]
+ add r0, r4, #0
+ bl MOD23_02254F08
+ cmp r0, #0
+ beq _02254B98
+ ldr r1, [r4, #0x24]
+ add r0, r4, #0
+ bl MOD23_02254F94
+ mov r0, #6
+ str r0, [r4, #8]
+ mov r0, #4
+ strb r0, [r4, #2]
+ b _02254BBC
+_02254B98:
+ mov r0, #9
+ str r0, [r4, #8]
+ mov r0, #5
+ strb r0, [r4, #2]
+ b _02254BBC
+_02254BA2:
+ ldr r0, [r4, #0x20]
+ bl MOD23_02255548
+ ldrh r1, [r4, #6]
+ ldr r0, [r4, #0x20]
+ bl MOD23_022557FC
+ cmp r0, #0
+ beq _02254BBC
+ mov r0, #5
+ str r0, [r4, #8]
+ mov r0, #3
+ strb r0, [r4, #2]
+_02254BBC:
+ mov r0, #0
+ ldr r1, [r4, #8]
+ mvn r0, r0
+ cmp r1, r0
+ beq _02254BD4
+ ldr r0, [r4, #0x14]
+ bl MOD23_02255038
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254C04
+_02254BD4:
+ ldrb r1, [r4, #2]
+ ldrb r0, [r4]
+ cmp r1, r0
+ beq _02254C04
+ add r0, r4, #0
+ bl MOD23_022549AC
+ b _02254C04
+_02254BE4:
+ ldr r0, [r4, #0x14]
+ ldr r1, [r4, #8]
+ bl MOD23_0225505C
+ cmp r0, #0
+ beq _02254C04
+ ldrb r1, [r4, #2]
+ ldrb r0, [r4]
+ cmp r1, r0
+ beq _02254C00
+ add r0, r4, #0
+ bl MOD23_022549AC
+ b _02254C04
+_02254C00:
+ mov r0, #0
+ strb r0, [r4, #1]
+_02254C04:
+ mov r0, #0
+ pop {r4, pc}
+ thumb_func_end MOD23_02254B0C
+
+ thumb_func_start MOD23_02254C08
+MOD23_02254C08: ; 0x02254C08
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #1]
+ cmp r1, #0
+ beq _02254C18
+ cmp r1, #1
+ beq _02254CFA
+ b _02254D1A
+_02254C18:
+ mov r1, #0
+ mvn r1, r1
+ str r1, [r4, #8]
+ ldrh r1, [r4, #6]
+ add r2, r1, #0
+ sub r2, #0xa
+ cmp r2, #7
+ bhi _02254CB0
+ add r2, r2, r2
+ add r2, pc
+ ldrh r2, [r2, #6]
+ lsl r2, r2, #0x10
+ asr r2, r2, #0x10
+ add pc, r2
+_02254C34: ; jump table
+ .short _02254C52 - _02254C34 - 2 ; case 0
+ .short _02254C58 - _02254C34 - 2 ; case 1
+ .short _02254C58 - _02254C34 - 2 ; case 2
+ .short _02254C58 - _02254C34 - 2 ; case 3
+ .short _02254C58 - _02254C34 - 2 ; case 4
+ .short _02254C86 - _02254C34 - 2 ; case 5
+ .short _02254C44 - _02254C34 - 2 ; case 6
+ .short _02254CD2 - _02254C34 - 2 ; case 7
+_02254C44:
+ bl MOD23_02254EE8
+ mov r0, #4
+ str r0, [r4, #8]
+ mov r0, #1
+ strb r0, [r4, #2]
+ b _02254CD2
+_02254C52:
+ mov r0, #1
+ strb r0, [r4, #4]
+ b _02254CD2
+_02254C58:
+ ldrh r1, [r4, #0x1a]
+ bl MOD23_02254F08
+ cmp r0, #0
+ beq _02254C7C
+ ldrh r0, [r4, #6]
+ strh r0, [r4, #0x1a]
+ mov r0, #0
+ strb r0, [r4, #4]
+ ldr r0, [r4, #0x1c]
+ ldr r1, [r4, #0x24]
+ bl MOD23_02255558
+ mov r0, #7
+ str r0, [r4, #8]
+ mov r0, #2
+ strb r0, [r4, #2]
+ b _02254CD2
+_02254C7C:
+ mov r0, #9
+ str r0, [r4, #8]
+ mov r0, #5
+ strb r0, [r4, #2]
+ b _02254CD2
+_02254C86:
+ ldrh r1, [r4, #0x1a]
+ bl MOD23_02254F08
+ cmp r0, #0
+ beq _02254CA6
+ ldr r1, [r4, #0x24]
+ add r0, r4, #0
+ bl MOD23_02254F94
+ mov r0, #6
+ str r0, [r4, #8]
+ mov r0, #0
+ strb r0, [r4, #4]
+ mov r0, #4
+ strb r0, [r4, #2]
+ b _02254CD2
+_02254CA6:
+ mov r0, #9
+ str r0, [r4, #8]
+ mov r0, #5
+ strb r0, [r4, #2]
+ b _02254CD2
+_02254CB0:
+ ldrb r0, [r4, #4]
+ cmp r0, #0
+ ldr r0, [r4, #0x20]
+ beq _02254CC6
+ bl MOD23_02255838
+ cmp r0, #0
+ beq _02254CD2
+ mov r0, #5
+ str r0, [r4, #8]
+ b _02254CD2
+_02254CC6:
+ bl MOD23_022557FC
+ cmp r0, #0
+ beq _02254CD2
+ mov r0, #5
+ str r0, [r4, #8]
+_02254CD2:
+ mov r0, #0
+ ldr r1, [r4, #8]
+ mvn r0, r0
+ cmp r1, r0
+ beq _02254CEA
+ ldr r0, [r4, #0x14]
+ bl MOD23_02255038
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254D1A
+_02254CEA:
+ ldrb r1, [r4, #2]
+ ldrb r0, [r4]
+ cmp r1, r0
+ beq _02254D1A
+ add r0, r4, #0
+ bl MOD23_022549AC
+ b _02254D1A
+_02254CFA:
+ ldr r0, [r4, #0x14]
+ ldr r1, [r4, #8]
+ bl MOD23_0225505C
+ cmp r0, #0
+ beq _02254D1A
+ ldrb r1, [r4, #2]
+ ldrb r0, [r4]
+ cmp r1, r0
+ beq _02254D16
+ add r0, r4, #0
+ bl MOD23_022549AC
+ b _02254D1A
+_02254D16:
+ mov r0, #0
+ strb r0, [r4, #1]
+_02254D1A:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD23_02254C08
+
+ thumb_func_start MOD23_02254D20
+MOD23_02254D20: ; 0x02254D20
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #1]
+ cmp r1, #0
+ beq _02254D30
+ cmp r1, #1
+ beq _02254E04
+ b _02254E24
+_02254D30:
+ mov r1, #0
+ mvn r1, r1
+ str r1, [r4, #8]
+ ldrh r1, [r4, #6]
+ add r2, r1, #0
+ sub r2, #0xa
+ cmp r2, #7
+ bhi _02254DC2
+ add r2, r2, r2
+ add r2, pc
+ ldrh r2, [r2, #6]
+ lsl r2, r2, #0x10
+ asr r2, r2, #0x10
+ add pc, r2
+_02254D4C: ; jump table
+ .short _02254D6A - _02254D4C - 2 ; case 0
+ .short _02254D7A - _02254D4C - 2 ; case 1
+ .short _02254D7A - _02254D4C - 2 ; case 2
+ .short _02254D7A - _02254D4C - 2 ; case 3
+ .short _02254D7A - _02254D4C - 2 ; case 4
+ .short _02254D92 - _02254D4C - 2 ; case 5
+ .short _02254D5C - _02254D4C - 2 ; case 6
+ .short _02254DDC - _02254D4C - 2 ; case 7
+_02254D5C:
+ bl MOD23_02254EE8
+ mov r0, #4
+ str r0, [r4, #8]
+ mov r0, #1
+ strb r0, [r4, #2]
+ b _02254DDC
+_02254D6A:
+ bl MOD23_02254EE8
+ mov r0, #3
+ str r0, [r4, #8]
+ mov r0, #1
+ strb r0, [r4, #4]
+ strb r0, [r4, #2]
+ b _02254DDC
+_02254D7A:
+ strh r1, [r4, #0x1a]
+ mov r0, #8
+ str r0, [r4, #8]
+ mov r0, #0
+ strb r0, [r4, #4]
+ ldr r0, [r4, #0x1c]
+ ldr r1, [r4, #0x24]
+ bl MOD23_02255558
+ mov r0, #2
+ strb r0, [r4, #2]
+ b _02254DDC
+_02254D92:
+ ldr r0, [r4, #0x1c]
+ ldr r1, [r4, #0x24]
+ bl MOD23_02255558
+ ldrh r1, [r4, #0x1a]
+ add r0, r4, #0
+ bl MOD23_02254F08
+ cmp r0, #0
+ beq _02254DB8
+ ldr r1, [r4, #0x24]
+ add r0, r4, #0
+ bl MOD23_02254F94
+ mov r0, #6
+ str r0, [r4, #8]
+ mov r0, #0
+ strb r0, [r4, #4]
+ b _02254DDC
+_02254DB8:
+ mov r0, #9
+ str r0, [r4, #8]
+ mov r0, #5
+ strb r0, [r4, #2]
+ b _02254DDC
+_02254DC2:
+ ldr r0, [r4, #0x1c]
+ bl MOD23_02255548
+ ldrh r1, [r4, #6]
+ ldr r0, [r4, #0x1c]
+ bl MOD23_022557FC
+ cmp r0, #0
+ beq _02254DD8
+ mov r0, #3
+ str r0, [r4, #8]
+_02254DD8:
+ mov r0, #1
+ strb r0, [r4, #2]
+_02254DDC:
+ mov r0, #0
+ ldr r1, [r4, #8]
+ mvn r0, r0
+ cmp r1, r0
+ beq _02254DF4
+ ldr r0, [r4, #0x14]
+ bl MOD23_02255038
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254E24
+_02254DF4:
+ ldrb r1, [r4, #2]
+ ldrb r0, [r4]
+ cmp r1, r0
+ beq _02254E24
+ add r0, r4, #0
+ bl MOD23_022549AC
+ b _02254E24
+_02254E04:
+ ldr r0, [r4, #0x14]
+ ldr r1, [r4, #8]
+ bl MOD23_0225505C
+ cmp r0, #0
+ beq _02254E24
+ ldrb r1, [r4, #2]
+ ldrb r0, [r4]
+ cmp r1, r0
+ beq _02254E20
+ add r0, r4, #0
+ bl MOD23_022549AC
+ b _02254E24
+_02254E20:
+ mov r0, #0
+ strb r0, [r4, #1]
+_02254E24:
+ mov r0, #0
+ pop {r4, pc}
+ thumb_func_end MOD23_02254D20
+
+ thumb_func_start MOD23_02254E28
+MOD23_02254E28: ; 0x02254E28
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #1]
+ cmp r1, #0
+ beq _02254E38
+ cmp r1, #1
+ beq _02254EC2
+ b _02254EE2
+_02254E38:
+ mov r1, #0
+ mvn r1, r1
+ str r1, [r4, #8]
+ ldrh r1, [r4, #6]
+ sub r1, #0xa
+ cmp r1, #7
+ bhi _02254E80
+ add r1, r1, r1
+ add r1, pc
+ ldrh r1, [r1, #6]
+ lsl r1, r1, #0x10
+ asr r1, r1, #0x10
+ add pc, r1
+_02254E52: ; jump table
+ .short _02254E70 - _02254E52 - 2 ; case 0
+ .short _02254E9A - _02254E52 - 2 ; case 1
+ .short _02254E9A - _02254E52 - 2 ; case 2
+ .short _02254E9A - _02254E52 - 2 ; case 3
+ .short _02254E9A - _02254E52 - 2 ; case 4
+ .short _02254E9A - _02254E52 - 2 ; case 5
+ .short _02254E62 - _02254E52 - 2 ; case 6
+ .short _02254E9A - _02254E52 - 2 ; case 7
+_02254E62:
+ bl MOD23_02254EE8
+ mov r0, #3
+ str r0, [r4, #8]
+ mov r0, #1
+ strb r0, [r4, #2]
+ b _02254E9A
+_02254E70:
+ bl MOD23_02254EE8
+ mov r0, #3
+ str r0, [r4, #8]
+ mov r0, #1
+ strb r0, [r4, #4]
+ strb r0, [r4, #2]
+ b _02254E9A
+_02254E80:
+ add r0, r4, #0
+ bl MOD23_02254EE8
+ ldrh r1, [r4, #6]
+ ldr r0, [r4, #0x1c]
+ bl MOD23_022557FC
+ cmp r0, #0
+ beq _02254E96
+ mov r0, #3
+ str r0, [r4, #8]
+_02254E96:
+ mov r0, #1
+ strb r0, [r4, #2]
+_02254E9A:
+ mov r0, #0
+ ldr r1, [r4, #8]
+ mvn r0, r0
+ cmp r1, r0
+ beq _02254EB2
+ ldr r0, [r4, #0x14]
+ bl MOD23_02255038
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254EE2
+_02254EB2:
+ ldrb r1, [r4, #2]
+ ldrb r0, [r4]
+ cmp r1, r0
+ beq _02254EE2
+ add r0, r4, #0
+ bl MOD23_022549AC
+ b _02254EE2
+_02254EC2:
+ ldr r0, [r4, #0x14]
+ ldr r1, [r4, #8]
+ bl MOD23_0225505C
+ cmp r0, #0
+ beq _02254EE2
+ ldrb r1, [r4, #2]
+ ldrb r0, [r4]
+ cmp r1, r0
+ beq _02254EDE
+ add r0, r4, #0
+ bl MOD23_022549AC
+ b _02254EE2
+_02254EDE:
+ mov r0, #0
+ strb r0, [r4, #1]
+_02254EE2:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD23_02254E28
+
+ thumb_func_start MOD23_02254EE8
+MOD23_02254EE8: ; 0x02254EE8
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x1c]
+ bl MOD23_02255548
+ ldr r0, [r4, #0x20]
+ bl MOD23_02255548
+ ldr r0, [r4, #0x24]
+ bl MOD23_02255548
+ mov r0, #0x11
+ strh r0, [r4, #0x1a]
+ mov r0, #0
+ strb r0, [r4, #4]
+ pop {r4, pc}
+ thumb_func_end MOD23_02254EE8
+
+ thumb_func_start MOD23_02254F08
+MOD23_02254F08: ; 0x02254F08
+ push {r4, lr}
+ sub r1, #0xb
+ add r4, r0, #0
+ cmp r1, #3
+ bhi _02254F54
+ add r0, r1, r1
+ add r0, pc
+ ldrh r0, [r0, #6]
+ lsl r0, r0, #0x10
+ asr r0, r0, #0x10
+ add pc, r0
+_02254F1E: ; jump table
+ .short _02254F32 - _02254F1E - 2 ; case 0
+ .short _02254F26 - _02254F1E - 2 ; case 1
+ .short _02254F3E - _02254F1E - 2 ; case 2
+ .short _02254F4A - _02254F1E - 2 ; case 3
+_02254F26:
+ ldr r0, [r4, #0x1c]
+ ldr r1, [r4, #0x20]
+ ldr r2, [r4, #0x24]
+ bl MOD23_02255568
+ b _02254F54
+_02254F32:
+ ldr r0, [r4, #0x1c]
+ ldr r1, [r4, #0x20]
+ ldr r2, [r4, #0x24]
+ bl MOD23_022555F4
+ b _02254F54
+_02254F3E:
+ ldr r0, [r4, #0x1c]
+ ldr r1, [r4, #0x20]
+ ldr r2, [r4, #0x24]
+ bl MOD23_022556A8
+ b _02254F54
+_02254F4A:
+ ldr r0, [r4, #0x1c]
+ ldr r1, [r4, #0x20]
+ ldr r2, [r4, #0x24]
+ bl MOD23_022556D8
+_02254F54:
+ ldr r0, [r4, #0x24]
+ mov r1, #0xa
+ bl MOD23_022558C0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD23_02254F08
+
+ thumb_func_start MOD23_02254F60
+MOD23_02254F60: ; 0x02254F60
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _02254F70
+ cmp r0, #1
+ beq _02254F80
+ b _02254F8E
+_02254F70:
+ ldr r0, [r4, #0x14]
+ mov r1, #0xa
+ bl MOD23_02255038
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254F8E
+_02254F80:
+ ldr r0, [r4, #0x14]
+ bl MOD23_02255068
+ cmp r0, #0
+ beq _02254F8E
+ mov r0, #1
+ pop {r4, pc}
+_02254F8E:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD23_02254F60
+
+ thumb_func_start MOD23_02254F94
+MOD23_02254F94: ; 0x02254F94
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r0, r1, #0
+ bl MOD23_02255AE8
+ add r4, r0, #0
+ mov r2, #0
+ mov r0, #0
+ sub r0, r0, r4
+ sbc r2, r1
+ bge _02254FF4
+ mov r2, #0
+ ldr r0, _02254FF8 ; =0x000001ED
+ sub r0, r0, r4
+ sbc r2, r1
+ blt _02254FF4
+ ldr r0, [r5, #0x10]
+ bl MOD20_02252C40
+ bl FUN_02024DA0
+ add r5, r0, #0
+ bl FUN_02024CA4
+ cmp r0, #0
+ beq _02254FCE
+ lsl r0, r4, #0x10
+ lsr r4, r0, #0x10
+ b _02254FD8
+_02254FCE:
+ lsl r0, r4, #0x10
+ lsr r0, r0, #0x10
+ bl FUN_02069B60
+ add r4, r0, #0
+_02254FD8:
+ cmp r4, #0
+ beq _02254FF4
+ ldr r0, _02254FF8 ; =0x000001ED
+ cmp r4, r0
+ bhi _02254FF4
+ add r0, r5, #0
+ add r1, r4, #0
+ bl FUN_020245F0
+ cmp r0, #0
+ beq _02254FF4
+ add r0, r4, #0
+ bl MOD20_02252B48
+_02254FF4:
+ pop {r3, r4, r5, pc}
+ nop
+_02254FF8: .word 0x000001ED
+ thumb_func_end MOD23_02254F94
+
+ thumb_func_start MOD23_02254FFC
+MOD23_02254FFC: ; 0x02254FFC
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r1, #0
+ add r5, r0, #0
+ ldr r1, _02255028 ; =0x0000048C
+ mov r0, #8
+ add r7, r2, #0
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02255022
+ str r6, [r4]
+ str r7, [r4, #4]
+ add r0, #8
+ mov r1, #8
+ bl MOD20_022536F4
+ str r4, [r5]
+ mov r0, #1
+ pop {r3, r4, r5, r6, r7, pc}
+_02255022:
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_02255028: .word 0x0000048C
+ thumb_func_end MOD23_02254FFC
+
+ thumb_func_start MOD23_0225502C
+MOD23_0225502C: ; 0x0225502C
+ push {r3, lr}
+ cmp r0, #0
+ beq _02255036
+ bl FUN_02016A18
+_02255036:
+ pop {r3, pc}
+ thumb_func_end MOD23_0225502C
+
+ thumb_func_start MOD23_02255038
+MOD23_02255038: ; 0x02255038
+ 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, _02255058 ; =0x02256040
+ ldr r3, [r2]
+ bl MOD20_022537E0
+ add sp, #0xc
+ pop {pc}
+ nop
+_02255058: .word 0x02256040
+ thumb_func_end MOD23_02255038
+
+ thumb_func_start MOD23_0225505C
+MOD23_0225505C: ; 0x0225505C
+ ldr r3, _02255064 ; =0x02253795
+ add r0, #8
+ bx r3
+ nop
+_02255064: .word 0x02253795
+ thumb_func_end MOD23_0225505C
+
+ thumb_func_start MOD23_02255068
+MOD23_02255068: ; 0x02255068
+ ldr r3, _02255070 ; =0x022537B9
+ add r0, #8
+ bx r3
+ nop
+_02255070: .word 0x022537B9
+ thumb_func_end MOD23_02255068
+
+ thumb_func_start MOD23_02255074
+MOD23_02255074: ; 0x02255074
+ 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 MOD23_02255074
+
+ thumb_func_start MOD23_02255088
+MOD23_02255088: ; 0x02255088
+ push {r4, r5, lr}
+ sub sp, #0x14
+ add r4, r1, #0
+ add r0, r4, #0
+ bl MOD20_022538A4
+ add r0, r4, #0
+ bl MOD20_022538A0
+ add r5, r0, #0
+ ldr r0, [r5, #4]
+ ldr r2, _02255118 ; =0x02255D1C
+ 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, #0x10
+ mov r3, #6
+ bl FUN_0200687C
+ 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, #0x11
+ mov r3, #6
+ bl FUN_020068C8
+ add r0, r5, #0
+ bl MOD23_02255124
+ mov r0, #0
+ add r1, r0, #0
+ bl MOD20_02252D7C
+ ldr r0, [r5, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ ldr r1, _0225511C ; =0x04001000
+ ldr r0, _02255120 ; =0xFFFFE0FF
+ ldr r3, [r1]
+ ldr r2, [r1]
+ str r3, [sp, #0x10]
+ 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 MOD23_02255074
+ add sp, #0x14
+ pop {r4, r5, pc}
+ nop
+_02255118: .word 0x02255D1C
+_0225511C: .word 0x04001000
+_02255120: .word 0xFFFFE0FF
+ thumb_func_end MOD23_02255088
+
+ thumb_func_start MOD23_02255124
+MOD23_02255124: ; 0x02255124
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #8
+ add r6, r0, #0
+ ldr r0, [r6, #4]
+ mov r1, #6
+ bl FUN_0201886C
+ mov ip, r0
+ mov r0, #0
+ ldr r3, _022551A0 ; =0x02255FB8
+ str r0, [sp, #4]
+_0225513A:
+ ldrb r7, [r3, #1]
+ ldrb r0, [r3, #3]
+ mov r2, #0
+ add r0, r7, r0
+ cmp r7, r0
+ bhs _0225518C
+ lsl r0, r7, #5
+ str r0, [sp]
+_0225514A:
+ ldrb r1, [r3]
+ ldrb r0, [r3, #2]
+ add r0, r1, r0
+ cmp r1, r0
+ bhs _0225517A
+ ldr r0, [sp]
+ lsl r4, r0, #1
+ mov r0, ip
+ add r4, r0, r4
+ lsl r0, r1, #1
+ add r4, r4, r0
+_02255160:
+ lsl r5, r2, #1
+ ldrh r0, [r4]
+ add r5, r6, r5
+ add r5, #0x4c
+ strh r0, [r5]
+ ldrb r5, [r3]
+ ldrb r0, [r3, #2]
+ add r1, r1, #1
+ add r2, r2, #1
+ add r0, r5, r0
+ add r4, r4, #2
+ cmp r1, r0
+ blo _02255160
+_0225517A:
+ ldr r0, [sp]
+ ldrb r1, [r3, #1]
+ add r0, #0x20
+ str r0, [sp]
+ ldrb r0, [r3, #3]
+ add r7, r7, #1
+ add r0, r1, r0
+ cmp r7, r0
+ blo _0225514A
+_0225518C:
+ ldr r0, [sp, #4]
+ add r3, r3, #4
+ add r0, r0, #1
+ add r6, #0x40
+ str r0, [sp, #4]
+ cmp r0, #0x11
+ blo _0225513A
+ add sp, #8
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_022551A0: .word 0x02255FB8
+ thumb_func_end MOD23_02255124
+
+ thumb_func_start MOD23_022551A4
+MOD23_022551A4: ; 0x022551A4
+ push {r3, r4, r5, r6, lr}
+ sub sp, #0xc
+ add r6, r1, #0
+ add r0, r6, #0
+ bl MOD20_022538A4
+ add r5, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ ldrh r5, [r5]
+ ldr r0, _022551F8 ; =0x00000663
+ bl MOD20_02252B28
+ lsl r3, r5, #2
+ ldr r0, _022551FC ; =0x02255FB9
+ ldr r2, _02255200 ; =0x02255FFC
+ ldrb r0, [r0, r3]
+ ldr r5, _02255204 ; =0x02255FB8
+ ldr r2, [r2, r3]
+ str r0, [sp]
+ ldr r0, _02255208 ; =0x02255FBA
+ mov r1, #6
+ ldrb r0, [r0, r3]
+ str r0, [sp, #4]
+ ldr r0, _0225520C ; =0x02255FBB
+ ldrb r0, [r0, r3]
+ ldrb r3, [r5, r3]
+ str r0, [sp, #8]
+ ldr r0, [r4, #4]
+ bl FUN_02018148
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r6, #0
+ bl MOD23_02255074
+ add sp, #0xc
+ pop {r3, r4, r5, r6, pc}
+ .align 2, 0
+_022551F8: .word 0x00000663
+_022551FC: .word 0x02255FB9
+_02255200: .word 0x02255FFC
+_02255204: .word 0x02255FB8
+_02255208: .word 0x02255FBA
+_0225520C: .word 0x02255FBB
+ thumb_func_end MOD23_022551A4
+
+ thumb_func_start MOD23_02255210
+MOD23_02255210: ; 0x02255210
+ push {r3, r4, r5, r6, lr}
+ sub sp, #0xc
+ add r6, r1, #0
+ add r0, r6, #0
+ bl MOD20_022538A4
+ ldrh r5, [r0]
+ add r0, r6, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ lsl r3, r5, #2
+ ldr r0, _02255260 ; =0x02255FB9
+ add r2, r4, #0
+ ldrb r0, [r0, r3]
+ add r2, #0x4c
+ lsl r5, r5, #6
+ str r0, [sp]
+ ldr r0, _02255264 ; =0x02255FBA
+ add r2, r2, r5
+ ldrb r0, [r0, r3]
+ ldr r5, _02255268 ; =0x02255FB8
+ mov r1, #6
+ str r0, [sp, #4]
+ ldr r0, _0225526C ; =0x02255FBB
+ ldrb r0, [r0, r3]
+ ldrb r3, [r5, r3]
+ str r0, [sp, #8]
+ ldr r0, [r4, #4]
+ bl FUN_02018148
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r6, #0
+ bl MOD23_02255074
+ add sp, #0xc
+ pop {r3, r4, r5, r6, pc}
+ .align 2, 0
+_02255260: .word 0x02255FB9
+_02255264: .word 0x02255FBA
+_02255268: .word 0x02255FB8
+_0225526C: .word 0x02255FBB
+ thumb_func_end MOD23_02255210
+
+ thumb_func_start MOD23_02255270
+MOD23_02255270: ; 0x02255270
+ push {r4, r5, r6, lr}
+ add r6, r1, #0
+ add r0, r6, #0
+ bl MOD20_022538A4
+ add r5, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r1, r4, #0
+ ldr r0, [r5, #4]
+ add r1, #0x30
+ bl MOD23_022558EC
+ add r1, r4, #0
+ ldr r0, [r4, #4]
+ add r1, #0x30
+ bl MOD23_0225548C
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r6, #0
+ bl MOD23_02255074
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD23_02255270
+
+ thumb_func_start MOD23_022552A8
+MOD23_022552A8: ; 0x022552A8
+ push {r4, r5, r6, lr}
+ add r6, r1, #0
+ add r0, r6, #0
+ bl MOD20_022538A4
+ add r5, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r1, r4, #0
+ ldr r0, [r5, #4]
+ add r1, #0x30
+ bl MOD23_022558EC
+ add r1, r4, #0
+ ldr r0, [r4, #4]
+ add r1, #0x30
+ bl MOD23_0225548C
+ ldr r0, [r4, #4]
+ bl MOD23_0225544C
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r6, #0
+ bl MOD23_02255074
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD23_022552A8
+
+ thumb_func_start MOD23_022552E8
+MOD23_022552E8: ; 0x022552E8
+ push {r4, r5, r6, lr}
+ add r6, r1, #0
+ add r0, r6, #0
+ bl MOD20_022538A4
+ add r5, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r1, r4, #0
+ ldr r0, [r5, #8]
+ add r1, #0x30
+ bl MOD23_022558EC
+ add r1, r4, #0
+ ldr r0, [r4, #4]
+ add r1, #0x30
+ bl MOD23_0225548C
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r6, #0
+ bl MOD23_02255074
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD23_022552E8
+
+ thumb_func_start MOD23_02255320
+MOD23_02255320: ; 0x02255320
+ push {r4, r5, r6, lr}
+ add r6, r1, #0
+ add r0, r6, #0
+ bl MOD20_022538A4
+ add r5, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r1, r4, #0
+ ldr r0, [r5, #0xc]
+ add r1, #0x30
+ bl MOD23_022558EC
+ add r1, r4, #0
+ ldr r0, [r4, #4]
+ add r1, #0x30
+ bl MOD23_0225548C
+ ldr r0, [r4, #4]
+ bl MOD23_0225544C
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r6, #0
+ bl MOD23_02255074
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD23_02255320
+
+ thumb_func_start MOD23_02255360
+MOD23_02255360: ; 0x02255360
+ push {r4, r5, r6, lr}
+ add r6, r1, #0
+ add r0, r6, #0
+ bl MOD20_022538A4
+ add r5, r0, #0
+ add r0, r6, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r1, r4, #0
+ ldr r0, [r5, #0xc]
+ add r1, #0x30
+ bl MOD23_022558EC
+ add r1, r4, #0
+ ldr r0, [r4, #4]
+ add r1, #0x30
+ bl MOD23_0225548C
+ ldr r0, [r4, #4]
+ add r1, r5, #0
+ bl MOD23_02255410
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r6, #0
+ bl MOD23_02255074
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD23_02255360
+
+ thumb_func_start MOD23_022553A0
+MOD23_022553A0: ; 0x022553A0
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ mov r2, #0
+ add r1, r4, #0
+ mov r0, #0xc
+_022553B2:
+ add r2, r2, #1
+ strh r0, [r1, #0x30]
+ add r1, r1, #2
+ cmp r2, #0xa
+ blo _022553B2
+ lsl r0, r2, #1
+ mov r1, #0xd
+ add r0, r4, r0
+ strh r1, [r0, #0x30]
+ add r1, r4, #0
+ ldr r0, [r4, #4]
+ add r1, #0x30
+ bl MOD23_0225548C
+ ldr r0, [r4, #4]
+ bl MOD23_0225544C
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r5, #0
+ bl MOD23_02255074
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD23_022553A0
+
+ thumb_func_start MOD23_022553E4
+MOD23_022553E4: ; 0x022553E4
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ add r0, r5, #0
+ bl MOD20_022538A4
+ add r1, r0, #0
+ ldr r0, [r4, #4]
+ bl MOD23_02255410
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r5, #0
+ bl MOD23_02255074
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD23_022553E4
+
+ thumb_func_start MOD23_02255410
+MOD23_02255410: ; 0x02255410
+ push {r4, r5, lr}
+ sub sp, #0xc
+ add r5, r1, #0
+ mov r1, #6
+ add r4, r0, #0
+ bl FUN_0201886C
+ ldrh r1, [r5, #2]
+ cmp r1, #0x11
+ bne _0225542E
+ add r0, r4, #0
+ bl MOD23_0225544C
+ add sp, #0xc
+ pop {r4, r5, pc}
+_0225542E:
+ sub r1, #0xb
+ lsl r1, r1, #1
+ add r1, #0xf0
+ str r1, [sp]
+ mov r1, #0x28
+ str r1, [sp, #4]
+ mov r1, #0
+ str r1, [sp, #8]
+ mov r1, #3
+ add r2, r1, #0
+ mov r3, #0x20
+ bl MOD20_022538BC
+ add sp, #0xc
+ pop {r4, r5, pc}
+ thumb_func_end MOD23_02255410
+
+ thumb_func_start MOD23_0225544C
+MOD23_0225544C: ; 0x0225544C
+ push {lr}
+ sub sp, #0xc
+ mov r1, #6
+ bl FUN_0201886C
+ mov r1, #0x29
+ str r1, [sp]
+ mov r1, #0x28
+ str r1, [sp, #4]
+ mov r1, #0
+ str r1, [sp, #8]
+ mov r1, #3
+ add r2, r1, #0
+ mov r3, #0x20
+ bl MOD20_022538BC
+ add sp, #0xc
+ pop {pc}
+ thumb_func_end MOD23_0225544C
+
+ thumb_func_start MOD23_02255470
+MOD23_02255470: ; 0x02255470
+ 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 MOD23_02255074
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD23_02255470
+
+ thumb_func_start MOD23_0225548C
+MOD23_0225548C: ; 0x0225548C
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x14
+ add r6, r1, #0
+ mov r1, #6
+ bl FUN_0201886C
+ add r7, r0, #0
+ ldrh r0, [r6]
+ mov r1, #0
+ cmp r0, #0xd
+ beq _022554AE
+ add r2, r6, #0
+_022554A4:
+ add r2, r2, #2
+ ldrh r0, [r2]
+ add r1, r1, #1
+ cmp r0, #0xd
+ bne _022554A4
+_022554AE:
+ mov r0, #0xa
+ mov r4, #0
+ sub r0, r0, r1
+ str r0, [sp, #0xc]
+ beq _022554DC
+ mov r5, #5
+_022554BA:
+ mov r0, #0x2b
+ str r0, [sp]
+ mov r0, #0x28
+ str r0, [sp, #4]
+ mov r0, #0
+ str r0, [sp, #8]
+ add r0, r7, #0
+ add r1, r5, #0
+ mov r2, #3
+ mov r3, #0x20
+ bl MOD20_022538BC
+ ldr r0, [sp, #0xc]
+ add r4, r4, #1
+ add r5, r5, #2
+ cmp r4, r0
+ blo _022554BA
+_022554DC:
+ mov r0, #0
+ str r0, [sp, #0x10]
+ cmp r4, #0xa
+ bhs _02255516
+ bhs _02255516
+ lsl r0, r4, #1
+ add r5, r0, #5
+_022554EA:
+ ldrh r0, [r6]
+ add r1, r5, #0
+ mov r2, #3
+ lsl r0, r0, #1
+ add r0, #0xa5
+ str r0, [sp]
+ mov r0, #0x28
+ str r0, [sp, #4]
+ mov r0, #0
+ str r0, [sp, #8]
+ add r0, r7, #0
+ mov r3, #0x20
+ bl MOD20_022538BC
+ ldr r0, [sp, #0x10]
+ add r4, r4, #1
+ add r0, r0, #1
+ add r5, r5, #2
+ add r6, r6, #2
+ str r0, [sp, #0x10]
+ cmp r4, #0xa
+ blo _022554EA
+_02255516:
+ add sp, #0x14
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+ thumb_func_end MOD23_0225548C
+
+ thumb_func_start MOD23_0225551C
+MOD23_0225551C: ; 0x0225551C
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ mov r0, #8
+ mov r1, #0xc
+ bl FUN_02016998
+ str r0, [r5]
+ cmp r0, #0
+ beq _0225553C
+ strb r4, [r0, #0xa]
+ ldr r0, [r5]
+ bl MOD23_02255548
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+_0225553C:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD23_0225551C
+
+ thumb_func_start MOD23_02255540
+MOD23_02255540: ; 0x02255540
+ ldr r3, _02255544 ; =0x02016A19
+ bx r3
+ .align 2, 0
+_02255544: .word 0x02016A19
+ thumb_func_end MOD23_02255540
+
+ thumb_func_start MOD23_02255548
+MOD23_02255548: ; 0x02255548
+ mov r1, #0
+ str r1, [r0]
+ str r1, [r0, #4]
+ strb r1, [r0, #9]
+ strb r1, [r0, #8]
+ strb r1, [r0, #0xb]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD23_02255548
+
+ thumb_func_start MOD23_02255558
+MOD23_02255558: ; 0x02255558
+ add r2, r1, #0
+ add r3, r0, #0
+ ldmia r2!, {r0, r1}
+ stmia r3!, {r0, r1}
+ ldr r0, [r2]
+ str r0, [r3]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD23_02255558
+
+ thumb_func_start MOD23_02255568
+MOD23_02255568: ; 0x02255568
+ push {r4, r5, r6, lr}
+ sub sp, #0x30
+ add r5, r0, #0
+ add r3, r1, #0
+ ldrb r1, [r5, #9]
+ add r4, r2, #0
+ cmp r1, #0
+ bne _0225559A
+ ldrb r0, [r3, #9]
+ cmp r0, #1
+ bne _0225559A
+ ldmia r3!, {r0, r1}
+ add r6, sp, #0x24
+ add r4, r6, #0
+ stmia r6!, {r0, r1}
+ ldr r0, [r3]
+ add r1, r4, #0
+ str r0, [r6]
+ mov r0, #0
+ strb r0, [r4, #9]
+ add r0, r5, #0
+ bl MOD23_022555F4
+ add sp, #0x30
+ pop {r4, r5, r6, pc}
+_0225559A:
+ cmp r1, #1
+ bne _022555C2
+ ldrb r0, [r3, #9]
+ cmp r0, #0
+ bne _022555C2
+ ldmia r5!, {r0, r1}
+ add r6, sp, #0x18
+ add r2, r6, #0
+ stmia r6!, {r0, r1}
+ ldr r0, [r5]
+ add r1, r2, #0
+ str r0, [r6]
+ mov r0, #0
+ strb r0, [r2, #9]
+ add r0, r3, #0
+ add r2, r4, #0
+ bl MOD23_022555F4
+ add sp, #0x30
+ pop {r4, r5, r6, pc}
+_022555C2:
+ add r1, r3, #0
+ add r0, r5, #0
+ add r2, sp, #0xc
+ add r3, sp, #0
+ bl MOD23_02255C6C
+ ldr r2, [sp, #0xc]
+ ldr r1, [sp]
+ ldr r3, [sp, #0x10]
+ ldr r0, [sp, #4]
+ add r1, r2, r1
+ adc r3, r0
+ str r1, [r4]
+ str r3, [r4, #4]
+ add r0, sp, #0
+ ldrb r1, [r0, #0x14]
+ strb r1, [r4, #8]
+ ldrb r0, [r0, #0x15]
+ strb r0, [r4, #9]
+ add r0, r4, #0
+ bl MOD23_02255B7C
+ add sp, #0x30
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD23_02255568
+
+ thumb_func_start MOD23_022555F4
+MOD23_022555F4: ; 0x022555F4
+ push {r3, r4, r5, r6, lr}
+ sub sp, #0x24
+ add r5, r0, #0
+ add r4, r1, #0
+ ldrb r1, [r5, #9]
+ add r6, r2, #0
+ cmp r1, #0
+ bne _0225560A
+ ldrb r0, [r4, #9]
+ cmp r0, #1
+ beq _02255614
+_0225560A:
+ cmp r1, #1
+ bne _02255636
+ ldrb r0, [r4, #9]
+ cmp r0, #0
+ bne _02255636
+_02255614:
+ ldmia r4!, {r0, r1}
+ add r3, sp, #0x18
+ add r2, r3, #0
+ stmia r3!, {r0, r1}
+ ldr r0, [r4]
+ str r0, [r3]
+ ldrb r1, [r2, #9]
+ mov r0, #1
+ eor r0, r1
+ strb r0, [r2, #9]
+ add r1, r2, #0
+ add r0, r5, #0
+ add r2, r6, #0
+ bl MOD23_02255568
+ add sp, #0x24
+ pop {r3, r4, r5, r6, pc}
+_02255636:
+ add r0, r5, #0
+ add r1, r4, #0
+ bl MOD23_02255874
+ cmp r0, #0
+ beq _0225564C
+ add r0, r6, #0
+ bl MOD23_02255548
+ add sp, #0x24
+ pop {r3, r4, r5, r6, pc}
+_0225564C:
+ add r0, r5, #0
+ add r1, r4, #0
+ add r2, sp, #0xc
+ add r3, sp, #0
+ bl MOD23_02255C6C
+ ldr r3, [sp, #0xc]
+ ldr r2, [sp, #0x10]
+ ldr r0, [sp]
+ ldr r1, [sp, #4]
+ add r5, sp, #0xc
+ add r4, sp, #0
+ sub r0, r3, r0
+ sbc r2, r1
+ bhs _0225566E
+ mov r1, #1
+ b _02255670
+_0225566E:
+ mov r1, #0
+_02255670:
+ add r0, sp, #0
+ ldrb r0, [r0, #0x15]
+ eor r0, r1
+ beq _02255686
+ add r0, r5, #0
+ add r5, r4, #0
+ ldrb r1, [r5, #9]
+ add r4, r0, #0
+ mov r0, #1
+ eor r0, r1
+ b _02255688
+_02255686:
+ ldrb r0, [r5, #9]
+_02255688:
+ strb r0, [r6, #9]
+ ldr r2, [r5]
+ ldr r1, [r4]
+ ldr r3, [r5, #4]
+ ldr r0, [r4, #4]
+ sub r1, r2, r1
+ sbc r3, r0
+ str r1, [r6]
+ str r3, [r6, #4]
+ ldrb r0, [r5, #8]
+ strb r0, [r6, #8]
+ add r0, r6, #0
+ bl MOD23_02255B7C
+ add sp, #0x24
+ pop {r3, r4, r5, r6, pc}
+ thumb_func_end MOD23_022555F4
+
+ thumb_func_start MOD23_022556A8
+MOD23_022556A8: ; 0x022556A8
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ add r4, r2, #0
+ ldr r0, [r5]
+ ldr r1, [r5, #4]
+ ldr r2, [r6]
+ ldr r3, [r6, #4]
+ bl _ll_mul
+ str r0, [r4]
+ str r1, [r4, #4]
+ ldrb r1, [r5, #8]
+ ldrb r0, [r6, #8]
+ add r0, r1, r0
+ strb r0, [r4, #8]
+ ldrb r1, [r5, #9]
+ ldrb r0, [r6, #9]
+ eor r0, r1
+ strb r0, [r4, #9]
+ add r0, r4, #0
+ bl MOD23_02255B7C
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD23_022556A8
+
+ thumb_func_start MOD23_022556D8
+MOD23_022556D8: ; 0x022556D8
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x1c
+ add r5, r2, #0
+ add r2, r1, #0
+ add r3, r1, #0
+ ldr r6, [r3, #4]
+ mov r3, #0
+ ldr r2, [r2]
+ mov r4, #0
+ eor r3, r6
+ eor r2, r4
+ str r1, [sp]
+ orr r2, r3
+ bne _022556FC
+ mov r0, #1
+ add sp, #0x1c
+ strb r0, [r5, #0xb]
+ pop {r4, r5, r6, r7, pc}
+_022556FC:
+ add r2, sp, #0x10
+ add r3, sp, #4
+ bl MOD23_02255C6C
+ add r0, sp, #4
+ str r0, [sp]
+ ldr r4, [sp, #4]
+ ldr r3, [sp, #8]
+ ldr r2, [sp, #0x10]
+ ldr r1, [sp, #0x14]
+ ldr r0, _022557EC ; =0x04000280
+ mov r6, #2
+ strh r6, [r0]
+ add r6, r0, #0
+ add r6, #0x10
+ str r2, [r6]
+ str r1, [r6, #4]
+ add r1, r0, #0
+ add r1, #0x18
+ str r4, [r1]
+ str r3, [r1, #4]
+ lsr r1, r0, #0xb
+_02255728:
+ ldrh r2, [r0]
+ tst r2, r1
+ bne _02255728
+ ldr r0, _022557F0 ; =0x040002A0
+ ldr r1, [r0]
+ ldr r0, [r0, #4]
+ str r1, [r5]
+ str r0, [r5, #4]
+ mov r0, #0
+ strb r0, [r5, #8]
+ add r0, r5, #0
+ bl MOD23_02255B18
+ ldr r2, _022557EC ; =0x04000280
+ add r7, r0, #0
+ lsr r0, r2, #0xb
+_02255748:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _02255748
+ ldr r0, _022557F4 ; =0x040002A8
+ mov r1, #0
+ ldr r2, [r0, #4]
+ ldr r3, [r0]
+ mov r0, #0
+ eor r1, r2
+ eor r0, r3
+ orr r0, r1
+ beq _022557DC
+_02255760:
+ ldrb r0, [r5, #8]
+ add r1, r7, #1
+ add r1, r1, r0
+ ldrb r0, [r5, #0xa]
+ cmp r1, r0
+ bhs _022557DC
+ ldr r4, [sp, #4]
+ ldr r6, [sp, #8]
+ ldr r0, _022557EC ; =0x04000280
+ mov r1, #2
+ strh r1, [r0]
+ add r0, r3, #0
+ add r1, r2, #0
+ mov r2, #0xa
+ mov r3, #0
+ bl _ll_mul
+ ldr r2, _022557F8 ; =0x04000290
+ mov r3, #0
+ str r0, [r2]
+ str r1, [r2, #4]
+ add r2, #8
+ str r4, [r2]
+ str r6, [r2, #4]
+ ldr r0, [r5]
+ ldr r1, [r5, #4]
+ mov r2, #0xa
+ bl _ll_mul
+ str r0, [r5]
+ ldr r2, _022557EC ; =0x04000280
+ str r1, [r5, #4]
+ lsr r0, r2, #0xb
+_022557A2:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _022557A2
+ ldr r0, _022557F0 ; =0x040002A0
+ ldr r2, [r5]
+ ldr r1, [r0]
+ ldr r3, [r5, #4]
+ add r1, r2, r1
+ ldr r0, [r0, #4]
+ ldr r2, _022557EC ; =0x04000280
+ adc r3, r0
+ str r1, [r5]
+ str r3, [r5, #4]
+ ldrb r0, [r5, #8]
+ add r0, r0, #1
+ strb r0, [r5, #8]
+ lsr r0, r2, #0xb
+_022557C4:
+ ldrh r1, [r2]
+ tst r1, r0
+ bne _022557C4
+ ldr r0, _022557F4 ; =0x040002A8
+ mov r1, #0
+ ldr r2, [r0, #4]
+ ldr r3, [r0]
+ mov r0, #0
+ eor r1, r2
+ eor r0, r3
+ orr r0, r1
+ bne _02255760
+_022557DC:
+ add r0, sp, #0x10
+ ldrb r1, [r0, #9]
+ ldr r0, [sp]
+ ldrb r0, [r0, #9]
+ eor r0, r1
+ strb r0, [r5, #9]
+ add sp, #0x1c
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_022557EC: .word 0x04000280
+_022557F0: .word 0x040002A0
+_022557F4: .word 0x040002A8
+_022557F8: .word 0x04000290
+ thumb_func_end MOD23_022556D8
+
+ thumb_func_start MOD23_022557FC
+MOD23_022557FC: ; 0x022557FC
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ bl MOD23_02255B68
+ ldrb r1, [r5, #0xa]
+ cmp r0, r1
+ blo _02255810
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+_02255810:
+ ldrb r0, [r5, #8]
+ cmp r0, #0
+ bne _02255832
+ ldr r0, [r5]
+ ldr r1, [r5, #4]
+ mov r2, #0xa
+ mov r3, #0
+ bl _ll_mul
+ str r0, [r5]
+ str r1, [r5, #4]
+ ldr r2, [r5]
+ mov r0, #0
+ add r2, r2, r4
+ adc r1, r0
+ str r2, [r5]
+ str r1, [r5, #4]
+_02255832:
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD23_022557FC
+
+ thumb_func_start MOD23_02255838
+MOD23_02255838: ; 0x02255838
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ bl MOD23_02255B68
+ ldrb r1, [r5, #0xa]
+ cmp r0, r1
+ blo _0225584C
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+_0225584C:
+ ldr r0, [r5]
+ ldr r1, [r5, #4]
+ mov r2, #0xa
+ mov r3, #0
+ bl _ll_mul
+ str r0, [r5]
+ str r1, [r5, #4]
+ ldr r2, [r5]
+ mov r0, #0
+ add r2, r2, r4
+ adc r1, r0
+ str r2, [r5]
+ str r1, [r5, #4]
+ ldrb r0, [r5, #8]
+ add r0, r0, #1
+ strb r0, [r5, #8]
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD23_02255838
+
+ thumb_func_start MOD23_02255874
+MOD23_02255874: ; 0x02255874
+ push {r3, r4, r5, r6}
+ ldr r2, [r0, #4]
+ ldr r3, [r0]
+ ldr r4, [r1, #4]
+ add r5, r2, #0
+ eor r5, r4
+ ldr r6, [r1]
+ add r4, r3, #0
+ eor r4, r6
+ orr r4, r5
+ beq _02255890
+ mov r0, #0
+ pop {r3, r4, r5, r6}
+ bx lr
+_02255890:
+ ldrb r5, [r0, #8]
+ ldrb r4, [r1, #8]
+ cmp r5, r4
+ beq _0225589E
+ mov r0, #0
+ pop {r3, r4, r5, r6}
+ bx lr
+_0225589E:
+ ldrb r4, [r0, #9]
+ ldrb r0, [r1, #9]
+ cmp r4, r0
+ beq _022558B8
+ mov r1, #0
+ mov r0, #0
+ eor r1, r2
+ eor r0, r3
+ orr r0, r1
+ beq _022558B8
+ mov r0, #0
+ pop {r3, r4, r5, r6}
+ bx lr
+_022558B8:
+ mov r0, #1
+ pop {r3, r4, r5, r6}
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD23_02255874
+
+ thumb_func_start MOD23_022558C0
+MOD23_022558C0: ; 0x022558C0
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ ldrb r1, [r5, #0xb]
+ cmp r1, #0
+ beq _022558D0
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+_022558D0:
+ bl MOD23_02255B18
+ ldrb r1, [r5, #8]
+ cmp r1, #0
+ beq _022558DE
+ add r1, r1, #1
+ add r0, r0, r1
+_022558DE:
+ cmp r0, r4
+ bls _022558E6
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+_022558E6:
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+ thumb_func_end MOD23_022558C0
+
+ thumb_func_start MOD23_022558EC
+MOD23_022558EC: ; 0x022558EC
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x20
+ str r0, [sp]
+ ldrb r0, [r0, #0xb]
+ str r1, [sp, #0x10]
+ cmp r0, #0
+ beq _02255900
+ add sp, #0x20
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+_02255900:
+ ldr r0, [sp]
+ mov r1, #0
+ ldr r7, [r0, #4]
+ ldr r6, [r0]
+ mov r0, #0
+ eor r1, r7
+ eor r0, r6
+ orr r0, r1
+ bne _02255956
+ ldr r1, [sp, #0x10]
+ add r0, r1, #0
+ add r2, r0, #2
+ mov r0, #0
+ strh r0, [r1]
+ ldr r1, [sp]
+ str r2, [sp, #0x10]
+ ldrb r1, [r1, #8]
+ cmp r1, #0
+ beq _0225594A
+ add r1, r2, #2
+ str r1, [sp, #0x10]
+ mov r1, #0xa
+ strh r1, [r2]
+ ldr r1, [sp]
+ ldrb r1, [r1, #8]
+ cmp r1, #0
+ ble _0225594A
+ add r2, r0, #0
+_02255938:
+ ldr r1, [sp, #0x10]
+ add r0, r0, #1
+ strh r2, [r1]
+ add r1, r1, #2
+ str r1, [sp, #0x10]
+ ldr r1, [sp]
+ ldrb r1, [r1, #8]
+ cmp r0, r1
+ blt _02255938
+_0225594A:
+ ldr r0, [sp, #0x10]
+ mov r1, #0xd
+ strh r1, [r0]
+ add sp, #0x20
+ mov r0, #1
+ pop {r3, r4, r5, r6, r7, pc}
+_02255956:
+ mov r2, #0xa
+ mov r0, #1
+ mov r1, #0
+ sub r2, r6, r2
+ mov ip, r7
+ mov r2, ip
+ sbc r2, r1
+ blo _0225597A
+ ldr r2, _02255ACC ; =0x022560D8
+_02255968:
+ add r2, #8
+ ldr r3, [r2]
+ add r0, r0, #1
+ ldr r1, [r2, #4]
+ sub r3, r6, r3
+ mov ip, r7
+ mov r3, ip
+ sbc r3, r1
+ bhs _02255968
+_0225597A:
+ ldr r1, [sp]
+ str r0, [sp, #8]
+ ldrb r1, [r1, #8]
+ sub r3, r1, r0
+ bmi _0225598C
+ add r1, r3, #2
+ add r1, r0, r1
+ str r1, [sp, #8]
+ b _02255994
+_0225598C:
+ cmp r1, #0
+ beq _02255994
+ add r1, r0, #1
+ str r1, [sp, #8]
+_02255994:
+ ldr r1, [sp]
+ ldr r4, [sp]
+ ldrb r2, [r1, #9]
+ ldr r1, [sp, #8]
+ ldrb r4, [r4, #0xa]
+ add r1, r1, r2
+ cmp r1, r4
+ bls _022559AA
+ add sp, #0x20
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+_022559AA:
+ cmp r2, #1
+ bne _022559B8
+ ldr r1, [sp, #0x10]
+ mov r2, #0xb
+ strh r2, [r1]
+ add r1, r1, #2
+ str r1, [sp, #0x10]
+_022559B8:
+ ldr r5, [sp, #0x10]
+ cmp r3, #0
+ blt _022559E2
+ add r0, r5, #0
+ mov r1, #0
+ strh r1, [r0]
+ mov r1, #0xa
+ add r5, r0, #4
+ strh r1, [r0, #2]
+ add r0, r3, #0
+ sub r3, r3, #1
+ cmp r0, #0
+ beq _02255A4E
+ mov r0, #0
+_022559D4:
+ add r1, r3, #0
+ strh r0, [r5]
+ add r5, r5, #2
+ sub r3, r3, #1
+ cmp r1, #0
+ bne _022559D4
+ b _02255A4E
+_022559E2:
+ neg r1, r3
+ str r1, [sp, #4]
+ mov r1, #0
+ str r1, [sp, #0x14]
+ ldr r1, [sp, #4]
+ cmp r1, #0
+ ble _02255A40
+ ldr r4, _02255AD0 ; =0x04000280
+ sub r0, r0, #1
+ mov lr, r0
+ lsr r3, r4, #0xb
+ lsr r2, r4, #0xb
+_022559FA:
+ mov r0, #2
+ strh r0, [r4]
+ ldr r0, _02255AD4 ; =0x04000290
+ mov r1, lr
+ str r6, [r0]
+ str r7, [r0, #4]
+ ldr r0, [sp, #0x14]
+ sub r0, r1, r0
+ lsl r1, r0, #3
+ ldr r0, _02255AD8 ; =0x022560D0
+ add r6, r0, r1
+ ldr r1, [r0, r1]
+ ldr r6, [r6, #4]
+ ldr r0, _02255ADC ; =0x04000298
+ str r1, [r0]
+ str r6, [r0, #4]
+_02255A1A:
+ ldrh r0, [r4]
+ tst r0, r3
+ bne _02255A1A
+ ldr r0, _02255AE0 ; =0x040002A0
+ ldr r0, [r0]
+ strh r0, [r5]
+ add r5, r5, #2
+_02255A28:
+ ldrh r0, [r4]
+ tst r0, r2
+ bne _02255A28
+ ldr r0, _02255AE4 ; =0x040002A8
+ ldr r1, [sp, #4]
+ ldr r6, [r0]
+ ldr r7, [r0, #4]
+ ldr r0, [sp, #0x14]
+ add r0, r0, #1
+ str r0, [sp, #0x14]
+ cmp r0, r1
+ blt _022559FA
+_02255A40:
+ ldr r0, [sp]
+ ldrb r0, [r0, #8]
+ cmp r0, #0
+ beq _02255A4E
+ mov r0, #0xa
+ strh r0, [r5]
+ add r5, r5, #2
+_02255A4E:
+ ldr r0, [sp, #0x10]
+ sub r1, r5, r0
+ lsr r0, r1, #0x1f
+ add r0, r1, r0
+ asr r1, r0, #1
+ ldr r0, [sp, #8]
+ cmp r1, r0
+ bhs _02255AC0
+ sub r0, r0, r1
+ str r0, [sp, #0x18]
+ mov r0, #0
+ str r0, [sp, #0x1c]
+ ldr r0, [sp, #0x18]
+ cmp r0, #0
+ ble _02255AC0
+ ldr r4, _02255AD0 ; =0x04000280
+ sub r0, r0, #1
+ str r0, [sp, #0xc]
+ lsr r3, r4, #0xb
+ lsr r2, r4, #0xb
+_02255A76:
+ mov r0, #2
+ strh r0, [r4]
+ ldr r0, _02255AD4 ; =0x04000290
+ ldr r1, [sp, #0xc]
+ str r6, [r0]
+ str r7, [r0, #4]
+ ldr r0, [sp, #0x1c]
+ ldr r6, _02255AD8 ; =0x022560D0
+ sub r0, r1, r0
+ lsl r1, r0, #3
+ ldr r0, _02255AD8 ; =0x022560D0
+ add r0, r0, r1
+ ldr r1, [r6, r1]
+ ldr r0, [r0, #4]
+ ldr r6, _02255ADC ; =0x04000298
+ str r1, [r6]
+ add r1, r6, #0
+ str r0, [r1, #4]
+_02255A9A:
+ ldrh r0, [r4]
+ tst r0, r3
+ bne _02255A9A
+ ldr r0, _02255AE0 ; =0x040002A0
+ ldr r0, [r0]
+ strh r0, [r5]
+ add r5, r5, #2
+_02255AA8:
+ ldrh r0, [r4]
+ tst r0, r2
+ bne _02255AA8
+ ldr r0, _02255AE4 ; =0x040002A8
+ ldr r1, [sp, #0x18]
+ ldr r6, [r0]
+ ldr r7, [r0, #4]
+ ldr r0, [sp, #0x1c]
+ add r0, r0, #1
+ str r0, [sp, #0x1c]
+ cmp r0, r1
+ blt _02255A76
+_02255AC0:
+ mov r0, #0xd
+ strh r0, [r5]
+ mov r0, #1
+ add sp, #0x20
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_02255ACC: .word 0x022560D8
+_02255AD0: .word 0x04000280
+_02255AD4: .word 0x04000290
+_02255AD8: .word 0x022560D0
+_02255ADC: .word 0x04000298
+_02255AE0: .word 0x040002A0
+_02255AE4: .word 0x040002A8
+ thumb_func_end MOD23_022558EC
+
+ thumb_func_start MOD23_02255AE8
+MOD23_02255AE8: ; 0x02255AE8
+ push {r3, r4, r5, lr}
+ add r4, r0, #0
+ ldrb r2, [r4, #8]
+ ldr r0, [r4]
+ ldr r1, [r4, #4]
+ lsl r5, r2, #3
+ ldr r2, _02255B14 ; =0x022560D0
+ add r3, r2, r5
+ ldr r2, [r2, r5]
+ ldr r3, [r3, #4]
+ bl _ll_udiv
+ ldrb r2, [r4, #9]
+ cmp r2, #1
+ bne _02255B10
+ mov r2, #0
+ mvn r2, r2
+ add r3, r2, #0
+ bl _ll_mul
+_02255B10:
+ pop {r3, r4, r5, pc}
+ nop
+_02255B14: .word 0x022560D0
+ thumb_func_end MOD23_02255AE8
+
+ thumb_func_start MOD23_02255B18
+MOD23_02255B18: ; 0x02255B18
+ push {r3, r4, r5, r6, r7, lr}
+ str r0, [sp]
+ ldr r2, [sp]
+ mov r0, #0xa
+ ldr r5, [r2]
+ ldr r6, [r2, #4]
+ mov r2, #0xa
+ mov r1, #0
+ mov r4, #1
+ mov r3, #0
+ sub r2, r5, r2
+ mov ip, r6
+ mov r2, ip
+ sbc r2, r3
+ blo _02255B52
+ ldr r2, [sp]
+ ldrb r7, [r2, #0xa]
+_02255B3A:
+ add r4, r4, #1
+ cmp r4, r7
+ bhi _02255B52
+ mov r2, #0xa
+ mov r3, #0
+ bl _ll_mul
+ sub r2, r5, r0
+ mov ip, r6
+ mov r2, ip
+ sbc r2, r1
+ bhs _02255B3A
+_02255B52:
+ ldr r0, [sp]
+ ldrb r0, [r0, #8]
+ cmp r4, r0
+ bls _02255B5E
+ sub r4, r4, r0
+ b _02255B60
+_02255B5E:
+ mov r4, #1
+_02255B60:
+ ldr r0, [sp]
+ ldrb r0, [r0, #9]
+ add r0, r4, r0
+ pop {r3, r4, r5, r6, r7, pc}
+ thumb_func_end MOD23_02255B18
+
+ thumb_func_start MOD23_02255B68
+MOD23_02255B68: ; 0x02255B68
+ push {r4, lr}
+ add r4, r0, #0
+ bl MOD23_02255B18
+ ldrb r1, [r4, #8]
+ cmp r1, #0
+ beq _02255B7A
+ add r1, r1, #1
+ add r0, r0, r1
+_02255B7A:
+ pop {r4, pc}
+ thumb_func_end MOD23_02255B68
+
+ thumb_func_start MOD23_02255B7C
+MOD23_02255B7C: ; 0x02255B7C
+ push {r3, r4, r5, r6, r7, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #8]
+ cmp r0, #0
+ beq _02255C02
+ ldr r5, _02255C5C ; =0x04000280
+ ldr r2, [r4]
+ add r3, r5, #0
+ ldr r1, [r4, #4]
+ mov r0, #1
+ strh r0, [r5]
+ add r3, #0x10
+ str r2, [r3]
+ add r0, r5, #0
+ str r1, [r3, #4]
+ add r0, #0x18
+ mov r2, #0xa
+ mov r1, #0
+ str r2, [r0]
+ str r1, [r0, #4]
+ add r1, r4, #0
+ mov ip, r0
+ add r1, #8
+ b _02255BE4
+_02255BAC:
+ mov r0, #2
+ lsl r0, r0, #0xe
+_02255BB0:
+ ldrh r2, [r5]
+ tst r2, r0
+ bne _02255BB0
+ ldr r0, _02255C60 ; =0x040002A0
+ ldr r2, _02255C60 ; =0x040002A0
+ ldr r0, [r0]
+ ldr r2, [r2, #4]
+ str r0, [r4]
+ str r2, [r4, #4]
+ ldr r6, [r4]
+ mov r0, #1
+ strh r0, [r5]
+ str r6, [r3]
+ str r2, [r3, #4]
+ mov r2, #0xa
+ mov r0, ip
+ str r2, [r0]
+ mov r2, #0
+ mov r0, ip
+ str r2, [r0, #4]
+ ldrb r0, [r1]
+ sub r0, r0, #1
+ strb r0, [r1]
+ ldrb r0, [r4, #8]
+ cmp r0, #0
+ beq _02255C02
+_02255BE4:
+ ldrh r2, [r5]
+ mov r0, #2
+ lsl r0, r0, #0xe
+ tst r0, r2
+ bne _02255BE4
+ ldr r0, _02255C64 ; =0x040002A8
+ mov r7, #0
+ ldr r6, [r0]
+ ldr r2, [r0, #4]
+ mov r0, #0
+ eor r0, r2
+ add r2, r6, #0
+ eor r2, r7
+ orr r0, r2
+ beq _02255BAC
+_02255C02:
+ add r0, r4, #0
+ bl MOD23_02255B18
+ ldrb r2, [r4, #8]
+ cmp r2, #0
+ beq _02255C58
+ add r1, r2, #1
+ add r1, r0, r1
+ ldrb r0, [r4, #0xa]
+ cmp r1, r0
+ bls _02255C58
+ sub r1, r1, r0
+ cmp r1, r2
+ bhi _02255C58
+ ldr r5, [r4]
+ ldr r3, [r4, #4]
+ ldr r0, _02255C5C ; =0x04000280
+ mov r2, #1
+ strh r2, [r0]
+ add r2, r0, #0
+ add r2, #0x10
+ str r5, [r2]
+ str r3, [r2, #4]
+ ldr r2, _02255C68 ; =0x022560D0
+ lsl r3, r1, #3
+ ldr r5, [r2, r3]
+ add r2, r0, #0
+ add r2, #0x18
+ mov r3, #0
+ str r5, [r2]
+ str r3, [r2, #4]
+ lsr r2, r0, #0xb
+_02255C42:
+ ldrh r3, [r0]
+ tst r3, r2
+ bne _02255C42
+ ldr r0, _02255C60 ; =0x040002A0
+ ldr r2, [r0]
+ ldr r0, [r0, #4]
+ str r2, [r4]
+ str r0, [r4, #4]
+ ldrb r0, [r4, #8]
+ sub r0, r0, r1
+ strb r0, [r4, #8]
+_02255C58:
+ pop {r3, r4, r5, r6, r7, pc}
+ nop
+_02255C5C: .word 0x04000280
+_02255C60: .word 0x040002A0
+_02255C64: .word 0x040002A8
+_02255C68: .word 0x022560D0
+ thumb_func_end MOD23_02255B7C
+
+ thumb_func_start MOD23_02255C6C
+MOD23_02255C6C: ; 0x02255C6C
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r0, #0
+ add r7, r1, #0
+ ldmia r6!, {r0, r1}
+ add r5, r2, #0
+ stmia r2!, {r0, r1}
+ ldr r0, [r6]
+ add r4, r3, #0
+ str r0, [r2]
+ ldmia r7!, {r0, r1}
+ add r2, r4, #0
+ stmia r2!, {r0, r1}
+ ldr r0, [r7]
+ str r0, [r2]
+ ldrb r1, [r5, #8]
+ ldrb r0, [r4, #8]
+ cmp r1, r0
+ bhs _02255C96
+ add r0, r5, #0
+ add r5, r4, #0
+ add r4, r0, #0
+_02255C96:
+ ldrb r3, [r5, #8]
+ ldrb r2, [r4, #8]
+ ldr r0, [r4]
+ ldr r1, [r4, #4]
+ sub r2, r3, r2
+ lsl r6, r2, #3
+ ldr r2, _02255CB8 ; =0x022560D0
+ add r3, r2, r6
+ ldr r2, [r2, r6]
+ ldr r3, [r3, #4]
+ bl _ll_mul
+ str r0, [r4]
+ str r1, [r4, #4]
+ ldrb r0, [r5, #8]
+ strb r0, [r4, #8]
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_02255CB8: .word 0x022560D0
+ thumb_func_end MOD23_02255C6C
+
+ .section .data
+ ; 0x02255CBC
+ .incbin "baserom.nds", 0x28807C, 0x484
diff --git a/arm9/modules/24/asm/module_24.s b/arm9/modules/24/asm/module_24.s
new file mode 100644
index 00000000..e3b9a327
--- /dev/null
+++ b/arm9/modules/24/asm/module_24.s
@@ -0,0 +1,1184 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD24_02254840
+MOD24_02254840: ; 0x02254840
+ ldr r3, _02254848 ; =MOD20_02252978
+ ldr r0, _0225484C ; =MOD24_02254854
+ ldr r1, _02254850 ; =MOD24_02254990
+ bx r3
+ .align 2, 0
+_02254848: .word MOD20_02252978
+_0225484C: .word MOD24_02254854
+_02254850: .word MOD24_02254990
+ thumb_func_end MOD24_02254840
+
+ thumb_func_start MOD24_02254854
+MOD24_02254854: ; 0x02254854
+ push {r3, r4, r5, r6, r7, lr}
+ add r6, r1, #0
+ mov r1, #0x17
+ add r5, r0, #0
+ mov r0, #8
+ lsl r1, r1, #8
+ add r7, r2, #0
+ str r3, [sp]
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02254894
+ ldr r3, [sp]
+ add r1, r6, #0
+ add r2, r7, #0
+ bl MOD24_0225489C
+ cmp r0, #0
+ beq _0225488E
+ ldr r0, _02254898 ; =MOD24_02254918
+ add r1, r4, #0
+ mov r2, #1
+ bl FUN_0200CA44
+ cmp r0, #0
+ beq _0225488E
+ str r4, [r5]
+ mov r0, #1
+ pop {r3, r4, r5, r6, r7, pc}
+_0225488E:
+ add r0, r4, #0
+ bl FUN_02016A18
+_02254894:
+ mov r0, #0
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_02254898: .word MOD24_02254918
+ thumb_func_end MOD24_02254854
+
+ thumb_func_start MOD24_0225489C
+MOD24_0225489C: ; 0x0225489C
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ ldr r0, _022548E4 ; =0x000016F0
+ add r4, r1, #0
+ str r3, [r5, r0]
+ mov r1, #1
+ str r1, [r5, #8]
+ add r0, r0, #4
+ add r1, r5, #0
+ add r0, r5, r0
+ add r1, #8
+ bl MOD24_02254CA0
+ cmp r0, #0
+ beq _022548E0
+ mov r0, #0
+ strb r0, [r5]
+ strb r0, [r5, #1]
+ strb r0, [r5, #2]
+ strb r0, [r5, #3]
+ mov r0, #8
+ str r0, [sp]
+ ldr r0, _022548E8 ; =0x022550F8
+ ldr r2, _022548EC ; =MOD24_02254960
+ mov r1, #2
+ add r3, r5, #0
+ bl MOD20_02254130
+ ldr r1, _022548F0 ; =0x000016FC
+ str r0, [r5, r1]
+ sub r0, r1, #4
+ str r4, [r5, r0]
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+_022548E0:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_022548E4: .word 0x000016F0
+_022548E8: .word 0x022550F8
+_022548EC: .word MOD24_02254960
+_022548F0: .word 0x000016FC
+ thumb_func_end MOD24_0225489C
+
+ thumb_func_start MOD24_022548F4
+MOD24_022548F4: ; 0x022548F4
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, _02254910 ; =0x000016FC
+ ldr r0, [r4, r0]
+ bl MOD20_02254198
+ ldr r0, _02254914 ; =0x000016F4
+ ldr r0, [r4, r0]
+ bl MOD24_02254D48
+ add r0, r4, #0
+ bl FUN_02016A18
+ pop {r4, pc}
+ .align 2, 0
+_02254910: .word 0x000016FC
+_02254914: .word 0x000016F4
+ thumb_func_end MOD24_022548F4
+
+ thumb_func_start MOD24_02254918
+MOD24_02254918: ; 0x02254918
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ ldrb r0, [r4]
+ cmp r0, #3
+ bhs _02254954
+ ldr r1, _02254958 ; =0x000016F8
+ ldr r0, [r4, r1]
+ add r1, r1, #4
+ ldr r1, [r4, r1]
+ bl MOD20_02252C14
+ ldrb r1, [r4]
+ add r0, r4, #0
+ lsl r2, r1, #2
+ ldr r1, _0225495C ; =0x02255100
+ ldr r1, [r1, r2]
+ blx r1
+ cmp r0, #0
+ beq _02254954
+ add r0, r4, #0
+ bl MOD24_022548F4
+ add r0, r5, #0
+ bl FUN_0200CAB4
+ ldr r0, _02254958 ; =0x000016F8
+ ldr r0, [r4, r0]
+ bl MOD20_022529A0
+_02254954:
+ pop {r3, r4, r5, pc}
+ nop
+_02254958: .word 0x000016F8
+_0225495C: .word 0x02255100
+ thumb_func_end MOD24_02254918
+
+ thumb_func_start MOD24_02254960
+MOD24_02254960: ; 0x02254960
+ push {r3, lr}
+ cmp r2, #1
+ bne _02254988
+ ldr r1, [r3, #8]
+ cmp r1, #1
+ bne _02254970
+ cmp r0, #0
+ beq _02254978
+_02254970:
+ cmp r1, #0
+ bne _02254988
+ cmp r0, #1
+ bne _02254988
+_02254978:
+ ldr r0, [r3, #8]
+ mov r1, #1
+ eor r0, r1
+ str r0, [r3, #8]
+ ldr r0, _0225498C ; =0x000016F4
+ ldr r0, [r3, r0]
+ bl MOD24_02254D8C
+_02254988:
+ pop {r3, pc}
+ nop
+_0225498C: .word 0x000016F4
+ thumb_func_end MOD24_02254960
+
+ thumb_func_start MOD24_02254990
+MOD24_02254990: ; 0x02254990
+ mov r1, #1
+ strb r1, [r0, #2]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD24_02254990
+
+ thumb_func_start MOD24_02254998
+MOD24_02254998: ; 0x02254998
+ ldrb r2, [r0, #2]
+ cmp r2, #0
+ bne _022549A0
+ b _022549A2
+_022549A0:
+ mov r1, #2
+_022549A2:
+ strb r1, [r0]
+ mov r1, #0
+ strb r1, [r0, #1]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD24_02254998
+
+ thumb_func_start MOD24_022549AC
+MOD24_022549AC: ; 0x022549AC
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _022549BC
+ cmp r0, #1
+ beq _022549CE
+ b _022549EC
+_022549BC:
+ ldr r0, _022549F0 ; =0x000016F4
+ mov r1, #0
+ ldr r0, [r4, r0]
+ bl MOD24_02254D8C
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _022549EC
+_022549CE:
+ ldr r0, _022549F0 ; =0x000016F4
+ mov r1, #0
+ ldr r0, [r4, r0]
+ bl MOD24_02254DB0
+ cmp r0, #0
+ beq _022549EC
+ ldr r0, _022549F4 ; =0x000016F8
+ ldr r0, [r4, r0]
+ bl MOD20_0225298C
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD24_02254998
+_022549EC:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+_022549F0: .word 0x000016F4
+_022549F4: .word 0x000016F8
+ thumb_func_end MOD24_022549AC
+
+ thumb_func_start MOD24_022549F8
+MOD24_022549F8: ; 0x022549F8
+ push {r3, r4, r5, r6, lr}
+ sub sp, #4
+ add r5, r0, #0
+ ldrb r1, [r5, #2]
+ cmp r1, #0
+ beq _02254A0A
+ mov r1, #2
+ bl MOD24_02254998
+_02254A0A:
+ ldrb r0, [r5, #1]
+ cmp r0, #0
+ bne _02254A60
+ ldr r0, _02254A68 ; =0x000016F8
+ ldr r0, [r5, r0]
+ bl MOD20_02252C08
+ cmp r0, #0
+ bne _02254A60
+ ldrb r0, [r5, #3]
+ cmp r0, #0
+ beq _02254A48
+ add r0, r5, #0
+ ldr r6, [r5, #0xc]
+ ldr r4, [r5, #0x10]
+ bl MOD24_02254AD4
+ cmp r0, #0
+ beq _02254A42
+ ldr r0, [r5, #0x10]
+ add r1, r6, #0
+ str r0, [sp]
+ ldr r3, [r5, #0xc]
+ add r0, r5, #0
+ add r2, r4, #0
+ bl MOD24_02254B20
+ b _02254A60
+_02254A42:
+ mov r0, #0
+ strb r0, [r5, #3]
+ b _02254A60
+_02254A48:
+ add r0, r5, #0
+ bl MOD24_02254A70
+ cmp r0, #0
+ beq _02254A60
+ ldr r0, _02254A6C ; =0x000016F4
+ mov r1, #3
+ ldr r0, [r5, r0]
+ bl MOD24_02254D8C
+ mov r0, #1
+ strb r0, [r5, #3]
+_02254A60:
+ mov r0, #0
+ add sp, #4
+ pop {r3, r4, r5, r6, pc}
+ nop
+_02254A68: .word 0x000016F8
+_02254A6C: .word 0x000016F4
+ thumb_func_end MOD24_022549F8
+
+ thumb_func_start MOD24_02254A70
+MOD24_02254A70: ; 0x02254A70
+ push {r4, lr}
+ sub sp, #8
+ add r4, r0, #0
+ add r0, sp, #4
+ add r1, sp, #0
+ bl MOD20_02252B68
+ cmp r0, #0
+ beq _02254ACC
+ ldr r1, [sp, #4]
+ ldr r2, [sp]
+ sub r1, #0x10
+ sub r2, #0x10
+ cmp r1, #0x9c
+ bhs _02254A92
+ mov r0, #1
+ b _02254A94
+_02254A92:
+ mov r0, #0
+_02254A94:
+ cmp r2, #0x96
+ bhs _02254A9C
+ mov r3, #1
+ b _02254A9E
+_02254A9C:
+ mov r3, #0
+_02254A9E:
+ tst r0, r3
+ beq _02254ACC
+ lsr r3, r1, #1
+ lsr r0, r2, #1
+ add r2, r4, #0
+ mov r1, #0x4b
+ add r2, #0x14
+ mul r1, r3
+ str r3, [sp, #4]
+ str r0, [sp]
+ add r3, r2, r1
+ ldrb r1, [r3, r0]
+ ldr r2, [r4, #8]
+ cmp r2, r1
+ beq _02254ACC
+ strb r2, [r3, r0]
+ ldr r0, [sp, #4]
+ str r0, [r4, #0xc]
+ ldr r0, [sp]
+ add sp, #8
+ str r0, [r4, #0x10]
+ mov r0, #1
+ pop {r4, pc}
+_02254ACC:
+ mov r0, #0
+ add sp, #8
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD24_02254A70
+
+ thumb_func_start MOD24_02254AD4
+MOD24_02254AD4: ; 0x02254AD4
+ push {r4, lr}
+ sub sp, #8
+ add r4, r0, #0
+ add r0, sp, #4
+ add r1, sp, #0
+ bl MOD20_02252B68
+ cmp r0, #0
+ beq _02254B1A
+ ldr r1, [sp, #4]
+ ldr r2, [sp]
+ sub r1, #0x10
+ sub r2, #0x10
+ cmp r1, #0x9c
+ bhs _02254AF6
+ mov r0, #1
+ b _02254AF8
+_02254AF6:
+ mov r0, #0
+_02254AF8:
+ cmp r2, #0x96
+ bhs _02254B00
+ mov r3, #1
+ b _02254B02
+_02254B00:
+ mov r3, #0
+_02254B02:
+ tst r0, r3
+ beq _02254B1A
+ lsr r1, r1, #1
+ lsr r0, r2, #1
+ str r1, [sp, #4]
+ str r0, [sp]
+ str r1, [r4, #0xc]
+ ldr r0, [sp]
+ add sp, #8
+ str r0, [r4, #0x10]
+ mov r0, #1
+ pop {r4, pc}
+_02254B1A:
+ mov r0, #0
+ add sp, #8
+ pop {r4, pc}
+ thumb_func_end MOD24_02254AD4
+
+ thumb_func_start MOD24_02254B20
+MOD24_02254B20: ; 0x02254B20
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x14
+ add r5, r0, #0
+ ldr r0, [sp, #0x28]
+ add r4, r2, #0
+ add r6, r1, #0
+ str r3, [sp]
+ str r0, [sp, #0x28]
+ cmp r4, r0
+ bne _02254B3C
+ add r0, r3, #0
+ cmp r6, r0
+ bne _02254B3C
+ b _02254C5C
+_02254B3C:
+ ldr r0, [sp]
+ cmp r0, r6
+ bls _02254B46
+ sub r1, r0, r6
+ b _02254B48
+_02254B46:
+ sub r1, r6, r0
+_02254B48:
+ ldr r0, [sp, #0x28]
+ cmp r0, r4
+ bls _02254B52
+ sub r2, r0, r4
+ b _02254B54
+_02254B52:
+ sub r2, r4, r0
+_02254B54:
+ cmp r1, r2
+ bls _02254BD6
+ ldr r0, [sp]
+ cmp r0, r6
+ bls _02254B64
+ mov r0, #1
+ str r0, [sp, #4]
+ b _02254B6A
+_02254B64:
+ mov r0, #0
+ mvn r0, r0
+ str r0, [sp, #4]
+_02254B6A:
+ cmp r1, #0
+ beq _02254B7C
+ ldr r0, [sp, #0x28]
+ sub r0, r0, r4
+ lsl r0, r0, #0xc
+ bl _s32_div_f
+ str r0, [sp, #0x10]
+ b _02254B80
+_02254B7C:
+ mov r0, #0
+ str r0, [sp, #0x10]
+_02254B80:
+ ldr r0, [sp, #0x10]
+ lsl r1, r4, #0xc
+ add r7, r1, r0
+ ldr r0, [sp, #4]
+ add r6, r6, r0
+ ldr r0, [sp]
+ cmp r6, r0
+ beq _02254C40
+ mov r1, #0x4b
+ add r0, r6, #0
+ mul r0, r1
+ add r4, r5, r0
+ ldr r0, [sp, #4]
+ mul r1, r0
+ str r1, [sp, #0xc]
+_02254B9E:
+ asr r2, r7, #0xc
+ cmp r6, #0x4e
+ bhs _02254BC2
+ cmp r2, #0x4b
+ bhs _02254BC2
+ add r1, r4, r2
+ ldrb r0, [r1, #0x14]
+ ldr r3, [r5, #8]
+ cmp r3, r0
+ beq _02254BC2
+ strb r3, [r1, #0x14]
+ str r6, [r5, #0xc]
+ ldr r0, _02254C60 ; =0x000016F4
+ str r2, [r5, #0x10]
+ ldr r0, [r5, r0]
+ mov r1, #3
+ bl MOD24_02254D8C
+_02254BC2:
+ ldr r0, [sp, #0xc]
+ add r4, r4, r0
+ ldr r0, [sp, #4]
+ add r6, r6, r0
+ ldr r0, [sp, #0x10]
+ add r7, r7, r0
+ ldr r0, [sp]
+ cmp r6, r0
+ bne _02254B9E
+ b _02254C40
+_02254BD6:
+ ldr r0, [sp, #0x28]
+ cmp r0, r4
+ bls _02254BE0
+ mov r7, #1
+ b _02254BE4
+_02254BE0:
+ mov r7, #0
+ mvn r7, r7
+_02254BE4:
+ cmp r2, #0
+ beq _02254BF8
+ ldr r0, [sp]
+ add r1, r2, #0
+ sub r0, r0, r6
+ lsl r0, r0, #0xc
+ bl _s32_div_f
+ str r0, [sp, #8]
+ b _02254BFC
+_02254BF8:
+ mov r0, #0
+ str r0, [sp, #8]
+_02254BFC:
+ ldr r0, [sp, #8]
+ lsl r1, r6, #0xc
+ add r6, r1, r0
+ ldr r0, [sp, #0x28]
+ add r4, r4, r7
+ cmp r4, r0
+ beq _02254C40
+_02254C0A:
+ asr r3, r6, #0xc
+ cmp r4, #0x4b
+ bhs _02254C34
+ cmp r3, #0x4e
+ bhs _02254C34
+ mov r0, #0x4b
+ mul r0, r3
+ add r0, r5, r0
+ add r2, r0, r4
+ ldrb r0, [r2, #0x14]
+ ldr r1, [r5, #8]
+ cmp r1, r0
+ beq _02254C34
+ strb r1, [r2, #0x14]
+ str r3, [r5, #0xc]
+ ldr r0, _02254C60 ; =0x000016F4
+ str r4, [r5, #0x10]
+ ldr r0, [r5, r0]
+ mov r1, #3
+ bl MOD24_02254D8C
+_02254C34:
+ ldr r0, [sp, #8]
+ add r4, r4, r7
+ add r6, r6, r0
+ ldr r0, [sp, #0x28]
+ cmp r4, r0
+ bne _02254C0A
+_02254C40:
+ ldr r0, [sp, #0x28]
+ cmp r0, #0x4b
+ bhs _02254C5C
+ ldr r0, [sp]
+ cmp r0, #0x4e
+ bhs _02254C5C
+ str r0, [r5, #0xc]
+ ldr r0, [sp, #0x28]
+ mov r1, #3
+ str r0, [r5, #0x10]
+ ldr r0, _02254C60 ; =0x000016F4
+ ldr r0, [r5, r0]
+ bl MOD24_02254D8C
+_02254C5C:
+ add sp, #0x14
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_02254C60: .word 0x000016F4
+ thumb_func_end MOD24_02254B20
+
+ thumb_func_start MOD24_02254C64
+MOD24_02254C64: ; 0x02254C64
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _02254C74
+ cmp r0, #1
+ beq _02254C86
+ b _02254C96
+_02254C74:
+ ldr r0, _02254C9C ; =0x000016F4
+ mov r1, #5
+ ldr r0, [r4, r0]
+ bl MOD24_02254D8C
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254C96
+_02254C86:
+ ldr r0, _02254C9C ; =0x000016F4
+ ldr r0, [r4, r0]
+ bl MOD24_02254DBC
+ cmp r0, #0
+ beq _02254C96
+ mov r0, #1
+ pop {r4, pc}
+_02254C96:
+ mov r0, #0
+ pop {r4, pc}
+ nop
+_02254C9C: .word 0x000016F4
+ thumb_func_end MOD24_02254C64
+
+ thumb_func_start MOD24_02254CA0
+MOD24_02254CA0: ; 0x02254CA0
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r0, #8
+ mov r1, #0x74
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02254CFA
+ mov r0, #7
+ bl FUN_02016B90
+ cmp r0, #0
+ bne _02254CC0
+ bl ErrorHandling
+_02254CC0:
+ add r0, r4, #0
+ add r0, #8
+ mov r1, #0x10
+ bl MOD20_022536F4
+ mov r0, #7
+ bl FUN_02016B90
+ cmp r0, #0
+ bne _02254CD8
+ bl ErrorHandling
+_02254CD8:
+ str r6, [r4]
+ bl MOD20_02252D34
+ str r0, [r4, #4]
+ bl MOD20_02252D24
+ str r0, [r4, #0x50]
+ mov r0, #7
+ bl FUN_02016B90
+ cmp r0, #0
+ bne _02254CF4
+ bl ErrorHandling
+_02254CF4:
+ str r4, [r5]
+ mov r0, #1
+ pop {r4, r5, r6, pc}
+_02254CFA:
+ mov r0, #0
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD24_02254CA0
+
+ thumb_func_start MOD24_02254D00
+MOD24_02254D00: ; 0x02254D00
+ push {r4, lr}
+ add r4, r0, #0
+ mov r0, #8
+ mov r1, #1
+ bl FUN_02018FF4
+ str r0, [r4, #0x70]
+ add r1, r0, #0
+ beq _02254D3C
+ ldr r0, [r4, #4]
+ ldr r2, _02254D40 ; =0x0225510C
+ bl FUN_02019150
+ mov r2, #0xbe
+ ldr r1, [r4]
+ ldr r0, _02254D44 ; =0x000016E8
+ lsl r2, r2, #6
+ ldr r0, [r1, r0]
+ ldr r1, [r4, #0x70]
+ ldr r1, [r1, #0xc]
+ bl FUN_0208946C
+ cmp r0, #0
+ bne _02254D38
+ ldr r0, [r4, #0x70]
+ mov r1, #4
+ bl FUN_02019620
+_02254D38:
+ mov r0, #1
+ pop {r4, pc}
+_02254D3C:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+_02254D40: .word 0x0225510C
+_02254D44: .word 0x000016E8
+ thumb_func_end MOD24_02254D00
+
+ thumb_func_start MOD24_02254D48
+MOD24_02254D48: ; 0x02254D48
+ push {r4, lr}
+ add r4, r0, #0
+ beq _02254D84
+ mov r0, #7
+ bl FUN_02016B90
+ cmp r0, #0
+ bne _02254D5C
+ bl ErrorHandling
+_02254D5C:
+ ldr r2, [r4, #0x70]
+ cmp r2, #0
+ beq _02254D7E
+ ldr r1, [r4]
+ ldr r0, _02254D88 ; =0x000016E8
+ ldr r0, [r1, r0]
+ ldr r1, [r2, #0xc]
+ mov r2, #0xbe
+ lsl r2, r2, #6
+ bl FUN_02089444
+ ldr r0, [r4, #0x70]
+ bl FUN_02019178
+ ldr r0, [r4, #0x70]
+ bl FUN_02016A18
+_02254D7E:
+ add r0, r4, #0
+ bl FUN_02016A18
+_02254D84:
+ pop {r4, pc}
+ nop
+_02254D88: .word 0x000016E8
+ thumb_func_end MOD24_02254D48
+
+ thumb_func_start MOD24_02254D8C
+MOD24_02254D8C: ; 0x02254D8C
+ 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, _02254DAC ; =0x0225516C
+ ldr r3, [r2]
+ bl MOD20_022537E0
+ add sp, #0xc
+ pop {pc}
+ nop
+_02254DAC: .word 0x0225516C
+ thumb_func_end MOD24_02254D8C
+
+ thumb_func_start MOD24_02254DB0
+MOD24_02254DB0: ; 0x02254DB0
+ ldr r3, _02254DB8 ; =MOD20_02253794
+ add r0, #8
+ bx r3
+ nop
+_02254DB8: .word MOD20_02253794
+ thumb_func_end MOD24_02254DB0
+
+ thumb_func_start MOD24_02254DBC
+MOD24_02254DBC: ; 0x02254DBC
+ ldr r3, _02254DC4 ; =MOD20_022537B8
+ add r0, #8
+ bx r3
+ nop
+_02254DC4: .word MOD20_022537B8
+ thumb_func_end MOD24_02254DBC
+
+ thumb_func_start MOD24_02254DC8
+MOD24_02254DC8: ; 0x02254DC8
+ 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 MOD24_02254DC8
+
+ thumb_func_start MOD24_02254DDC
+MOD24_02254DDC: ; 0x02254DDC
+ push {r4, r5, lr}
+ sub sp, #0x14
+ mov r0, #8
+ add r4, r1, #0
+ bl FUN_02016B90
+ cmp r0, #0
+ bne _02254DF0
+ bl ErrorHandling
+_02254DF0:
+ add r0, r4, #0
+ bl MOD20_022538A0
+ add r5, r0, #0
+ ldr r0, [r5, #4]
+ ldr r2, _02254ED0 ; =0x02255114
+ mov r1, #6
+ mov r3, #0
+ bl FUN_02016C18
+ ldr r0, [r5, #4]
+ ldr r2, _02254ED4 ; =0x02255130
+ mov r1, #7
+ mov r3, #0
+ bl FUN_02016C18
+ mov r0, #8
+ bl FUN_02016B90
+ cmp r0, #0
+ bne _02254E1E
+ bl ErrorHandling
+_02254E1E:
+ 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, #0x1e
+ mov r3, #6
+ bl FUN_0200687C
+ 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, #0x1f
+ mov r3, #6
+ bl FUN_020068C8
+ mov r0, #0
+ add r1, r0, #0
+ bl MOD20_02252D7C
+ mov r0, #8
+ bl FUN_02016B90
+ cmp r0, #0
+ bne _02254E68
+ bl ErrorHandling
+_02254E68:
+ add r0, r5, #0
+ bl MOD24_02254D00
+ ldr r0, [r5, #0x70]
+ bl FUN_020191D0
+ mov r0, #8
+ bl FUN_02016B90
+ cmp r0, #0
+ bne _02254E82
+ bl ErrorHandling
+_02254E82:
+ add r0, r5, #0
+ bl MOD24_02255078
+ mov r0, #8
+ bl FUN_02016B90
+ cmp r0, #0
+ bne _02254E96
+ bl ErrorHandling
+_02254E96:
+ ldr r0, [r5, #4]
+ mov r1, #7
+ bl FUN_02017CD0
+ ldr r1, _02254ED8 ; =0x04001000
+ ldr r0, _02254EDC ; =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 MOD24_02254DC8
+ mov r0, #8
+ bl FUN_02016B90
+ cmp r0, #0
+ bne _02254ECC
+ bl ErrorHandling
+_02254ECC:
+ add sp, #0x14
+ pop {r4, r5, pc}
+ .align 2, 0
+_02254ED0: .word 0x02255114
+_02254ED4: .word 0x02255130
+_02254ED8: .word 0x04001000
+_02254EDC: .word 0xFFFFE0FF
+ thumb_func_end MOD24_02254DDC
+
+ thumb_func_start MOD24_02254EE0
+MOD24_02254EE0: ; 0x02254EE0
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ ldr r0, [r4]
+ ldr r0, [r0]
+ cmp r0, #1
+ ldr r0, [r4, #0x68]
+ bne _02254F06
+ mov r1, #0
+ bl MOD20_02253F28
+ ldr r0, [r4, #0x6c]
+ mov r1, #3
+ bl MOD20_02253F28
+ b _02254F14
+_02254F06:
+ mov r1, #1
+ bl MOD20_02253F28
+ ldr r0, [r4, #0x6c]
+ mov r1, #2
+ bl MOD20_02253F28
+_02254F14:
+ ldr r0, _02254F24 ; =0x00000663
+ bl MOD20_02252B28
+ add r0, r5, #0
+ bl MOD24_02254DC8
+ pop {r3, r4, r5, pc}
+ nop
+_02254F24: .word 0x00000663
+ thumb_func_end MOD24_02254EE0
+
+ thumb_func_start MOD24_02254F28
+MOD24_02254F28: ; 0x02254F28
+ push {r4, lr}
+ add r4, r1, #0
+ add r0, r4, #0
+ bl MOD20_022538A0
+ ldr r0, [r0, #0x70]
+ bl FUN_02019548
+ add r0, r4, #0
+ bl MOD24_02254DC8
+ pop {r4, pc}
+ thumb_func_end MOD24_02254F28
+
+ thumb_func_start MOD24_02254F40
+MOD24_02254F40: ; 0x02254F40
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x18
+ add r0, r1, #0
+ str r1, [sp, #8]
+ bl MOD20_022538A0
+ add r7, r0, #0
+ ldr r0, [r7]
+ ldr r1, [r0]
+ cmp r1, #0
+ bne _02254FF2
+ mov r1, #8
+ str r1, [sp, #0x10]
+ str r1, [sp, #0x14]
+ ldr r1, [r0, #4]
+ ldr r0, [r0, #8]
+ lsl r1, r1, #1
+ lsl r0, r0, #1
+ sub r6, r1, #4
+ sub r5, r0, #4
+ cmp r6, #0
+ bge _02254F74
+ ldr r0, [sp, #0x10]
+ add r0, r0, r6
+ str r0, [sp, #0x14]
+ mov r6, #0
+_02254F74:
+ cmp r5, #0
+ bge _02254F80
+ ldr r0, [sp, #0x10]
+ add r0, r0, r5
+ str r0, [sp, #0x10]
+ mov r5, #0
+_02254F80:
+ ldr r0, [sp, #0x14]
+ lsl r2, r6, #0x10
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ str r0, [sp]
+ ldr r0, [sp, #0x10]
+ lsl r3, r5, #0x10
+ lsl r0, r0, #0x10
+ lsr r0, r0, #0x10
+ str r0, [sp, #4]
+ ldr r0, [r7, #0x70]
+ mov r1, #4
+ lsr r2, r2, #0x10
+ lsr r3, r3, #0x10
+ bl FUN_020196F4
+ asr r1, r5, #3
+ mov r2, #0x14
+ asr r0, r6, #3
+ mul r2, r1
+ add r4, r0, r2
+ ldr r2, [sp, #0x14]
+ add r2, r6, r2
+ sub r2, r2, #1
+ asr r2, r2, #3
+ sub r0, r2, r0
+ ldr r2, [sp, #0x10]
+ add r0, r0, #1
+ add r2, r5, r2
+ sub r2, r2, #1
+ asr r2, r2, #3
+ sub r1, r2, r1
+ add r1, r1, #1
+ sub r6, r1, #1
+ cmp r1, #0
+ beq _0225502C
+ lsl r0, r0, #5
+ lsl r5, r4, #5
+ str r0, [sp, #0xc]
+_02254FCE:
+ ldr r0, [r7, #0x70]
+ add r1, r4, #0
+ ldr r0, [r0, #0xc]
+ add r1, #0xc
+ ldr r2, [sp, #0xc]
+ add r0, r0, r5
+ lsl r1, r1, #5
+ bl GXS_LoadBG3Char
+ mov r0, #0xa
+ lsl r0, r0, #6
+ add r5, r5, r0
+ add r0, r6, #0
+ add r4, #0x14
+ sub r6, r6, #1
+ cmp r0, #0
+ bne _02254FCE
+ b _0225502C
+_02254FF2:
+ ldr r1, [r0, #4]
+ ldr r0, [r0, #8]
+ lsl r2, r1, #1
+ lsl r3, r0, #1
+ asr r1, r3, #3
+ mov r0, #0x14
+ asr r4, r2, #3
+ mul r0, r1
+ add r4, r4, r0
+ mov r0, #2
+ str r0, [sp]
+ str r0, [sp, #4]
+ lsl r2, r2, #0x10
+ lsl r3, r3, #0x10
+ ldr r0, [r7, #0x70]
+ mov r1, #1
+ lsr r2, r2, #0x10
+ lsr r3, r3, #0x10
+ bl FUN_020196F4
+ ldr r0, [r7, #0x70]
+ mov r2, #0x20
+ ldr r1, [r0, #0xc]
+ lsl r0, r4, #5
+ add r4, #0xc
+ add r0, r1, r0
+ lsl r1, r4, #5
+ bl GXS_LoadBG3Char
+_0225502C:
+ ldr r0, [sp, #8]
+ bl MOD24_02254DC8
+ add sp, #0x18
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+ thumb_func_end MOD24_02254F40
+
+ thumb_func_start MOD24_02255038
+MOD24_02255038: ; 0x02255038
+ push {r4, lr}
+ add r4, r1, #0
+ add r0, r4, #0
+ bl MOD20_022538A0
+ ldr r0, [r0, #0x70]
+ bl FUN_02019548
+ add r0, r4, #0
+ bl MOD24_02254DC8
+ pop {r4, pc}
+ thumb_func_end MOD24_02255038
+
+ thumb_func_start MOD24_02255050
+MOD24_02255050: ; 0x02255050
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ bl MOD24_022550D4
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_020178A0
+ ldr r0, [r4, #4]
+ mov r1, #7
+ bl FUN_020178A0
+ add r0, r5, #0
+ bl MOD24_02254DC8
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD24_02255050
+
+ thumb_func_start MOD24_02255078
+MOD24_02255078: ; 0x02255078
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x10
+ mov r3, #0
+ str r3, [sp]
+ mov r2, #1
+ add r7, r0, #0
+ str r2, [sp, #4]
+ mov r0, #8
+ str r0, [sp, #8]
+ mov r0, #0xc
+ mov r1, #0x20
+ bl FUN_02006A34
+ mov r0, #8
+ str r0, [sp]
+ add r0, r7, #0
+ add r0, #0x54
+ mov r1, #0xc
+ mov r2, #0x21
+ mov r3, #0x22
+ bl MOD20_02253FBC
+ cmp r0, #0
+ beq _022550CC
+ add r0, r7, #0
+ str r0, [sp, #0xc]
+ add r0, #0x54
+ ldr r4, _022550D0 ; =0x0225514C
+ mov r6, #0
+ add r5, r7, #0
+ str r0, [sp, #0xc]
+_022550B6:
+ ldr r0, [r7, #0x50]
+ ldr r2, [sp, #0xc]
+ add r1, r4, #0
+ bl MOD20_02253E74
+ str r0, [r5, #0x68]
+ add r6, r6, #1
+ add r4, #0x10
+ add r5, r5, #4
+ cmp r6, #2
+ blt _022550B6
+_022550CC:
+ add sp, #0x10
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_022550D0: .word 0x0225514C
+ thumb_func_end MOD24_02255078
+
+ thumb_func_start MOD24_022550D4
+MOD24_022550D4: ; 0x022550D4
+ push {r4, r5, r6, lr}
+ add r6, r0, #0
+ mov r4, #0
+ add r5, r6, #0
+_022550DC:
+ ldr r0, [r6, #0x50]
+ ldr r1, [r5, #0x68]
+ bl MOD20_02253F14
+ add r4, r4, #1
+ add r5, r5, #4
+ cmp r4, #2
+ blo _022550DC
+ add r6, #0x54
+ add r0, r6, #0
+ bl MOD20_02254014
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ thumb_func_end MOD24_022550D4
+
+ .section .data
+ ; 0x022550F8
+ .incbin "baserom.nds", 0x288EB8, 0xE8
diff --git a/arm9/modules/25/asm/module_25.s b/arm9/modules/25/asm/module_25.s
new file mode 100644
index 00000000..6df522da
--- /dev/null
+++ b/arm9/modules/25/asm/module_25.s
@@ -0,0 +1,663 @@
+ .include "asm/macros.inc"
+ .include "global.inc"
+ .section .text
+ .balign 4, 0
+
+ thumb_func_start MOD25_02254840
+MOD25_02254840: ; 0x02254840
+ ldr r3, _02254848 ; =MOD20_02252978
+ ldr r0, _0225484C ; =MOD25_02254854
+ ldr r1, _02254850 ; =MOD25_0225496C
+ bx r3
+ .align 2, 0
+_02254848: .word MOD20_02252978
+_0225484C: .word MOD25_02254854
+_02254850: .word MOD25_0225496C
+ thumb_func_end MOD25_02254840
+
+ thumb_func_start MOD25_02254854
+MOD25_02254854: ; 0x02254854
+ push {r3, r4, r5, r6, r7, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r0, #8
+ mov r1, #0x2c
+ 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 MOD25_0225489C
+ cmp r0, #0
+ beq _0225488C
+ ldr r0, _02254898 ; =MOD25_02254930
+ 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 MOD25_02254930
+ thumb_func_end MOD25_02254854
+
+ thumb_func_start MOD25_0225489C
+MOD25_0225489C: ; 0x0225489C
+ push {r3, r4, r5, lr}
+ add r5, r0, #0
+ add r4, r1, #0
+ add r1, r5, #0
+ add r0, #0x24
+ add r1, #0x14
+ bl MOD25_02254A6C
+ cmp r0, #0
+ beq _0225490A
+ mov r1, #0
+ strb r1, [r5]
+ strb r1, [r5, #1]
+ strb r1, [r5, #2]
+ mov r0, #1
+ strb r0, [r5, #3]
+ strb r1, [r5, #6]
+ add r0, r5, #0
+ str r1, [r5, #0x20]
+ add r0, #0x14
+ bl FUN_02012690
+ ldr r0, [r5, #0x14]
+ cmp r0, #0x18
+ blo _022548D6
+ mov r1, #0x18
+ bl _u32_div_f
+ str r1, [r5, #0x14]
+_022548D6:
+ ldr r0, [r5, #0x18]
+ cmp r0, #0x3c
+ blo _022548E6
+ ldr r0, [r5, #0x14]
+ mov r1, #0x3c
+ bl _u32_div_f
+ str r1, [r5, #0x14]
+_022548E6:
+ ldr r0, [r5, #0x18]
+ ldr r2, _02254910 ; =MOD25_02254974
+ strb r0, [r5, #5]
+ mov r0, #8
+ str r0, [sp]
+ ldr r0, _02254914 ; =0x02254CF8
+ mov r1, #1
+ add r3, r5, #0
+ bl MOD20_02254130
+ str r0, [r5, #0x10]
+ cmp r0, #0
+ bne _02254904
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+_02254904:
+ str r4, [r5, #0x28]
+ mov r0, #1
+ pop {r3, r4, r5, pc}
+_0225490A:
+ mov r0, #0
+ pop {r3, r4, r5, pc}
+ nop
+_02254910: .word MOD25_02254974
+_02254914: .word 0x02254CF8
+ thumb_func_end MOD25_0225489C
+
+ thumb_func_start MOD25_02254918
+MOD25_02254918: ; 0x02254918
+ push {r4, lr}
+ add r4, r0, #0
+ ldr r0, [r4, #0x24]
+ bl MOD25_02254AC4
+ ldr r0, [r4, #0x10]
+ bl MOD20_02254198
+ add r0, r4, #0
+ bl FUN_02016A18
+ pop {r4, pc}
+ thumb_func_end MOD25_02254918
+
+ thumb_func_start MOD25_02254930
+MOD25_02254930: ; 0x02254930
+ push {r3, r4, r5, lr}
+ add r4, r1, #0
+ add r5, r0, #0
+ ldrb r0, [r4]
+ cmp r0, #3
+ bhs _02254966
+ ldr r0, [r4, #0x28]
+ ldr r1, [r4, #0x10]
+ bl MOD20_02252C14
+ ldrb r1, [r4]
+ add r0, r4, #0
+ lsl r2, r1, #2
+ ldr r1, _02254968 ; =0x02254CFC
+ ldr r1, [r1, r2]
+ blx r1
+ cmp r0, #0
+ beq _02254966
+ add r0, r4, #0
+ bl MOD25_02254918
+ add r0, r5, #0
+ bl FUN_0200CAB4
+ ldr r0, [r4, #0x28]
+ bl MOD20_022529A0
+_02254966:
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_02254968: .word 0x02254CFC
+ thumb_func_end MOD25_02254930
+
+ thumb_func_start MOD25_0225496C
+MOD25_0225496C: ; 0x0225496C
+ mov r1, #1
+ strb r1, [r0, #2]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD25_0225496C
+
+ thumb_func_start MOD25_02254974
+MOD25_02254974: ; 0x02254974
+ cmp r2, #0
+ beq _02254984
+ cmp r2, #1
+ bne _0225498C
+ mov r0, #1
+ str r0, [r3, #0x20]
+ strb r0, [r3, #6]
+ bx lr
+_02254984:
+ mov r0, #0
+ str r0, [r3, #0x20]
+ mov r0, #1
+ strb r0, [r3, #6]
+_0225498C:
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD25_02254974
+
+ thumb_func_start MOD25_02254990
+MOD25_02254990: ; 0x02254990
+ ldrb r2, [r0, #2]
+ cmp r2, #0
+ bne _02254998
+ b _0225499A
+_02254998:
+ mov r1, #2
+_0225499A:
+ strb r1, [r0]
+ mov r1, #0
+ strb r1, [r0, #1]
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD25_02254990
+
+ thumb_func_start MOD25_022549A4
+MOD25_022549A4: ; 0x022549A4
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _022549B4
+ cmp r0, #1
+ beq _022549C4
+ b _022549DE
+_022549B4:
+ ldr r0, [r4, #0x24]
+ mov r1, #0
+ bl MOD25_02254AE4
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _022549DE
+_022549C4:
+ ldr r0, [r4, #0x24]
+ mov r1, #0
+ bl MOD25_02254B08
+ cmp r0, #0
+ beq _022549DE
+ ldr r0, [r4, #0x28]
+ bl MOD20_0225298C
+ add r0, r4, #0
+ mov r1, #1
+ bl MOD25_02254990
+_022549DE:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD25_022549A4
+
+ thumb_func_start MOD25_022549E4
+MOD25_022549E4: ; 0x022549E4
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r1, [r4, #2]
+ cmp r1, #0
+ beq _022549F8
+ mov r1, #2
+ bl MOD25_02254990
+ mov r0, #0
+ pop {r4, pc}
+_022549F8:
+ ldrb r0, [r4, #6]
+ cmp r0, #0
+ beq _02254A0A
+ mov r0, #0
+ strb r0, [r4, #6]
+ ldr r0, [r4, #0x24]
+ mov r1, #2
+ bl MOD25_02254AE4
+_02254A0A:
+ ldr r0, [r4, #0x24]
+ mov r1, #1
+ bl MOD25_02254B08
+ cmp r0, #0
+ beq _02254A32
+ ldr r0, [r4, #0x18]
+ strb r0, [r4, #5]
+ add r0, r4, #0
+ add r0, #0x14
+ bl FUN_02012690
+ ldrb r1, [r4, #5]
+ ldr r0, [r4, #0x18]
+ cmp r1, r0
+ beq _02254A32
+ ldr r0, [r4, #0x24]
+ mov r1, #1
+ bl MOD25_02254AE4
+_02254A32:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD25_022549E4
+
+ thumb_func_start MOD25_02254A38
+MOD25_02254A38: ; 0x02254A38
+ push {r4, lr}
+ add r4, r0, #0
+ ldrb r0, [r4, #1]
+ cmp r0, #0
+ beq _02254A48
+ cmp r0, #1
+ beq _02254A58
+ b _02254A66
+_02254A48:
+ ldr r0, [r4, #0x24]
+ mov r1, #3
+ bl MOD25_02254AE4
+ ldrb r0, [r4, #1]
+ add r0, r0, #1
+ strb r0, [r4, #1]
+ b _02254A66
+_02254A58:
+ ldr r0, [r4, #0x24]
+ bl MOD25_02254B14
+ cmp r0, #0
+ beq _02254A66
+ mov r0, #1
+ pop {r4, pc}
+_02254A66:
+ mov r0, #0
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD25_02254A38
+
+ thumb_func_start MOD25_02254A6C
+MOD25_02254A6C: ; 0x02254A6C
+ push {r4, r5, r6, lr}
+ add r5, r0, #0
+ add r6, r1, #0
+ mov r0, #8
+ mov r1, #0x54
+ bl FUN_02016998
+ add r4, r0, #0
+ beq _02254ABA
+ 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, #0x48]
+ add r0, r4, #0
+ bl MOD25_02254C74
+ cmp r0, #0
+ bne _02254AA8
+ add r0, r4, #0
+ bl FUN_02016A18
+ mov r0, #0
+ pop {r4, r5, r6, pc}
+_02254AA8:
+ ldr r0, _02254AC0 ; =MOD25_02254AE0
+ add r1, r4, #0
+ mov r2, #3
+ bl FUN_0200CA44
+ str r0, [r4, #0x30]
+ str r4, [r5]
+ mov r0, #1
+ pop {r4, r5, r6, pc}
+_02254ABA:
+ mov r0, #0
+ pop {r4, r5, r6, pc}
+ nop
+_02254AC0: .word MOD25_02254AE0
+ thumb_func_end MOD25_02254A6C
+
+ thumb_func_start MOD25_02254AC4
+MOD25_02254AC4: ; 0x02254AC4
+ push {r4, lr}
+ add r4, r0, #0
+ beq _02254ADE
+ bl MOD25_02254CD8
+ ldr r0, [r4, #0x30]
+ cmp r0, #0
+ beq _02254AD8
+ bl FUN_0200CAB4
+_02254AD8:
+ add r0, r4, #0
+ bl FUN_02016A18
+_02254ADE:
+ pop {r4, pc}
+ thumb_func_end MOD25_02254AC4
+
+ thumb_func_start MOD25_02254AE0
+MOD25_02254AE0: ; 0x02254AE0
+ bx lr
+ .align 2, 0
+ thumb_func_end MOD25_02254AE0
+
+ thumb_func_start MOD25_02254AE4
+MOD25_02254AE4: ; 0x02254AE4
+ 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, _02254B04 ; =0x02254D44
+ ldr r3, [r2]
+ bl MOD20_022537E0
+ add sp, #0xc
+ pop {pc}
+ nop
+_02254B04: .word 0x02254D44
+ thumb_func_end MOD25_02254AE4
+
+ thumb_func_start MOD25_02254B08
+MOD25_02254B08: ; 0x02254B08
+ ldr r3, _02254B10 ; =MOD20_02253794
+ add r0, #8
+ bx r3
+ nop
+_02254B10: .word MOD20_02253794
+ thumb_func_end MOD25_02254B08
+
+ thumb_func_start MOD25_02254B14
+MOD25_02254B14: ; 0x02254B14
+ ldr r3, _02254B1C ; =MOD20_022537B8
+ add r0, #8
+ bx r3
+ nop
+_02254B1C: .word MOD20_022537B8
+ thumb_func_end MOD25_02254B14
+
+ thumb_func_start MOD25_02254B20
+MOD25_02254B20: ; 0x02254B20
+ 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 MOD25_02254B20
+
+ thumb_func_start MOD25_02254B34
+MOD25_02254B34: ; 0x02254B34
+ 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, _02254BBC ; =0x02254D08
+ 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, #0x17
+ mov r3, #6
+ bl FUN_0200687C
+ 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, #0x1a
+ mov r3, #6
+ bl FUN_020068C8
+ mov r0, #0
+ add r1, r0, #0
+ bl MOD20_02252D7C
+ add r0, r5, #0
+ bl MOD25_02254C30
+ ldr r0, [r5, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ ldr r1, _02254BC0 ; =0x04001000
+ ldr r0, _02254BC4 ; =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 MOD25_02254B20
+ add sp, #0x14
+ pop {r4, r5, pc}
+ .align 2, 0
+_02254BBC: .word 0x02254D08
+_02254BC0: .word 0x04001000
+_02254BC4: .word 0xFFFFE0FF
+ thumb_func_end MOD25_02254B34
+
+ thumb_func_start MOD25_02254BC8
+MOD25_02254BC8: ; 0x02254BC8
+ push {r3, r4, r5, lr}
+ add r5, r1, #0
+ add r0, r5, #0
+ bl MOD20_022538A0
+ add r4, r0, #0
+ bl MOD25_02254C30
+ ldr r0, [r4, #4]
+ mov r1, #6
+ bl FUN_02017CD0
+ add r0, r5, #0
+ bl MOD25_02254B20
+ pop {r3, r4, r5, pc}
+ thumb_func_end MOD25_02254BC8
+
+ thumb_func_start MOD25_02254BE8
+MOD25_02254BE8: ; 0x02254BE8
+ push {r4, lr}
+ add r4, r1, #0
+ add r0, r4, #0
+ bl MOD20_022538A0
+ ldr r0, [r0]
+ ldr r0, [r0, #0xc]
+ cmp r0, #0
+ beq _02254C04
+ mov r0, #0
+ add r1, r0, #0
+ bl MOD20_02252DB4
+ b _02254C0C
+_02254C04:
+ mov r0, #0
+ add r1, r0, #0
+ bl MOD20_02252D7C
+_02254C0C:
+ add r0, r4, #0
+ bl MOD25_02254B20
+ pop {r4, pc}
+ thumb_func_end MOD25_02254BE8
+
+ thumb_func_start MOD25_02254C14
+MOD25_02254C14: ; 0x02254C14
+ 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 MOD25_02254B20
+ pop {r4, pc}
+ .align 2, 0
+ thumb_func_end MOD25_02254C14
+
+ thumb_func_start MOD25_02254C30
+MOD25_02254C30: ; 0x02254C30
+ push {r3, r4, r5, lr}
+ add r4, r0, #0
+ ldr r0, [r4]
+ ldr r1, _02254C70 ; =0x04000280
+ ldr r0, [r0]
+ mov r2, #0
+ strh r2, [r1]
+ str r0, [r1, #0x10]
+ mov r0, #0xa
+ add r1, #0x18
+ str r0, [r1]
+ str r2, [r1, #4]
+ ldr r5, [r4]
+ mov r1, #0xc
+ ldr r0, [r5]
+ bl _u32_div_f
+ ldr r2, [r5, #4]
+ ldr r0, [r4, #0x4c]
+ lsr r3, r2, #1
+ mov r2, #0x1e
+ mul r2, r1
+ add r2, #0x3c
+ add r1, r3, r2
+ bl MOD20_02253F28
+ ldr r1, [r4]
+ ldr r0, [r4, #0x50]
+ ldr r1, [r1, #4]
+ bl MOD20_02253F28
+ pop {r3, r4, r5, pc}
+ .align 2, 0
+_02254C70: .word 0x04000280
+ thumb_func_end MOD25_02254C30
+
+ thumb_func_start MOD25_02254C74
+MOD25_02254C74: ; 0x02254C74
+ push {r3, r4, r5, r6, r7, lr}
+ sub sp, #0x10
+ mov r3, #0
+ str r3, [sp]
+ mov r2, #1
+ add r7, r0, #0
+ str r2, [sp, #4]
+ mov r0, #8
+ str r0, [sp, #8]
+ mov r0, #0xc
+ mov r1, #0x1d
+ bl FUN_02006A34
+ mov r0, #8
+ str r0, [sp]
+ add r0, r7, #0
+ add r0, #0x34
+ mov r1, #0xc
+ mov r2, #0x1b
+ mov r3, #0x1c
+ bl MOD20_02253FBC
+ cmp r0, #0
+ beq _02254CCE
+ add r0, r7, #0
+ str r0, [sp, #0xc]
+ add r0, #0x34
+ ldr r4, _02254CD4 ; =0x02254D24
+ mov r6, #0
+ add r5, r7, #0
+ str r0, [sp, #0xc]
+_02254CB2:
+ ldr r0, [r7, #0x48]
+ ldr r2, [sp, #0xc]
+ add r1, r4, #0
+ bl MOD20_02253E74
+ str r0, [r5, #0x4c]
+ add r6, r6, #1
+ add r4, #0x10
+ add r5, r5, #4
+ cmp r6, #2
+ blt _02254CB2
+ add sp, #0x10
+ mov r0, #1
+ pop {r3, r4, r5, r6, r7, pc}
+_02254CCE:
+ mov r0, #0
+ add sp, #0x10
+ pop {r3, r4, r5, r6, r7, pc}
+ .align 2, 0
+_02254CD4: .word 0x02254D24
+ thumb_func_end MOD25_02254C74
+
+ thumb_func_start MOD25_02254CD8
+MOD25_02254CD8: ; 0x02254CD8
+ push {r4, r5, r6, lr}
+ add r6, r0, #0
+ add r0, #0x34
+ bl MOD20_02254014
+ mov r4, #0
+ add r5, r6, #0
+_02254CE6:
+ ldr r0, [r6, #0x48]
+ ldr r1, [r5, #0x4c]
+ bl MOD20_02253F14
+ add r4, r4, #1
+ add r5, r5, #4
+ cmp r4, #2
+ blt _02254CE6
+ pop {r4, r5, r6, pc}
+ thumb_func_end MOD25_02254CD8
+
+ .section .data
+ ; 0x02254CF8
+ .incbin "baserom.nds", 0x2894B8, 0xA8
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