diff options
-rw-r--r-- | arm9/Makefile | 20 | ||||
-rw-r--r-- | arm9/arm9.lcf | 144 | ||||
-rw-r--r-- | arm9/asm/unk_020AF030.s | 4 | ||||
-rw-r--r-- | arm9/global.inc | 68 | ||||
-rw-r--r-- | arm9/modules/20/asm/module_20.s | 4570 | ||||
-rw-r--r-- | arm9/modules/21/asm/module_21.s | 726 | ||||
-rw-r--r-- | arm9/modules/22/asm/module_22.s | 1845 | ||||
-rw-r--r-- | arm9/modules/23/asm/module_23.s | 2794 | ||||
-rw-r--r-- | arm9/modules/24/asm/module_24.s | 1184 | ||||
-rw-r--r-- | arm9/modules/25/asm/module_25.s | 663 | ||||
-rw-r--r-- | arm9/modules/26/asm/module_26.s | 793 | ||||
-rw-r--r-- | arm9/modules/27/asm/module_27.s | 1453 | ||||
-rw-r--r-- | arm9/modules/28/asm/module_28.s | 2967 |
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 |