summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornotyourav <65437533+notyourav@users.noreply.github.com>2022-01-01 18:29:08 -0800
committerGitHub <noreply@github.com>2022-01-01 18:29:08 -0800
commit466b508413fd62dfd00c859d7f636622898d617c (patch)
treecf7ba31fc07baa772ad7505c26dd71cb27901b74
parent408d67844f9df6c12e3ff3a6d86b3a614a2f615c (diff)
parent1ca41b54a984af1da881cb9a01015069a570c195 (diff)
Merge pull request #238 from notyourav/clr
color.c, utils->common.c
-rw-r--r--asm/code_0801CEC0.s863
-rw-r--r--asm/code_0805436C.s4
-rw-r--r--asm/non_matching/color/CleanUpObjPalettes.inc141
-rw-r--r--asm/non_matching/color/FindFreeObjPalette.inc60
-rw-r--r--asm/non_matching/color/FindPalette.inc28
-rw-r--r--asm/non_matching/color/LoadObjPalette.inc100
-rw-r--r--asm/non_matching/color/LoadObjPaletteAtIndex.inc63
-rw-r--r--asm/non_matching/color/SetEntityObjPalette.inc80
-rw-r--r--asm/non_matching/color/sub_0801D000.inc34
-rw-r--r--asm/non_matching/color/sub_0801D244.inc39
-rw-r--r--asm/non_matching/color/sub_0801D48C.inc71
-rw-r--r--asm/non_matching/common/ClearBit.inc14
-rw-r--r--asm/non_matching/common/DrawDungeonFeatures.inc179
-rw-r--r--asm/non_matching/common/DrawDungeonMap.inc221
-rw-r--r--asm/non_matching/common/WriteBit.inc14
-rw-r--r--asm/non_matching/common/sub_0801D898.inc39
-rw-r--r--asm/non_matching/common/sub_0801DF28.inc28
-rw-r--r--asm/non_matching/common/sub_0801DFB4.inc44
-rw-r--r--asm/non_matching/common/sub_0801E24C.inc40
-rw-r--r--asm/non_matching/common/sub_0801E290.inc75
-rw-r--r--asm/non_matching/common/sub_0801E31C.inc189
-rw-r--r--asm/non_matching/common/sub_0801E49C.inc211
-rw-r--r--asm/non_matching/common/sub_0801E64C.inc72
-rw-r--r--asm/non_matching/common/sub_0801E6C8.inc59
-rw-r--r--asm/non_matching/common/sub_0801E738.inc51
-rw-r--r--asm/non_matching/common/sub_0801E82C.inc69
-rw-r--r--asm/non_matching/common/sub_0801E99C.inc112
-rw-r--r--asm/non_matching/common/zFree.inc58
-rw-r--r--asm/non_matching/common/zMalloc.inc171
-rw-r--r--asm/non_matching/textbox/sub_08056FEC.inc2
-rw-r--r--asm/object/object9.s4
-rw-r--r--asm/object/objectB3.s4
-rw-r--r--asm/subtask.s32
-rw-r--r--asm/subtask2.s8
-rw-r--r--asm/utils.s2677
-rw-r--r--include/asm.h2
-rw-r--r--include/color.h21
-rw-r--r--include/common.h (renamed from include/utils.h)22
-rw-r--r--include/enemy.h2
-rw-r--r--include/entity.h1
-rw-r--r--include/flags.h8
-rw-r--r--include/functions.h7
-rw-r--r--include/global.h3
-rw-r--r--include/kinstone.h28
-rw-r--r--include/main.h2
-rw-r--r--include/npc.h2
-rw-r--r--include/object.h2
-rw-r--r--include/room.h4
-rw-r--r--include/save.h8
-rw-r--r--include/screen.h2
-rw-r--r--include/structures.h1
-rw-r--r--linker.ld7
-rw-r--r--src/code_0805436C.c2
-rw-r--r--src/code_08078778.c9
-rw-r--r--src/collision.c2
-rw-r--r--src/color.c84
-rw-r--r--src/common.c681
-rw-r--r--src/coord.c2
-rw-r--r--src/debugScreen.c2
-rw-r--r--src/demoScreen.c2
-rw-r--r--src/dungeon.c1
-rw-r--r--src/enemy/code_080300AC.c2
-rw-r--r--src/enterPortalSubtask.c2
-rw-r--r--src/entity.c3
-rw-r--r--src/fade.c2
-rw-r--r--src/fileScreen.c2
-rw-r--r--src/flags.c25
-rw-r--r--src/game.c2
-rw-r--r--src/main.c4
-rw-r--r--src/manager/manager10.c2
-rw-r--r--src/manager/manager14.c1
-rw-r--r--src/manager/manager1A.c2
-rw-r--r--src/manager/manager2C.c2
-rw-r--r--src/manager/manager32.c2
-rw-r--r--src/manager/manager39.c2
-rw-r--r--src/manager/managerB.c2
-rw-r--r--src/manager/managerC.c2
-rw-r--r--src/manager/managerF.c2
-rw-r--r--src/message.c6
-rw-r--r--src/npc/zeldaFollower.c2
-rw-r--r--src/npcUtils.c3
-rw-r--r--src/object/lockedDoor.c1
-rw-r--r--src/player.c2
-rw-r--r--src/playerItem/playerItemPacciCane.c2
-rw-r--r--src/playerItem/playerItemSwordBeam.c1
-rw-r--r--src/playerItemUtils.c2
-rw-r--r--src/projectile/winder.c2
-rw-r--r--src/room.c2
-rw-r--r--src/roomInit.c2
-rw-r--r--src/script.c3
-rw-r--r--src/sound.c2
-rw-r--r--src/sub_0807CA18.c2
-rw-r--r--src/text.c2
-rw-r--r--src/title.c2
-rw-r--r--src/utils.c205
95 files changed, 3196 insertions, 3867 deletions
diff --git a/asm/code_0801CEC0.s b/asm/code_0801CEC0.s
deleted file mode 100644
index e7fbc193..00000000
--- a/asm/code_0801CEC0.s
+++ /dev/null
@@ -1,863 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_0801CFA8
-sub_0801CFA8: @ 0x0801CFA8
- push {r4, r5, lr}
- adds r5, r0, #0
- ldr r0, _0801CFCC @ =gPaletteList
- movs r1, #0x40
- bl MemClear
- movs r4, #0
-_0801CFB6:
- adds r0, r4, #0
- bl sub_0801CFD0
- adds r4, #1
- cmp r4, #5
- bls _0801CFB6
- adds r0, r5, #0
- bl sub_0801D000
- pop {r4, r5, pc}
- .align 2, 0
-_0801CFCC: .4byte gPaletteList
-
- thumb_func_start sub_0801CFD0
-sub_0801CFD0: @ 0x0801CFD0
- lsls r0, r0, #2
- ldr r1, _0801CFF8 @ =gPaletteList
- adds r0, r0, r1
- ldrb r2, [r0]
- movs r1, #0x10
- rsbs r1, r1, #0
- ands r1, r2
- movs r2, #4
- orrs r1, r2
- movs r2, #0xf
- ands r1, r2
- movs r2, #0x10
- orrs r1, r2
- strb r1, [r0]
- movs r1, #0x80
- strb r1, [r0, #1]
- ldr r1, _0801CFFC @ =0x0000FFFF
- strh r1, [r0, #2]
- bx lr
- .align 2, 0
-_0801CFF8: .4byte gPaletteList
-_0801CFFC: .4byte 0x0000FFFF
-
- thumb_func_start sub_0801D000
-sub_0801D000: @ 0x0801D000
- push {lr}
- adds r2, r0, #0
- ldr r0, _0801D024 @ =gScreenTransition
- movs r1, #0
- cmp r2, #0
- beq _0801D00E
- movs r1, #0xf
-_0801D00E:
- adds r0, #0x2f
- strb r1, [r0]
- cmp r2, #0
- beq _0801D028
- bl CleanUpObjPalettes
- movs r0, #0xf
- bl sub_0801CFD0
- b _0801D03A
- .align 2, 0
-_0801D024: .4byte gScreenTransition
-_0801D028:
- ldr r3, _0801D03C @ =gUnk_02001A3C
- ldrb r1, [r3]
- movs r0, #0xf
- ands r0, r1
- cmp r0, #4
- bne _0801D03A
- strb r2, [r3]
- strb r2, [r3, #1]
- strh r2, [r3, #2]
-_0801D03A:
- pop {pc}
- .align 2, 0
-_0801D03C: .4byte gUnk_02001A3C
-
- thumb_func_start LoadObjPalette
-LoadObjPalette: @ 0x0801D040
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #4
- str r0, [sp]
- adds r6, r1, #0
- adds r0, r6, #0
- bl FindPalette
- adds r5, r0, #0
- cmp r5, #0
- bge _0801D0E8
- cmp r6, #0x15
- bhi _0801D064
- movs r4, #1
- b _0801D074
-_0801D064:
- ldr r0, _0801D100 @ =gUnk_08133368
- adds r1, r6, #0
- subs r1, #0x16
- lsls r1, r1, #2
- adds r1, r1, r0
- ldrb r4, [r1, #3]
- movs r0, #0xf
- ands r4, r0
-_0801D074:
- adds r0, r4, #0
- bl FindFreeObjPalette
- adds r5, r0, #0
- cmp r5, #0
- bge _0801D090
- bl CleanUpObjPalettes
- adds r0, r4, #0
- bl FindFreeObjPalette
- adds r5, r0, #0
- cmp r5, #0
- blt _0801D0E8
-_0801D090:
- lsls r1, r5, #2
- ldr r0, _0801D104 @ =gPaletteList
- adds r3, r1, r0
- movs r0, #0
- strh r6, [r3, #2]
- strb r0, [r3, #1]
- movs r2, #0x10
- rsbs r2, r2, #0
- lsls r0, r4, #4
- movs r1, #3
- orrs r0, r1
- strb r0, [r3]
- subs r4, #1
- cmp r4, #0
- beq _0801D0E0
- movs r0, #0
- mov sl, r0
- movs r1, #0
- mov r8, r1
- movs r0, #0xf
- mov sb, r0
- mov ip, r2
- movs r7, #2
-_0801D0BE:
- adds r3, #4
- mov r1, r8
- strh r1, [r3, #2]
- mov r0, sl
- strb r0, [r3, #1]
- lsls r2, r4, #4
- ldrb r1, [r3]
- mov r0, sb
- ands r0, r1
- orrs r0, r2
- mov r1, ip
- ands r0, r1
- orrs r0, r7
- strb r0, [r3]
- subs r4, #1
- cmp r4, #0
- bne _0801D0BE
-_0801D0E0:
- adds r0, r6, #0
- adds r1, r5, #0
- bl LoadObjPaletteAtIndex
-_0801D0E8:
- ldr r0, [sp]
- adds r1, r5, #0
- bl SetEntityObjPalette
- adds r0, r5, #0
- add sp, #4
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801D100: .4byte gUnk_08133368
-_0801D104: .4byte gPaletteList
-
- thumb_func_start FindPalette
-FindPalette: @ 0x0801D108
- push {lr}
- adds r2, r0, #0
- cmp r2, #5
- bhi _0801D116
- b _0801D12E
-_0801D112:
- adds r0, r1, #0
- b _0801D12E
-_0801D116:
- movs r1, #6
- ldr r0, _0801D130 @ =gPaletteList
- adds r0, #0x18
-_0801D11C:
- ldrh r3, [r0, #2]
- cmp r2, r3
- beq _0801D112
- adds r0, #4
- adds r1, #1
- cmp r1, #0xf
- bls _0801D11C
- movs r0, #1
- rsbs r0, r0, #0
-_0801D12E:
- pop {pc}
- .align 2, 0
-_0801D130: .4byte gPaletteList
-
- thumb_func_start FindFreeObjPalette
-FindFreeObjPalette: @ 0x0801D134
- push {r4, lr}
- adds r4, r0, #0
- movs r1, #0
- movs r2, #6
- ldr r0, _0801D154 @ =gPaletteList
- adds r3, r0, #0
- adds r3, #0x18
-_0801D142:
- ldrb r0, [r3]
- lsls r0, r0, #0x1c
- cmp r0, #0
- bne _0801D158
- adds r1, #1
- cmp r4, r1
- bhi _0801D15A
- b _0801D180
- .align 2, 0
-_0801D154: .4byte gPaletteList
-_0801D158:
- movs r1, #0
-_0801D15A:
- adds r3, #4
- adds r2, #1
- cmp r2, #0xf
- bls _0801D142
- movs r1, #0
- movs r2, #6
- ldr r0, _0801D188 @ =gPaletteList
- adds r3, r0, #0
- adds r3, #0x18
-_0801D16C:
- ldrb r0, [r3]
- lsls r0, r0, #0x1c
- lsrs r0, r0, #0x1c
- cmp r0, #1
- bgt _0801D18C
- cmp r0, #0
- blt _0801D18C
- adds r1, #1
- cmp r4, r1
- bhi _0801D18E
-_0801D180:
- subs r0, r1, #1
- subs r0, r2, r0
- b _0801D19A
- .align 2, 0
-_0801D188: .4byte gPaletteList
-_0801D18C:
- movs r1, #0
-_0801D18E:
- adds r3, #4
- adds r2, #1
- cmp r2, #0xf
- bls _0801D16C
- movs r0, #1
- rsbs r0, r0, #0
-_0801D19A:
- pop {r4, pc}
-
- thumb_func_start SetEntityObjPalette
-SetEntityObjPalette: @ 0x0801D19C
- push {r4, r5, r6, r7, lr}
- adds r4, r0, #0
- adds r3, r1, #0
- cmp r3, #0
- bge _0801D1A8
- movs r3, #0
-_0801D1A8:
- adds r0, r4, #0
- adds r0, #0x28
- ldrb r0, [r0]
- subs r0, #1
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #0x7e
- bls _0801D1BE
- adds r0, r4, #0
- adds r0, #0x27
- strb r3, [r0]
-_0801D1BE:
- movs r0, #0xf
- adds r1, r3, #0
- ands r1, r0
- ldrb r2, [r4, #0x1a]
- movs r5, #0x10
- rsbs r5, r5, #0
- adds r0, r5, #0
- ands r0, r2
- orrs r0, r1
- movs r2, #0xf
- adds r1, r3, #0
- ands r1, r2
- lsls r1, r1, #4
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, #0x1a]
- lsls r1, r3, #2
- ldr r0, _0801D22C @ =gPaletteList
- adds r4, r1, r0
- ldr r0, [r4]
- lsls r0, r0, #0x1c
- lsrs r0, r0, #0x1c
- cmp r0, #4
- beq _0801D22A
- ldrb r0, [r4, #1]
- adds r0, #1
- strb r0, [r4, #1]
- ldr r0, [r4]
- lsls r0, r0, #0x18
- lsrs r3, r0, #0x1c
- ldrb r1, [r4]
- adds r0, r5, #0
- ands r0, r1
- movs r1, #3
- orrs r0, r1
- strb r0, [r4]
- subs r3, #1
- cmp r3, #0
- beq _0801D22A
- movs r7, #0xf
- adds r6, r5, #0
- movs r5, #2
-_0801D212:
- adds r4, #4
- lsls r2, r3, #4
- ldrb r1, [r4]
- adds r0, r7, #0
- ands r0, r1
- orrs r0, r2
- ands r0, r6
- orrs r0, r5
- strb r0, [r4]
- subs r3, #1
- cmp r3, #0
- bne _0801D212
-_0801D22A:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801D22C: .4byte gPaletteList
-
- thumb_func_start UnloadOBJPalette
-UnloadOBJPalette: @ 0x0801D230
- push {lr}
- adds r0, #0x27
- ldrb r2, [r0]
- movs r1, #0
- strb r1, [r0]
- adds r0, r2, #0
- bl sub_0801D244
- pop {pc}
- .align 2, 0
-
- thumb_func_start sub_0801D244
-sub_0801D244: @ 0x0801D244
- push {r4, r5, r6, lr}
- lsls r0, r0, #2
- ldr r1, _0801D288 @ =gPaletteList
- adds r2, r0, r1
- ldr r0, [r2]
- lsls r0, r0, #0x1c
- lsrs r0, r0, #0x1c
- cmp r0, #3
- bne _0801D284
- ldrb r0, [r2, #1]
- subs r0, #1
- strb r0, [r2, #1]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _0801D284
- ldr r0, [r2]
- lsls r0, r0, #0x18
- lsrs r3, r0, #0x1c
- movs r5, #0
- movs r6, #0x10
- rsbs r6, r6, #0
- movs r4, #1
-_0801D270:
- strb r5, [r2, #1]
- ldrb r1, [r2]
- adds r0, r6, #0
- ands r0, r1
- orrs r0, r4
- strb r0, [r2]
- adds r2, #4
- subs r3, #1
- cmp r3, #0
- bne _0801D270
-_0801D284:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0801D288: .4byte gPaletteList
-
- thumb_func_start sub_0801D28C
-sub_0801D28C: @ 0x0801D28C
- push {lr}
- adds r3, r1, #0
- adds r0, #0x27
- ldrb r2, [r0]
- ldr r1, _0801D2B0 @ =gPaletteList
- lsls r0, r2, #2
- adds r1, r0, r1
- ldrb r0, [r1]
- lsls r0, r0, #0x1c
- lsrs r0, r0, #0x1c
- cmp r0, #3
- bne _0801D2AE
- strh r3, [r1, #2]
- adds r0, r3, #0
- adds r1, r2, #0
- bl LoadObjPaletteAtIndex
-_0801D2AE:
- pop {pc}
- .align 2, 0
-_0801D2B0: .4byte gPaletteList
-
- thumb_func_start ChangeObjPalette
-ChangeObjPalette: @ 0x0801D2B4
- push {r4, r5, lr}
- adds r4, r0, #0
- adds r5, r1, #0
- bl UnloadOBJPalette
- adds r0, r4, #0
- adds r1, r5, #0
- bl LoadObjPalette
- pop {r4, r5, pc}
-
- thumb_func_start LoadObjPaletteAtIndex
-LoadObjPaletteAtIndex: @ 0x0801D2C8
- push {r4, lr}
- adds r3, r0, #0
- ldr r2, _0801D2F8 @ =gUsedPalettes
- adds r4, r1, #0
- adds r4, #0x10
- movs r1, #1
- lsls r1, r4
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- cmp r3, #5
- bls _0801D33C
- cmp r3, #0x15
- bne _0801D300
- ldr r2, _0801D2FC @ =gPaletteBuffer
- adds r0, r2, #0
- adds r0, #0x78
- ldrh r0, [r0]
- lsls r1, r4, #5
- adds r1, r1, r2
- movs r2, #0x20
- bl MemFill16
- b _0801D33C
- .align 2, 0
-_0801D2F8: .4byte gUsedPalettes
-_0801D2FC: .4byte gPaletteBuffer
-_0801D300:
- cmp r3, #0x14
- bhi _0801D31C
- subs r0, r3, #6
- lsls r0, r0, #5
- ldr r1, _0801D318 @ =gPaletteBuffer
- adds r0, r0, r1
- adds r1, r4, #0
- movs r2, #1
- bl LoadPalettes
- b _0801D33C
- .align 2, 0
-_0801D318: .4byte gPaletteBuffer
-_0801D31C:
- ldr r1, _0801D340 @ =gUnk_08133368
- adds r0, r3, #0
- subs r0, #0x16
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r0, [r0]
- lsrs r2, r0, #0x18
- movs r1, #0xf
- ands r2, r1
- ldr r1, _0801D344 @ =0x00FFFFFF
- ands r0, r1
- ldr r1, _0801D348 @ =gGlobalGfxAndPalettes
- adds r0, r0, r1
- adds r1, r4, #0
- bl LoadPalettes
-_0801D33C:
- pop {r4, pc}
- .align 2, 0
-_0801D340: .4byte gUnk_08133368
-_0801D344: .4byte 0x00FFFFFF
-_0801D348: .4byte gGlobalGfxAndPalettes
-
- thumb_func_start CleanUpObjPalettes
-CleanUpObjPalettes: @ 0x0801D34C
- push {r4, r5, r6, r7, lr}
- sub sp, #0x10
- movs r2, #0
- movs r3, #0
- ldr r1, _0801D37C @ =gPaletteList
-_0801D356:
- mov r4, sp
- adds r0, r4, r2
- strb r2, [r0]
- ldrb r0, [r1]
- lsls r0, r0, #0x1c
- lsrs r0, r0, #0x1c
- cmp r0, #1
- bgt _0801D370
- cmp r0, #0
- blt _0801D370
- strb r3, [r1]
- strb r3, [r1, #1]
- strh r3, [r1, #2]
-_0801D370:
- adds r1, #4
- adds r2, #1
- cmp r2, #0xf
- bls _0801D356
- movs r4, #6
- b _0801D390
- .align 2, 0
-_0801D37C: .4byte gPaletteList
-_0801D380:
- cmp r4, r1
- ble _0801D390
- mov r2, sp
- adds r0, r2, r4
- strb r1, [r0]
- adds r0, r4, #0
- bl sub_0801D48C
-_0801D390:
- adds r0, r4, #1
- bl sub_0801D458
- adds r4, r0, #0
- cmp r4, #0
- beq _0801D3AC
- movs r0, #1
- bl FindFreeObjPalette
- adds r1, r0, #0
- movs r0, #1
- rsbs r0, r0, #0
- cmp r1, r0
- bne _0801D380
-_0801D3AC:
- movs r1, #0
- ldr r4, _0801D450 @ =gEntityLists
- mov ip, r4
-_0801D3B2:
- lsls r0, r1, #3
- mov r2, ip
- adds r3, r0, r2
- adds r0, r3, #0
- ldr r3, [r3, #4]
- adds r5, r1, #1
- cmp r0, r3
- beq _0801D444
- movs r7, #0x10
- rsbs r7, r7, #0
- adds r4, r0, #0
- ldr r6, _0801D454 @ =gUnk_020000C0
-_0801D3CA:
- ldrb r0, [r3, #8]
- cmp r0, #9
- beq _0801D43E
- adds r1, r3, #0
- adds r1, #0x28
- ldrb r0, [r1]
- subs r0, #1
- lsls r0, r0, #0x18
- lsrs r0, r0, #0x18
- cmp r0, #0x7e
- bhi _0801D40C
- ldrb r1, [r1]
- lsls r1, r1, #6
- adds r1, r1, r6
- ldrb r0, [r1, #5]
- add r0, sp
- ldrb r0, [r0]
- strb r0, [r1, #5]
- ldrb r0, [r1, #0x15]
- add r0, sp
- ldrb r0, [r0]
- strb r0, [r1, #0x15]
- adds r2, r1, #0
- adds r2, #0x25
- ldrb r0, [r2]
- add r0, sp
- ldrb r0, [r0]
- strb r0, [r2]
- adds r1, #0x35
- ldrb r0, [r1]
- add r0, sp
- ldrb r0, [r0]
- strb r0, [r1]
-_0801D40C:
- adds r1, r3, #0
- adds r1, #0x27
- ldrb r0, [r1]
- add r0, sp
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r2, [r3, #0x1a]
- lsls r0, r2, #0x1c
- lsrs r0, r0, #0x1c
- add r0, sp
- ldrb r1, [r0]
- movs r0, #0xf
- ands r1, r0
- adds r0, r7, #0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, #0x1a]
- lsrs r1, r0, #4
- add r1, sp
- ldrb r2, [r1]
- lsls r2, r2, #4
- movs r1, #0xf
- ands r0, r1
- orrs r0, r2
- strb r0, [r3, #0x1a]
-_0801D43E:
- ldr r3, [r3, #4]
- cmp r4, r3
- bne _0801D3CA
-_0801D444:
- adds r1, r5, #0
- cmp r1, #8
- bls _0801D3B2
- add sp, #0x10
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801D450: .4byte gEntityLists
-_0801D454: .4byte gUnk_020000C0
-
- thumb_func_start sub_0801D458
-sub_0801D458: @ 0x0801D458
- push {lr}
- adds r2, r0, #0
- cmp r2, #0xf
- bhi _0801D488
- ldr r1, _0801D47C @ =gPaletteList
- lsls r0, r2, #2
- adds r1, r0, r1
-_0801D466:
- ldrb r0, [r1]
- lsls r0, r0, #0x1c
- lsrs r0, r0, #0x1c
- cmp r0, #0
- blt _0801D478
- cmp r0, #1
- ble _0801D480
- cmp r0, #4
- beq _0801D480
-_0801D478:
- adds r0, r2, #0
- b _0801D48A
- .align 2, 0
-_0801D47C: .4byte gPaletteList
-_0801D480:
- adds r1, #4
- adds r2, #1
- cmp r2, #0xf
- bls _0801D466
-_0801D488:
- movs r0, #0
-_0801D48A:
- pop {pc}
-
- thumb_func_start sub_0801D48C
-sub_0801D48C: @ 0x0801D48C
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- sub sp, #4
- adds r6, r0, #0
- adds r3, r1, #0
- ldr r0, _0801D50C @ =gPaletteList
- mov r8, r0
- lsls r0, r6, #2
- mov r1, r8
- adds r4, r0, r1
- ldrb r0, [r4]
- lsrs r5, r0, #4
- subs r5, #1
- movs r0, #1
- rsbs r0, r0, #0
- cmp r5, r0
- beq _0801D4F8
- ldr r2, _0801D510 @ =gPaletteBuffer
- lsls r0, r3, #5
- movs r1, #0x80
- lsls r1, r1, #2
- adds r0, r0, r1
- adds r7, r0, r2
- lsls r0, r3, #2
- add r8, r0
- lsls r0, r6, #5
- adds r0, r0, r1
- adds r6, r0, r2
- movs r3, #0
-_0801D4C8:
- ldr r0, [r4]
- mov r1, r8
- adds r1, #4
- mov r8, r1
- subs r1, #4
- stm r1!, {r0}
- strb r3, [r4]
- strb r3, [r4, #1]
- strh r3, [r4, #2]
- adds r0, r6, #0
- adds r1, r7, #0
- movs r2, #0x20
- str r3, [sp]
- bl MemCopy
- adds r6, #0x20
- adds r4, #4
- adds r7, #0x20
- subs r5, #1
- movs r0, #1
- rsbs r0, r0, #0
- ldr r3, [sp]
- cmp r5, r0
- bne _0801D4C8
-_0801D4F8:
- ldr r0, _0801D514 @ =gUsedPalettes
- ldr r1, [r0]
- ldr r2, _0801D518 @ =0xFFFF0000
- orrs r1, r2
- str r1, [r0]
- add sp, #4
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801D50C: .4byte gPaletteList
-_0801D510: .4byte gPaletteBuffer
-_0801D514: .4byte gUsedPalettes
-_0801D518: .4byte 0xFFFF0000
-
- thumb_func_start sub_0801D51C
-sub_0801D51C: @ 0x0801D51C
- push {r4, lr}
- adds r2, r0, #0
- ldr r0, _0801D58C @ =0x05F5E0FF
- cmp r2, r0
- bhi _0801D5A0
- ldr r1, _0801D590 @ =0x00989680
- adds r0, r2, #0
- bl Div
- adds r4, r0, #0
- lsls r4, r4, #0x1c
- ldr r2, _0801D594 @ =0x000F4240
- adds r0, r1, #0
- adds r1, r2, #0
- bl Div
- lsls r0, r0, #0x18
- adds r4, r4, r0
- ldr r2, _0801D598 @ =0x000186A0
- adds r0, r1, #0
- adds r1, r2, #0
- bl Div
- lsls r0, r0, #0x14
- adds r4, r4, r0
- ldr r2, _0801D59C @ =0x00002710
- adds r0, r1, #0
- adds r1, r2, #0
- bl Div
- lsls r0, r0, #0x10
- adds r4, r4, r0
- movs r2, #0xfa
- lsls r2, r2, #2
- adds r0, r1, #0
- adds r1, r2, #0
- bl Div
- lsls r0, r0, #0xc
- adds r4, r4, r0
- adds r0, r1, #0
- movs r1, #0x64
- bl Div
- lsls r0, r0, #8
- adds r4, r4, r0
- adds r0, r1, #0
- movs r1, #0xa
- bl Div
- lsls r0, r0, #4
- adds r4, r4, r0
- adds r4, r4, r1
- adds r0, r4, #0
- b _0801D5A2
- .align 2, 0
-_0801D58C: .4byte 0x05F5E0FF
-_0801D590: .4byte 0x00989680
-_0801D594: .4byte 0x000F4240
-_0801D598: .4byte 0x000186A0
-_0801D59C: .4byte 0x00002710
-_0801D5A0:
- ldr r0, _0801D5A4 @ =0x99999999
-_0801D5A2:
- pop {r4, pc}
- .align 2, 0
-_0801D5A4: .4byte 0x99999999
-
- thumb_func_start ReadBit
-ReadBit: @ 0x0801D5A8
- lsrs r2, r1, #3
- adds r0, r0, r2
- ldrb r0, [r0]
- movs r2, #7
- ands r2, r1
- asrs r0, r2
- movs r1, #1
- ands r0, r1
- bx lr
- .align 2, 0
-
- thumb_func_start WriteBit
-WriteBit: @ 0x0801D5BC
- lsrs r2, r1, #3
- adds r3, r0, r2
- movs r2, #7
- ands r1, r2
- movs r2, #1
- lsls r2, r1
- ldrb r0, [r3]
- adds r1, r0, #0
- orrs r1, r2
- strb r1, [r3]
- ands r0, r2
- bx lr
-
- thumb_func_start ClearBit
-ClearBit: @ 0x0801D5D4
- lsrs r2, r1, #3
- adds r3, r0, r2
- movs r2, #7
- ands r1, r2
- movs r2, #1
- lsls r2, r1
- ldrb r0, [r3]
- adds r1, r0, #0
- bics r1, r2
- strb r1, [r3]
- ands r0, r2
- bx lr
diff --git a/asm/code_0805436C.s b/asm/code_0805436C.s
index 2def72dc..f8afffbf 100644
--- a/asm/code_0805436C.s
+++ b/asm/code_0805436C.s
@@ -75,7 +75,7 @@ sub_08054920: @ 0x08054920
bl MessageInitialize
bl sub_0806F38C
ldr r1, _08054948 @ =gUnk_080C9CBC
- ldr r0, _0805494C @ =gUnk_02022740
+ ldr r0, _0805494C @ =gFuseInfo
ldrb r0, [r0, #3]
lsls r0, r0, #3
adds r0, r0, r1
@@ -89,7 +89,7 @@ sub_08054920: @ 0x08054920
b _08054962
.align 2, 0
_08054948: .4byte gUnk_080C9CBC
-_0805494C: .4byte gUnk_02022740
+_0805494C: .4byte gFuseInfo
_08054950: .4byte gUnk_02032EC0
_08054954:
ldr r1, _08054964 @ =gUnk_02032EC0
diff --git a/asm/non_matching/color/CleanUpObjPalettes.inc b/asm/non_matching/color/CleanUpObjPalettes.inc
new file mode 100644
index 00000000..f59b5a92
--- /dev/null
+++ b/asm/non_matching/color/CleanUpObjPalettes.inc
@@ -0,0 +1,141 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ sub sp, #0x10
+ movs r2, #0
+ movs r3, #0
+ ldr r1, _0801D37C @ =gPaletteList
+_0801D356:
+ mov r4, sp
+ adds r0, r4, r2
+ strb r2, [r0]
+ ldrb r0, [r1]
+ lsls r0, r0, #0x1c
+ lsrs r0, r0, #0x1c
+ cmp r0, #1
+ bgt _0801D370
+ cmp r0, #0
+ blt _0801D370
+ strb r3, [r1]
+ strb r3, [r1, #1]
+ strh r3, [r1, #2]
+_0801D370:
+ adds r1, #4
+ adds r2, #1
+ cmp r2, #0xf
+ bls _0801D356
+ movs r4, #6
+ b _0801D390
+ .align 2, 0
+_0801D37C: .4byte gPaletteList
+_0801D380:
+ cmp r4, r1
+ ble _0801D390
+ mov r2, sp
+ adds r0, r2, r4
+ strb r1, [r0]
+ adds r0, r4, #0
+ bl sub_0801D48C
+_0801D390:
+ adds r0, r4, #1
+ bl sub_0801D458
+ adds r4, r0, #0
+ cmp r4, #0
+ beq _0801D3AC
+ movs r0, #1
+ bl FindFreeObjPalette
+ adds r1, r0, #0
+ movs r0, #1
+ rsbs r0, r0, #0
+ cmp r1, r0
+ bne _0801D380
+_0801D3AC:
+ movs r1, #0
+ ldr r4, _0801D450 @ =gEntityLists
+ mov ip, r4
+_0801D3B2:
+ lsls r0, r1, #3
+ mov r2, ip
+ adds r3, r0, r2
+ adds r0, r3, #0
+ ldr r3, [r3, #4]
+ adds r5, r1, #1
+ cmp r0, r3
+ beq _0801D444
+ movs r7, #0x10
+ rsbs r7, r7, #0
+ adds r4, r0, #0
+ ldr r6, _0801D454 @ =gUnk_020000C0
+_0801D3CA:
+ ldrb r0, [r3, #8]
+ cmp r0, #9
+ beq _0801D43E
+ adds r1, r3, #0
+ adds r1, #0x28
+ ldrb r0, [r1]
+ subs r0, #1
+ lsls r0, r0, #0x18
+ lsrs r0, r0, #0x18
+ cmp r0, #0x7e
+ bhi _0801D40C
+ ldrb r1, [r1]
+ lsls r1, r1, #6
+ adds r1, r1, r6
+ ldrb r0, [r1, #5]
+ add r0, sp
+ ldrb r0, [r0]
+ strb r0, [r1, #5]
+ ldrb r0, [r1, #0x15]
+ add r0, sp
+ ldrb r0, [r0]
+ strb r0, [r1, #0x15]
+ adds r2, r1, #0
+ adds r2, #0x25
+ ldrb r0, [r2]
+ add r0, sp
+ ldrb r0, [r0]
+ strb r0, [r2]
+ adds r1, #0x35
+ ldrb r0, [r1]
+ add r0, sp
+ ldrb r0, [r0]
+ strb r0, [r1]
+_0801D40C:
+ adds r1, r3, #0
+ adds r1, #0x27
+ ldrb r0, [r1]
+ add r0, sp
+ ldrb r0, [r0]
+ strb r0, [r1]
+ ldrb r2, [r3, #0x1a]
+ lsls r0, r2, #0x1c
+ lsrs r0, r0, #0x1c
+ add r0, sp
+ ldrb r1, [r0]
+ movs r0, #0xf
+ ands r1, r0
+ adds r0, r7, #0
+ ands r0, r2
+ orrs r0, r1
+ strb r0, [r3, #0x1a]
+ lsrs r1, r0, #4
+ add r1, sp
+ ldrb r2, [r1]
+ lsls r2, r2, #4
+ movs r1, #0xf
+ ands r0, r1
+ orrs r0, r2
+ strb r0, [r3, #0x1a]
+_0801D43E:
+ ldr r3, [r3, #4]
+ cmp r4, r3
+ bne _0801D3CA
+_0801D444:
+ adds r1, r5, #0
+ cmp r1, #8
+ bls _0801D3B2
+ add sp, #0x10
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801D450: .4byte gEntityLists
+_0801D454: .4byte gUnk_020000C0
+ .syntax divided
diff --git a/asm/non_matching/color/FindFreeObjPalette.inc b/asm/non_matching/color/FindFreeObjPalette.inc
new file mode 100644
index 00000000..a6a641cd
--- /dev/null
+++ b/asm/non_matching/color/FindFreeObjPalette.inc
@@ -0,0 +1,60 @@
+ .syntax unified
+ push {r4, lr}
+ adds r4, r0, #0
+ movs r1, #0
+ movs r2, #6
+ ldr r0, _0801D154 @ =gPaletteList
+ adds r3, r0, #0
+ adds r3, #0x18
+_0801D142:
+ ldrb r0, [r3]
+ lsls r0, r0, #0x1c
+ cmp r0, #0
+ bne _0801D158
+ adds r1, #1
+ cmp r4, r1
+ bhi _0801D15A
+ b _0801D180
+ .align 2, 0
+_0801D154: .4byte gPaletteList
+_0801D158:
+ movs r1, #0
+_0801D15A:
+ adds r3, #4
+ adds r2, #1
+ cmp r2, #0xf
+ bls _0801D142
+ movs r1, #0
+ movs r2, #6
+ ldr r0, _0801D188 @ =gPaletteList
+ adds r3, r0, #0
+ adds r3, #0x18
+_0801D16C:
+ ldrb r0, [r3]
+ lsls r0, r0, #0x1c
+ lsrs r0, r0, #0x1c
+ cmp r0, #1
+ bgt _0801D18C
+ cmp r0, #0
+ blt _0801D18C
+ adds r1, #1
+ cmp r4, r1
+ bhi _0801D18E
+_0801D180:
+ subs r0, r1, #1
+ subs r0, r2, r0
+ b _0801D19A
+ .align 2, 0
+_0801D188: .4byte gPaletteList
+_0801D18C:
+ movs r1, #0
+_0801D18E:
+ adds r3, #4
+ adds r2, #1
+ cmp r2, #0xf
+ bls _0801D16C
+ movs r0, #1
+ rsbs r0, r0, #0
+_0801D19A:
+ pop {r4, pc}
+ .syntax divided
diff --git a/asm/non_matching/color/FindPalette.inc b/asm/non_matching/color/FindPalette.inc
new file mode 100644
index 00000000..c21b6db3
--- /dev/null
+++ b/asm/non_matching/color/FindPalette.inc
@@ -0,0 +1,28 @@
+ .syntax unified
+ push {lr}
+ adds r2, r0, #0
+ cmp r2, #5
+ bhi _0801D116
+ b _0801D12E
+_0801D112:
+ adds r0, r1, #0
+ b _0801D12E
+_0801D116:
+ movs r1, #6
+ ldr r0, _0801D130 @ =gPaletteList
+ adds r0, #0x18
+_0801D11C:
+ ldrh r3, [r0, #2]
+ cmp r2, r3
+ beq _0801D112
+ adds r0, #4
+ adds r1, #1
+ cmp r1, #0xf
+ bls _0801D11C
+ movs r0, #1
+ rsbs r0, r0, #0
+_0801D12E:
+ pop {pc}
+ .align 2, 0
+_0801D130: .4byte gPaletteList
+ .syntax divided
diff --git a/asm/non_matching/color/LoadObjPalette.inc b/asm/non_matching/color/LoadObjPalette.inc
new file mode 100644
index 00000000..e92d382a
--- /dev/null
+++ b/asm/non_matching/color/LoadObjPalette.inc
@@ -0,0 +1,100 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, sl
+ mov r6, sb
+ mov r5, r8
+ push {r5, r6, r7}
+ sub sp, #4
+ str r0, [sp]
+ adds r6, r1, #0
+ adds r0, r6, #0
+ bl FindPalette
+ adds r5, r0, #0
+ cmp r5, #0
+ bge _0801D0E8
+ cmp r6, #0x15
+ bhi _0801D064
+ movs r4, #1
+ b _0801D074
+_0801D064:
+ ldr r0, _0801D100 @ =gUnk_08133368
+ adds r1, r6, #0
+ subs r1, #0x16
+ lsls r1, r1, #2
+ adds r1, r1, r0
+ ldrb r4, [r1, #3]
+ movs r0, #0xf
+ ands r4, r0
+_0801D074:
+ adds r0, r4, #0
+ bl FindFreeObjPalette
+ adds r5, r0, #0
+ cmp r5, #0
+ bge _0801D090
+ bl CleanUpObjPalettes
+ adds r0, r4, #0
+ bl FindFreeObjPalette
+ adds r5, r0, #0
+ cmp r5, #0
+ blt _0801D0E8
+_0801D090:
+ lsls r1, r5, #2
+ ldr r0, _0801D104 @ =gPaletteList
+ adds r3, r1, r0
+ movs r0, #0
+ strh r6, [r3, #2]
+ strb r0, [r3, #1]
+ movs r2, #0x10
+ rsbs r2, r2, #0
+ lsls r0, r4, #4
+ movs r1, #3
+ orrs r0, r1
+ strb r0, [r3]
+ subs r4, #1
+ cmp r4, #0
+ beq _0801D0E0
+ movs r0, #0
+ mov sl, r0
+ movs r1, #0
+ mov r8, r1
+ movs r0, #0xf
+ mov sb, r0
+ mov ip, r2
+ movs r7, #2
+_0801D0BE:
+ adds r3, #4
+ mov r1, r8
+ strh r1, [r3, #2]
+ mov r0, sl
+ strb r0, [r3, #1]
+ lsls r2, r4, #4
+ ldrb r1, [r3]
+ mov r0, sb
+ ands r0, r1
+ orrs r0, r2
+ mov r1, ip
+ ands r0, r1
+ orrs r0, r7
+ strb r0, [r3]
+ subs r4, #1
+ cmp r4, #0
+ bne _0801D0BE
+_0801D0E0:
+ adds r0, r6, #0
+ adds r1, r5, #0
+ bl LoadObjPaletteAtIndex
+_0801D0E8:
+ ldr r0, [sp]
+ adds r1, r5, #0
+ bl SetEntityObjPalette
+ adds r0, r5, #0
+ add sp, #4
+ pop {r3, r4, r5}
+ mov r8, r3
+ mov sb, r4
+ mov sl, r5
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801D100: .4byte gUnk_08133368
+_0801D104: .4byte gPaletteList
+ .syntax divided
diff --git a/asm/non_matching/color/LoadObjPaletteAtIndex.inc b/asm/non_matching/color/LoadObjPaletteAtIndex.inc
new file mode 100644
index 00000000..43d8ab8e
--- /dev/null
+++ b/asm/non_matching/color/LoadObjPaletteAtIndex.inc
@@ -0,0 +1,63 @@
+ .syntax unified
+ push {r4, lr}
+ adds r3, r0, #0
+ ldr r2, _0801D2F8 @ =gUsedPalettes
+ adds r4, r1, #0
+ adds r4, #0x10
+ movs r1, #1
+ lsls r1, r4
+ ldr r0, [r2]
+ orrs r0, r1
+ str r0, [r2]
+ cmp r3, #5
+ bls _0801D33C
+ cmp r3, #0x15
+ bne _0801D300
+ ldr r2, _0801D2FC @ =gPaletteBuffer
+ adds r0, r2, #0
+ adds r0, #0x78
+ ldrh r0, [r0]
+ lsls r1, r4, #5
+ adds r1, r1, r2
+ movs r2, #0x20
+ bl MemFill16
+ b _0801D33C
+ .align 2, 0
+_0801D2F8: .4byte gUsedPalettes
+_0801D2FC: .4byte gPaletteBuffer
+_0801D300:
+ cmp r3, #0x14
+ bhi _0801D31C
+ subs r0, r3, #6
+ lsls r0, r0, #5
+ ldr r1, _0801D318 @ =gPaletteBuffer
+ adds r0, r0, r1
+ adds r1, r4, #0
+ movs r2, #1
+ bl LoadPalettes
+ b _0801D33C
+ .align 2, 0
+_0801D318: .4byte gPaletteBuffer
+_0801D31C:
+ ldr r1, _0801D340 @ =gUnk_08133368
+ adds r0, r3, #0
+ subs r0, #0x16
+ lsls r0, r0, #2
+ adds r0, r0, r1
+ ldr r0, [r0]
+ lsrs r2, r0, #0x18
+ movs r1, #0xf
+ ands r2, r1
+ ldr r1, _0801D344 @ =0x00FFFFFF
+ ands r0, r1
+ ldr r1, _0801D348 @ =gGlobalGfxAndPalettes
+ adds r0, r0, r1
+ adds r1, r4, #0
+ bl LoadPalettes
+_0801D33C:
+ pop {r4, pc}
+ .align 2, 0
+_0801D340: .4byte gUnk_08133368
+_0801D344: .4byte 0x00FFFFFF
+_0801D348: .4byte gGlobalGfxAndPalettes
+ .syntax divided
diff --git a/asm/non_matching/color/SetEntityObjPalette.inc b/asm/non_matching/color/SetEntityObjPalette.inc
new file mode 100644
index 00000000..38a34a20
--- /dev/null
+++ b/asm/non_matching/color/SetEntityObjPalette.inc
@@ -0,0 +1,80 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ adds r4, r0, #0
+ adds r3, r1, #0
+ cmp r3, #0
+ bge _0801D1A8
+ movs r3, #0
+_0801D1A8:
+ adds r0, r4, #0
+ adds r0, #0x28
+ ldrb r0, [r0]
+ subs r0, #1
+ lsls r0, r0, #0x18
+ lsrs r0, r0, #0x18
+ cmp r0, #0x7e
+ bls _0801D1BE
+ adds r0, r4, #0
+ adds r0, #0x27
+ strb r3, [r0]
+_0801D1BE:
+ movs r0, #0xf
+ adds r1, r3, #0
+ ands r1, r0
+ ldrb r2, [r4, #0x1a]
+ movs r5, #0x10
+ rsbs r5, r5, #0
+ adds r0, r5, #0
+ ands r0, r2
+ orrs r0, r1
+ movs r2, #0xf
+ adds r1, r3, #0
+ ands r1, r2
+ lsls r1, r1, #4
+ ands r0, r2
+ orrs r0, r1
+ strb r0, [r4, #0x1a]
+ lsls r1, r3, #2
+ ldr r0, _0801D22C @ =gPaletteList
+ adds r4, r1, r0
+ ldr r0, [r4]
+ lsls r0, r0, #0x1c
+ lsrs r0, r0, #0x1c
+ cmp r0, #4
+ beq _0801D22A
+ ldrb r0, [r4, #1]
+ adds r0, #1
+ strb r0, [r4, #1]
+ ldr r0, [r4]
+ lsls r0, r0, #0x18
+ lsrs r3, r0, #0x1c
+ ldrb r1, [r4]
+ adds r0, r5, #0
+ ands r0, r1
+ movs r1, #3
+ orrs r0, r1
+ strb r0, [r4]
+ subs r3, #1
+ cmp r3, #0
+ beq _0801D22A
+ movs r7, #0xf
+ adds r6, r5, #0
+ movs r5, #2
+_0801D212:
+ adds r4, #4
+ lsls r2, r3, #4
+ ldrb r1, [r4]
+ adds r0, r7, #0
+ ands r0, r1
+ orrs r0, r2
+ ands r0, r6
+ orrs r0, r5
+ strb r0, [r4]
+ subs r3, #1
+ cmp r3, #0
+ bne _0801D212
+_0801D22A:
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801D22C: .4byte gPaletteList
+ .syntax divided
diff --git a/asm/non_matching/color/sub_0801D000.inc b/asm/non_matching/color/sub_0801D000.inc
new file mode 100644
index 00000000..5fb7e436
--- /dev/null
+++ b/asm/non_matching/color/sub_0801D000.inc
@@ -0,0 +1,34 @@
+ .syntax unified
+ push {lr}
+ adds r2, r0, #0
+ ldr r0, _0801D024 @ =gScreenTransition
+ movs r1, #0
+ cmp r2, #0
+ beq _0801D00E
+ movs r1, #0xf
+_0801D00E:
+ adds r0, #0x2f
+ strb r1, [r0]
+ cmp r2, #0
+ beq _0801D028
+ bl CleanUpObjPalettes
+ movs r0, #0xf
+ bl sub_0801CFD0
+ b _0801D03A
+ .align 2, 0
+_0801D024: .4byte gScreenTransition
+_0801D028:
+ ldr r3, _0801D03C @ =gUnk_02001A3C
+ ldrb r1, [r3]
+ movs r0, #0xf
+ ands r0, r1
+ cmp r0, #4
+ bne _0801D03A
+ strb r2, [r3]
+ strb r2, [r3, #1]
+ strh r2, [r3, #2]
+_0801D03A:
+ pop {pc}
+ .align 2, 0
+_0801D03C: .4byte gUnk_02001A3C
+ .syntax divided
diff --git a/asm/non_matching/color/sub_0801D244.inc b/asm/non_matching/color/sub_0801D244.inc
new file mode 100644
index 00000000..e787b46f
--- /dev/null
+++ b/asm/non_matching/color/sub_0801D244.inc
@@ -0,0 +1,39 @@
+ .syntax unified
+ push {r4, r5, r6, lr}
+ lsls r0, r0, #2
+ ldr r1, _0801D288 @ =gPaletteList
+ adds r2, r0, r1
+ ldr r0, [r2]
+ lsls r0, r0, #0x1c
+ lsrs r0, r0, #0x1c
+ cmp r0, #3
+ bne _0801D284
+ ldrb r0, [r2, #1]
+ subs r0, #1
+ strb r0, [r2, #1]
+ lsls r0, r0, #0x18
+ cmp r0, #0
+ bne _0801D284
+ ldr r0, [r2]
+ lsls r0, r0, #0x18
+ lsrs r3, r0, #0x1c
+ movs r5, #0
+ movs r6, #0x10
+ rsbs r6, r6, #0
+ movs r4, #1
+_0801D270:
+ strb r5, [r2, #1]
+ ldrb r1, [r2]
+ adds r0, r6, #0
+ ands r0, r1
+ orrs r0, r4
+ strb r0, [r2]
+ adds r2, #4
+ subs r3, #1
+ cmp r3, #0
+ bne _0801D270
+_0801D284:
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_0801D288: .4byte gPaletteList
+ .syntax divided
diff --git a/asm/non_matching/color/sub_0801D48C.inc b/asm/non_matching/color/sub_0801D48C.inc
new file mode 100644
index 00000000..2c51c2f1
--- /dev/null
+++ b/asm/non_matching/color/sub_0801D48C.inc
@@ -0,0 +1,71 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, r8
+ push {r7}
+ sub sp, #4
+ adds r6, r0, #0
+ adds r3, r1, #0
+ ldr r0, _0801D50C @ =gPaletteList
+ mov r8, r0
+ lsls r0, r6, #2
+ mov r1, r8
+ adds r4, r0, r1
+ ldrb r0, [r4]
+ lsrs r5, r0, #4
+ subs r5, #1
+ movs r0, #1
+ rsbs r0, r0, #0
+ cmp r5, r0
+ beq _0801D4F8
+ ldr r2, _0801D510 @ =gPaletteBuffer
+ lsls r0, r3, #5
+ movs r1, #0x80
+ lsls r1, r1, #2
+ adds r0, r0, r1
+ adds r7, r0, r2
+ lsls r0, r3, #2
+ add r8, r0
+ lsls r0, r6, #5
+ adds r0, r0, r1
+ adds r6, r0, r2
+ movs r3, #0
+_0801D4C8:
+ ldr r0, [r4]
+ mov r1, r8
+ adds r1, #4
+ mov r8, r1
+ subs r1, #4
+ stm r1!, {r0}
+ strb r3, [r4]
+ strb r3, [r4, #1]
+ strh r3, [r4, #2]
+ adds r0, r6, #0
+ adds r1, r7, #0
+ movs r2, #0x20
+ str r3, [sp]
+ bl MemCopy
+ adds r6, #0x20
+ adds r4, #4
+ adds r7, #0x20
+ subs r5, #1
+ movs r0, #1
+ rsbs r0, r0, #0
+ ldr r3, [sp]
+ cmp r5, r0
+ bne _0801D4C8
+_0801D4F8:
+ ldr r0, _0801D514 @ =gUsedPalettes
+ ldr r1, [r0]
+ ldr r2, _0801D518 @ =0xFFFF0000
+ orrs r1, r2
+ str r1, [r0]
+ add sp, #4
+ pop {r3}
+ mov r8, r3
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801D50C: .4byte gPaletteList
+_0801D510: .4byte gPaletteBuffer
+_0801D514: .4byte gUsedPalettes
+_0801D518: .4byte 0xFFFF0000
+ .syntax divided
diff --git a/asm/non_matching/common/ClearBit.inc b/asm/non_matching/common/ClearBit.inc
new file mode 100644
index 00000000..0d34ceb5
--- /dev/null
+++ b/asm/non_matching/common/ClearBit.inc
@@ -0,0 +1,14 @@
+ .syntax unified
+ lsrs r2, r1, #3
+ adds r3, r0, r2
+ movs r2, #7
+ ands r1, r2
+ movs r2, #1
+ lsls r2, r1
+ ldrb r0, [r3]
+ adds r1, r0, #0
+ bics r1, r2
+ strb r1, [r3]
+ ands r0, r2
+ bx lr
+ .syntax divided
diff --git a/asm/non_matching/common/DrawDungeonFeatures.inc b/asm/non_matching/common/DrawDungeonFeatures.inc
new file mode 100644
index 00000000..706d8c96
--- /dev/null
+++ b/asm/non_matching/common/DrawDungeonFeatures.inc
@@ -0,0 +1,179 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, sl
+ mov r6, sb
+ mov r5, r8
+ push {r5, r6, r7}
+ sub sp, #0x14
+ adds r4, r0, #0
+ bl CheckHasMap
+ cmp r0, #0
+ bne _0801DDB8
+ b _0801DEEA
+_0801DDB8:
+ ldr r1, _0801DDD8 @ =gUnk_080C9C50
+ ldr r0, _0801DDDC @ =gArea
+ ldrb r0, [r0, #3]
+ lsls r0, r0, #2
+ adds r0, r0, r1
+ ldr r1, [r0]
+ lsls r0, r4, #2
+ adds r0, r0, r1
+ ldr r4, [r0]
+ ldr r0, _0801DDE0 @ =gUnk_02019EE0
+ movs r1, #0x80
+ lsls r1, r1, #8
+ bl MemClear
+ b _0801DEE2
+ .align 2, 0
+_0801DDD8: .4byte gUnk_080C9C50
+_0801DDDC: .4byte gArea
+_0801DDE0: .4byte gUnk_02019EE0
+_0801DDE4:
+ ldrb r0, [r4]
+ ldrb r1, [r4, #1]
+ movs r2, #3
+ bl GetRoomProperty
+ adds r6, r0, #0
+ adds r0, r4, #0
+ bl sub_0801DF10
+ adds r5, r0, #0
+ movs r0, #0
+ str r0, [sp, #0xc]
+ ldrh r2, [r4]
+ ldr r0, _0801DE14 @ =gUnk_02032EC0
+ ldrh r3, [r0, #0x20]
+ ldr r1, _0801DE18 @ =0x0000FFFF
+ ands r1, r2
+ ldr r0, _0801DE18 @ =0x0000FFFF
+ ands r0, r3
+ cmp r1, r0
+ bne _0801DE1C
+ movs r3, #8
+ b _0801DE36
+ .align 2, 0
+_0801DE14: .4byte gUnk_02032EC0
+_0801DE18: .4byte 0x0000FFFF
+_0801DE1C:
+ bl HasDungeonSmallKey
+ cmp r0, #0
+ beq _0801DE28
+ movs r0, #2
+ str r0, [sp, #0xc]
+_0801DE28:
+ adds r0, r6, #0
+ adds r1, r5, #0
+ bl sub_0801DF90
+ cmp r0, #0
+ beq _0801DE38
+ movs r3, #3
+_0801DE36:
+ str r3, [sp, #0xc]
+_0801DE38:
+ ldrb r1, [r4, #2]
+ movs r0, #1
+ ands r0, r1
+ cmp r0, #0
+ beq _0801DE46
+ movs r0, #0
+ str r0, [sp, #0xc]
+_0801DE46:
+ adds r3, r4, #0
+ adds r3, #8
+ str r3, [sp, #0x10]
+ ldr r0, [sp, #0xc]
+ cmp r0, #0
+ beq _0801DEE0
+ ldr r2, _0801DEF8 @ =0x040000D4
+ ldr r0, [r4, #4]
+ ldr r1, _0801DEFC @ =gMapData
+ adds r0, r0, r1
+ str r0, [r2]
+ ldr r0, _0801DF00 @ =gUnk_02019EE0
+ str r0, [r2, #4]
+ ldr r0, _0801DF04 @ =0x84000100
+ str r0, [r2, #8]
+ ldr r0, [r2, #8]
+ ldr r0, _0801DF08 @ =gAreaRoomHeaders
+ ldrb r2, [r4]
+ lsls r2, r2, #2
+ adds r2, r2, r0
+ ldrb r1, [r4, #1]
+ lsls r0, r1, #2
+ adds r0, r0, r1
+ lsls r0, r0, #1
+ ldr r2, [r2]
+ adds r2, r2, r0
+ ldrh r0, [r2]
+ lsrs r0, r0, #4
+ str r0, [sp]
+ ldrh r0, [r2, #2]
+ ldr r1, _0801DF0C @ =0x000007FF
+ ands r0, r1
+ lsrs r0, r0, #4
+ str r0, [sp, #4]
+ ldrh r0, [r2, #4]
+ lsrs r7, r0, #4
+ ldrh r0, [r2, #6]
+ lsrs r0, r0, #4
+ mov sl, r0
+ adds r0, r7, #3
+ lsrs r0, r0, #2
+ str r0, [sp, #8]
+ movs r6, #0
+ cmp r6, sl
+ bhs _0801DEE0
+_0801DEA0:
+ ldr r3, [sp, #8]
+ adds r1, r6, #0
+ muls r1, r3, r1
+ ldr r0, _0801DF00 @ =gUnk_02019EE0
+ adds r1, r1, r0
+ mov r8, r1
+ movs r5, #0
+ adds r0, r6, #1
+ mov sb, r0
+ cmp r5, r7
+ bhs _0801DEDA
+_0801DEB6:
+ ldr r3, [sp]
+ adds r4, r3, r5
+ adds r0, r5, #0
+ mov r1, r8
+ bl sub_0801DF60
+ ldr r1, [sp, #0xc]
+ bl sub_0801DF78
+ adds r2, r0, #0
+ adds r0, r4, #0
+ ldr r3, [sp, #4]
+ adds r1, r3, r6
+ bl sub_0801DF28
+ adds r5, #1
+ cmp r5, r7
+ blo _0801DEB6
+_0801DEDA:
+ mov r6, sb
+ cmp r6, sl
+ blo _0801DEA0
+_0801DEE0:
+ ldr r4, [sp, #0x10]
+_0801DEE2:
+ ldrb r0, [r4]
+ cmp r0, #0
+ beq _0801DEEA
+ b _0801DDE4
+_0801DEEA:
+ add sp, #0x14
+ pop {r3, r4, r5}
+ mov r8, r3
+ mov sb, r4
+ mov sl, r5
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801DEF8: .4byte 0x040000D4
+_0801DEFC: .4byte gMapData
+_0801DF00: .4byte gUnk_02019EE0
+_0801DF04: .4byte 0x84000100
+_0801DF08: .4byte gAreaRoomHeaders
+_0801DF0C: .4byte 0x000007FF
+ .syntax divided
diff --git a/asm/non_matching/common/DrawDungeonMap.inc b/asm/non_matching/common/DrawDungeonMap.inc
new file mode 100644
index 00000000..8d218546
--- /dev/null
+++ b/asm/non_matching/common/DrawDungeonMap.inc
@@ -0,0 +1,221 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, sb
+ mov r6, r8
+ push {r6, r7}
+ sub sp, #4
+ adds r4, r0, #0
+ adds r5, r1, #0
+ adds r1, r2, #0
+ adds r0, r5, #0
+ bl MemClear
+ movs r0, #1
+ strb r0, [r5]
+ ldr r2, _0801DBE4 @ =gScreenTransition
+ ldrh r0, [r2, #0x1c]
+ lsrs r0, r0, #4
+ movs r1, #0x7f
+ ands r0, r1
+ strb r0, [r5, #1]
+ ldrh r0, [r2, #0x1e]
+ lsrs r0, r0, #4
+ ands r0, r1
+ strb r0, [r5, #2]
+ adds r5, #3
+ ldr r1, _0801DBE8 @ =gUnk_080C9C50
+ ldr r0, _0801DBEC @ =gArea
+ ldrb r0, [r0, #3]
+ lsls r0, r0, #2
+ adds r0, r0, r1
+ ldr r0, [r0]
+ lsls r4, r4, #2
+ adds r4, r4, r0
+ ldr r6, [r4]
+ b _0801DD3A
+ .align 2, 0
+_0801DBE4: .4byte gScreenTransition
+_0801DBE8: .4byte gUnk_080C9C50
+_0801DBEC: .4byte gArea
+_0801DBF0:
+ ldrb r0, [r6]
+ ldrb r1, [r6, #1]
+ movs r2, #3
+ bl GetRoomProperty
+ adds r4, r0, #0
+ cmp r4, #0
+ bne _0801DC04
+ adds r6, #8
+ b _0801DD3A
+_0801DC04:
+ adds r0, r6, #0
+ bl sub_0801DF10
+ mov r8, r0
+ bl HasDungeonBigKey
+ movs r1, #8
+ adds r1, r1, r6
+ mov sb, r1
+ cmp r0, #0
+ beq _0801DCAE
+ ldrb r0, [r4]
+ cmp r0, #0
+ beq _0801DCAE
+ movs r3, #0xfc
+ lsls r3, r3, #2
+ ldr r7, _0801DC84 @ =0x000007FF
+_0801DC26:
+ ldrb r0, [r4]
+ cmp r0, #3
+ bgt _0801DCA6
+ cmp r0, #2
+ blt _0801DCA6
+ ldrb r1, [r4, #1]
+ mov r0, r8
+ str r3, [sp]
+ bl CheckLocalFlagByBank
+ ldr r3, [sp]
+ cmp r0, #0
+ bne _0801DCA6
+ ldr r0, _0801DC88 @ =gAreaRoomHeaders
+ ldrb r2, [r6]
+ lsls r2, r2, #2
+ adds r2, r2, r0
+ ldrb r1, [r6, #1]
+ lsls r0, r1, #2
+ adds r0, r0, r1
+ lsls r0, r0, #1
+ ldr r1, [r2]
+ adds r2, r1, r0
+ movs r0, #2
+ strb r0, [r5]
+ ldrb r0, [r4]
+ cmp r0, #2
+ bne _0801DC8C
+ ldrh r0, [r4, #4]
+ lsls r0, r0, #4
+ ands r0, r3
+ movs r1, #8
+ orrs r0, r1
+ ldrh r1, [r2]
+ ands r1, r7
+ adds r0, r0, r1
+ asrs r0, r0, #4
+ strb r0, [r5, #1]
+ ldrh r0, [r4, #4]
+ lsrs r0, r0, #2
+ ands r0, r3
+ movs r1, #8
+ orrs r0, r1
+ ldrh r1, [r2, #2]
+ ands r1, r7
+ b _0801DC9E
+ .align 2, 0
+_0801DC84: .4byte 0x000007FF
+_0801DC88: .4byte gAreaRoomHeaders
+_0801DC8C:
+ ldrh r0, [r2]
+ ands r0, r7
+ ldrh r1, [r4, #4]
+ adds r0, r0, r1
+ asrs r0, r0, #4
+ strb r0, [r5, #1]
+ ldrh r0, [r2, #2]
+ ands r0, r7
+ ldrh r1, [r4, #6]
+_0801DC9E:
+ adds r0, r0, r1
+ asrs r0, r0, #4
+ strb r0, [r5, #2]
+ adds r5, #3
+_0801DCA6:
+ adds r4, #8
+ ldrb r0, [r4]
+ cmp r0, #0
+ bne _0801DC26
+_0801DCAE:
+ bl HasDungeonBigKey
+ cmp r0, #0
+ beq _0801DD16
+ ldrb r1, [r6, #2]
+ movs r0, #2
+ ands r0, r1
+ cmp r0, #0
+ beq _0801DD16
+ ldr r0, _0801DD4C @ =gArea
+ ldrb r0, [r0, #3]
+ adds r0, #1
+ bl CheckGlobalFlag
+ cmp r0, #0
+ bne _0801DD16
+ ldr r0, _0801DD50 @ =gAreaRoomHeaders
+ ldrb r2, [r6]
+ lsls r2, r2, #2
+ adds r2, r2, r0
+ ldrb r1, [r6, #1]
+ lsls r0, r1, #2
+ adds r0, r0, r1
+ lsls r0, r0, #1
+ ldr r1, [r2]
+ adds r2, r1, r0
+ movs r0, #4
+ strb r0, [r5]
+ ldrh r0, [r2, #4]
+ lsrs r0, r0, #1
+ ldrh r1, [r2]
+ adds r0, r0, r1
+ asrs r1, r0, #4
+ adds r0, r1, #0
+ cmp r1, #0
+ bge _0801DCF8
+ adds r0, #0x7f
+_0801DCF8:
+ asrs r0, r0, #7
+ lsls r0, r0, #7
+ subs r0, r1, r0
+ strb r0, [r5, #1]
+ ldrh r0, [r2, #6]
+ lsrs r0, r0, #1
+ ldrh r2, [r2, #2]
+ adds r0, r0, r2
+ asrs r1, r0, #4
+ adds r0, r1, #0
+ asrs r0, r0, #7
+ lsls r0, r0, #7
+ subs r0, r1, r0
+ strb r0, [r5, #2]
+ adds r5, #3
+_0801DD16:
+ ldr r2, _0801DD54 @ =gScreenTransition
+ ldrh r0, [r6]
+ ldrh r1, [r2, #0x16]
+ cmp r0, r1
+ bne _0801DD38
+ movs r0, #3
+ strb r0, [r5]
+ ldrh r0, [r2, #0x18]
+ lsrs r0, r0, #4
+ movs r1, #0x7f
+ ands r0, r1
+ strb r0, [r5, #1]
+ ldrh r0, [r2, #0x1a]
+ lsrs r0, r0, #4
+ ands r0, r1
+ strb r0, [r5, #2]
+ adds r5, #3
+_0801DD38:
+ mov r6, sb
+_0801DD3A:
+ ldrb r0, [r6]
+ cmp r0, #0
+ beq _0801DD42
+ b _0801DBF0
+_0801DD42:
+ add sp, #4
+ pop {r3, r4}
+ mov r8, r3
+ mov sb, r4
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801DD4C: .4byte gArea
+_0801DD50: .4byte gAreaRoomHeaders
+_0801DD54: .4byte gScreenTransition
+ .syntax divided
diff --git a/asm/non_matching/common/WriteBit.inc b/asm/non_matching/common/WriteBit.inc
new file mode 100644
index 00000000..7986e488
--- /dev/null
+++ b/asm/non_matching/common/WriteBit.inc
@@ -0,0 +1,14 @@
+ .syntax unified
+ lsrs r2, r1, #3
+ adds r3, r0, r2
+ movs r2, #7
+ ands r1, r2
+ movs r2, #1
+ lsls r2, r1
+ ldrb r0, [r3]
+ adds r1, r0, #0
+ orrs r1, r2
+ strb r1, [r3]
+ ands r0, r2
+ bx lr
+ .syntax divided
diff --git a/asm/non_matching/common/sub_0801D898.inc b/asm/non_matching/common/sub_0801D898.inc
new file mode 100644
index 00000000..571024f1
--- /dev/null
+++ b/asm/non_matching/common/sub_0801D898.inc
@@ -0,0 +1,39 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ adds r5, r0, #0
+ adds r4, r1, #0
+ adds r6, r2, #0
+ movs r0, #0x80
+ lsls r0, r0, #8
+ ands r0, r3
+ movs r1, #0x20
+ mov ip, r1
+ cmp r0, #0
+ beq _0801D8B2
+ movs r0, #0x40
+ mov ip, r0
+_0801D8B2:
+ ldr r0, _0801D8D8 @ =0x00007FFF
+ ands r3, r0
+ ldr r1, _0801D8DC @ =0x040000D4
+ movs r2, #0x80
+ lsls r2, r2, #0x18
+ orrs r2, r6
+ lsls r7, r6, #1
+ mov r0, ip
+ lsls r6, r0, #1
+_0801D8C4:
+ str r4, [r1]
+ str r5, [r1, #4]
+ str r2, [r1, #8]
+ ldr r0, [r1, #8]
+ adds r4, r4, r7
+ adds r5, r5, r6
+ subs r3, #1
+ cmp r3, #0
+ bne _0801D8C4
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801D8D8: .4byte 0x00007FFF
+_0801D8DC: .4byte 0x040000D4
+ .syntax divided
diff --git a/asm/non_matching/common/sub_0801DF28.inc b/asm/non_matching/common/sub_0801DF28.inc
new file mode 100644
index 00000000..4d22a8f0
--- /dev/null
+++ b/asm/non_matching/common/sub_0801DF28.inc
@@ -0,0 +1,28 @@
+ .syntax unified
+ push {r4, lr}
+ lsrs r4, r1, #3
+ lsls r4, r4, #4
+ lsrs r3, r0, #3
+ adds r4, r4, r3
+ lsls r4, r4, #5
+ ldr r3, _0801DF58 @ =gUnk_0201AEE0
+ adds r4, r4, r3
+ movs r3, #7
+ ands r1, r3
+ lsls r1, r1, #2
+ adds r4, r4, r1
+ ands r0, r3
+ lsls r0, r0, #2
+ lsls r2, r0
+ ldr r1, _0801DF5C @ =gUnk_080C9460
+ adds r0, r0, r1
+ ldr r1, [r4]
+ ldr r0, [r0]
+ ands r1, r0
+ orrs r1, r2
+ str r1, [r4]
+ pop {r4, pc}
+ .align 2, 0
+_0801DF58: .4byte gUnk_0201AEE0
+_0801DF5C: .4byte gUnk_080C9460
+ .syntax divided
diff --git a/asm/non_matching/common/sub_0801DFB4.inc b/asm/non_matching/common/sub_0801DFB4.inc
new file mode 100644
index 00000000..2dfd039c
--- /dev/null
+++ b/asm/non_matching/common/sub_0801DFB4.inc
@@ -0,0 +1,44 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, r8
+ push {r7}
+ mov r8, r0
+ adds r4, r1, #0
+ adds r5, r2, #0
+ adds r6, r3, #0
+ ldr r7, _0801E004 @ =gFuseInfo
+ adds r0, r7, #0
+ movs r1, #0x10
+ bl MemClear
+ strh r4, [r7, #6]
+ strh r5, [r7, #8]
+ strh r6, [r7, #0xa]
+ mov r0, r8
+ str r0, [r7, #0xc]
+ ldr r0, _0801E008 @ =gUnk_03003DF0
+ ldrb r0, [r0, #2]
+ strb r0, [r7, #3]
+ mov r1, r8
+ cmp r1, #0
+ beq _0801DFF8
+ ldrb r1, [r1, #0x11]
+ lsls r0, r1, #0x1c
+ lsrs r0, r0, #0x1c
+ strb r0, [r7, #4]
+ movs r0, #0x10
+ rsbs r0, r0, #0
+ ands r0, r1
+ movs r1, #2
+ orrs r0, r1
+ mov r1, r8
+ strb r0, [r1, #0x11]
+_0801DFF8:
+ movs r0, #0
+ strb r0, [r7]
+ pop {r3}
+ mov r8, r3
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801E004: .4byte gFuseInfo
+_0801E008: .4byte gUnk_03003DF0
+ .syntax divided
diff --git a/asm/non_matching/common/sub_0801E24C.inc b/asm/non_matching/common/sub_0801E24C.inc
new file mode 100644
index 00000000..c82cd2ad
--- /dev/null
+++ b/asm/non_matching/common/sub_0801E24C.inc
@@ -0,0 +1,40 @@
+ .syntax unified
+ push {r4, r5, lr}
+ lsls r1, r1, #1
+ ldr r2, _0801E278 @ =gUnk_02018EE0
+ adds r5, r1, r2
+ movs r3, #0
+ adds r2, r0, #0
+ lsls r4, r2, #1
+ movs r0, #3
+ subs r1, r0, r4
+ cmp r3, r2
+ bgt _0801E28E
+ adds r4, r4, r5
+_0801E264:
+ lsls r0, r3, #1
+ adds r0, r0, r5
+ strh r2, [r0]
+ strh r3, [r4]
+ cmp r1, #0
+ bge _0801E27C
+ adds r1, #6
+ lsls r0, r3, #2
+ adds r1, r1, r0
+ b _0801E288
+ .align 2, 0
+_0801E278: .4byte gUnk_02018EE0
+_0801E27C:
+ adds r1, #0xa
+ subs r0, r3, r2
+ lsls r0, r0, #2
+ adds r1, r1, r0
+ subs r4, #2
+ subs r2, #1
+_0801E288:
+ adds r3, #1
+ cmp r3, r2
+ ble _0801E264
+_0801E28E:
+ pop {r4, r5, pc}
+ .syntax divided
diff --git a/asm/non_matching/common/sub_0801E290.inc b/asm/non_matching/common/sub_0801E290.inc
new file mode 100644
index 00000000..29e1bcc4
--- /dev/null
+++ b/asm/non_matching/common/sub_0801E290.inc
@@ -0,0 +1,75 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, sb
+ mov r6, r8
+ push {r6, r7}
+ mov ip, r0
+ adds r6, r2, #0
+ ldr r0, _0801E2BC @ =gUnk_03003DE4
+ ldrb r0, [r0]
+ lsls r2, r0, #2
+ adds r2, r2, r0
+ lsls r2, r2, #9
+ lsls r0, r1, #1
+ ldr r3, _0801E2C0 @ =gUnk_02017AA0
+ adds r0, r0, r3
+ adds r2, r2, r0
+ adds r4, r2, #0
+ adds r5, r1, #0
+ mov sb, r5
+ ldr r0, _0801E2C4 @ =gUnk_02018EE0
+ mov r8, r0
+ b _0801E30A
+ .align 2, 0
+_0801E2BC: .4byte gUnk_03003DE4
+_0801E2C0: .4byte gUnk_02017AA0
+_0801E2C4: .4byte gUnk_02018EE0
+_0801E2C8:
+ mov r1, r8
+ movs r3, #0
+ ldrsh r0, [r1, r3]
+ movs r7, #2
+ add r8, r7
+ mov r3, ip
+ subs r1, r3, r0
+ adds r3, r3, r0
+ cmp r1, #0
+ bge _0801E2DE
+ movs r1, #0
+_0801E2DE:
+ cmp r3, #0xef
+ ble _0801E2E4
+ movs r3, #0xf0
+_0801E2E4:
+ mov r7, sb
+ lsls r0, r7, #0x10
+ lsrs r0, r0, #0x10
+ cmp r0, #0x9f
+ bhi _0801E2F2
+ strb r3, [r4]
+ strb r1, [r4, #1]
+_0801E2F2:
+ lsls r0, r5, #0x10
+ lsrs r0, r0, #0x10
+ cmp r0, #0x9f
+ bhi _0801E2FE
+ strb r3, [r2]
+ strb r1, [r2, #1]
+_0801E2FE:
+ subs r4, #2
+ adds r2, #2
+ movs r0, #1
+ rsbs r0, r0, #0
+ add sb, r0
+ adds r5, #1
+_0801E30A:
+ adds r0, r6, #0
+ subs r6, #1
+ cmp r0, #0
+ bne _0801E2C8
+ pop {r3, r4}
+ mov r8, r3
+ mov sb, r4
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+ .syntax divided
diff --git a/asm/non_matching/common/sub_0801E31C.inc b/asm/non_matching/common/sub_0801E31C.inc
new file mode 100644
index 00000000..7db12fb7
--- /dev/null
+++ b/asm/non_matching/common/sub_0801E31C.inc
@@ -0,0 +1,189 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, sl
+ mov r6, sb
+ mov r5, r8
+ push {r5, r6, r7}
+ sub sp, #0x20
+ str r0, [sp]
+ str r1, [sp, #4]
+ mov sl, r2
+ mov sb, r3
+ ldr r0, _0801E3AC @ =gUnk_03003DE4
+ ldrb r1, [r0]
+ lsls r0, r1, #2
+ adds r0, r0, r1
+ lsls r0, r0, #9
+ ldr r1, _0801E3B0 @ =gUnk_02017AA0
+ adds r0, r0, r1
+ movs r1, #0xa0
+ lsls r1, r1, #4
+ bl MemClear
+ cmp sl, sb
+ bge _0801E3DC
+ movs r6, #0
+ mov r8, sl
+ mov r7, r8
+ mov r0, r8
+ lsls r1, r0, #1
+ movs r0, #3
+ subs r5, r0, r1
+ cmp r6, r8
+ ble _0801E35E
+ b _0801E45E
+_0801E35E:
+ mov r1, r8
+ lsls r0, r1, #2
+ ldr r4, _0801E3B4 @ =gUnk_02018EE0
+ adds r0, r0, r4
+ str r0, [sp, #0x10]
+ mov r1, sb
+ mov r0, r8
+ muls r0, r1, r0
+ str r0, [sp, #0x14]
+ movs r3, #0
+_0801E372:
+ adds r0, r3, #0
+ mov r1, sl
+ str r3, [sp, #0x18]
+ bl Div
+ adds r4, r0, #0
+ lsls r4, r4, #0x10
+ lsrs r4, r4, #0x10
+ str r4, [sp, #0x1c]
+ ldr r0, [sp, #0x14]
+ mov r1, sl
+ bl Div
+ lsls r0, r0, #0x10
+ lsrs r0, r0, #0x10
+ lsls r2, r6, #2
+ ldr r4, _0801E3B4 @ =gUnk_02018EE0
+ adds r1, r2, r4
+ str r0, [r1]
+ ldr r0, [sp, #0x1c]
+ ldr r1, [sp, #0x10]
+ str r0, [r1]
+ ldr r3, [sp, #0x18]
+ cmp r5, #0
+ bge _0801E3B8
+ adds r0, r5, #6
+ adds r5, r0, r2
+ b _0801E3D2
+ .align 2, 0
+_0801E3AC: .4byte gUnk_03003DE4
+_0801E3B0: .4byte gUnk_02017AA0
+_0801E3B4: .4byte gUnk_02018EE0
+_0801E3B8:
+ adds r1, r5, #0
+ adds r1, #0xa
+ subs r0, r6, r7
+ lsls r0, r0, #2
+ adds r5, r1, r0
+ ldr r4, [sp, #0x10]
+ subs r4, #4
+ str r4, [sp, #0x10]
+ ldr r0, [sp, #0x14]
+ mov r1, sb
+ subs r0, r0, r1
+ str r0, [sp, #0x14]
+ subs r7, #1
+_0801E3D2:
+ add r3, sb
+ adds r6, #1
+ cmp r6, r7
+ ble _0801E372
+ b _0801E45E
+_0801E3DC:
+ movs r6, #0
+ mov r8, sb
+ mov r7, r8
+ mov r4, r8
+ lsls r1, r4, #1
+ movs r0, #3
+ subs r5, r0, r1
+ cmp r6, r8
+ bgt _0801E45E
+ lsls r0, r4, #2
+ ldr r1, _0801E438 @ =gUnk_02018EE0
+ adds r0, r0, r1
+ str r0, [sp, #8]
+ mov r0, sl
+ mov r4, r8
+ muls r4, r0, r4
+ str r4, [sp, #0xc]
+ movs r3, #0
+_0801E400:
+ adds r0, r3, #0
+ mov r1, sb
+ str r3, [sp, #0x18]
+ bl Div
+ adds r4, r0, #0
+ lsls r4, r4, #0x10
+ lsrs r4, r4, #0x10
+ str r4, [sp, #0x1c]
+ ldr r0, [sp, #0xc]
+ mov r1, sb
+ bl Div
+ lsls r0, r0, #0x10
+ lsrs r0, r0, #0x10
+ lsls r2, r6, #2
+ ldr r4, _0801E438 @ =gUnk_02018EE0
+ adds r1, r2, r4
+ str r0, [r1]
+ ldr r0, [sp, #0x1c]
+ ldr r1, [sp, #8]
+ str r0, [r1]
+ ldr r3, [sp, #0x18]
+ cmp r5, #0
+ bge _0801E43C
+ adds r0, r5, #6
+ adds r5, r0, r2
+ b _0801E456
+ .align 2, 0
+_0801E438: .4byte gUnk_02018EE0
+_0801E43C:
+ adds r1, r5, #0
+ adds r1, #0xa
+ subs r0, r6, r7
+ lsls r0, r0, #2
+ adds r5, r1, r0
+ ldr r4, [sp, #8]
+ subs r4, #4
+ str r4, [sp, #8]
+ ldr r0, [sp, #0xc]
+ mov r1, sl
+ subs r0, r0, r1
+ str r0, [sp, #0xc]
+ subs r7, #1
+_0801E456:
+ add r3, sl
+ adds r6, #1
+ cmp r6, r7
+ ble _0801E400
+_0801E45E:
+ ldr r0, [sp]
+ ldr r1, [sp, #4]
+ mov r2, r8
+ bl sub_0801E290
+ ldr r0, _0801E48C @ =gUnk_03003DE4
+ ldrb r1, [r0]
+ lsls r0, r1, #2
+ adds r0, r0, r1
+ lsls r0, r0, #9
+ ldr r1, _0801E490 @ =gUnk_02017AA0
+ adds r0, r0, r1
+ ldr r1, _0801E494 @ =0x04000040
+ ldr r2, _0801E498 @ =0xA2600001
+ bl sub_0805622C
+ add sp, #0x20
+ pop {r3, r4, r5}
+ mov r8, r3
+ mov sb, r4
+ mov sl, r5
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801E48C: .4byte gUnk_03003DE4
+_0801E490: .4byte gUnk_02017AA0
+_0801E494: .4byte 0x04000040
+_0801E498: .4byte 0xA2600001
+ .syntax divided
diff --git a/asm/non_matching/common/sub_0801E49C.inc b/asm/non_matching/common/sub_0801E49C.inc
new file mode 100644
index 00000000..46bd1ebc
--- /dev/null
+++ b/asm/non_matching/common/sub_0801E49C.inc
@@ -0,0 +1,211 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, sl
+ mov r6, sb
+ mov r5, r8
+ push {r5, r6, r7}
+ sub sp, #8
+ mov r8, r0
+ str r1, [sp, #4]
+ mov sb, r2
+ adds r5, r3, #0
+ ldr r0, _0801E5E4 @ =0x0000FFFF
+ movs r2, #0xf0
+ lsls r2, r2, #3
+ ldr r1, _0801E5E8 @ =gUnk_02018EE0
+ bl MemFill16
+ adds r3, r5, #0
+ subs r3, #0x40
+ movs r2, #0xff
+ ands r3, r2
+ ldr r1, _0801E5EC @ =gSineTable
+ adds r0, r3, #0
+ adds r0, #0x40
+ lsls r0, r0, #1
+ adds r0, r0, r1
+ movs r4, #0
+ ldrsh r0, [r0, r4]
+ mov r4, sb
+ muls r4, r0, r4
+ adds r0, r4, #0
+ asrs r0, r0, #8
+ mov r4, r8
+ adds r7, r4, r0
+ lsls r0, r3, #1
+ adds r0, r0, r1
+ movs r3, #0
+ ldrsh r0, [r0, r3]
+ mov r4, sb
+ muls r4, r0, r4
+ adds r0, r4, #0
+ asrs r0, r0, #8
+ ldr r3, [sp, #4]
+ adds r3, r3, r0
+ mov sl, r3
+ adds r3, r5, #0
+ adds r3, #0x68
+ ands r3, r2
+ adds r0, r3, #0
+ adds r0, #0x40
+ lsls r0, r0, #1
+ adds r0, r0, r1
+ movs r4, #0
+ ldrsh r0, [r0, r4]
+ mov r4, sb
+ muls r4, r0, r4
+ adds r0, r4, #0
+ asrs r0, r0, #8
+ mov r4, r8
+ adds r6, r4, r0
+ lsls r0, r3, #1
+ adds r0, r0, r1
+ movs r3, #0
+ ldrsh r0, [r0, r3]
+ mov r4, sb
+ muls r4, r0, r4
+ adds r0, r4, #0
+ asrs r0, r0, #8
+ ldr r3, [sp, #4]
+ adds r4, r3, r0
+ adds r3, r5, #0
+ subs r3, #0xe8
+ ands r3, r2
+ adds r0, r3, #0
+ adds r0, #0x40
+ lsls r0, r0, #1
+ adds r0, r0, r1
+ movs r2, #0
+ ldrsh r0, [r0, r2]
+ mov r2, sb
+ muls r2, r0, r2
+ adds r0, r2, #0
+ asrs r0, r0, #8
+ mov r2, r8
+ adds r5, r2, r0
+ lsls r0, r3, #1
+ adds r0, r0, r1
+ movs r3, #0
+ ldrsh r0, [r0, r3]
+ mov r1, sb
+ muls r1, r0, r1
+ adds r0, r1, #0
+ asrs r0, r0, #8
+ ldr r2, [sp, #4]
+ adds r2, r2, r0
+ mov r8, r2
+ movs r0, #0
+ str r0, [sp]
+ adds r0, r7, #0
+ mov r1, sl
+ adds r2, r6, #0
+ adds r3, r4, #0
+ bl sub_0801E64C
+ movs r0, #1
+ str r0, [sp]
+ adds r0, r7, #0
+ mov r1, sl
+ adds r2, r5, #0
+ mov r3, r8
+ bl sub_0801E64C
+ movs r0, #2
+ str r0, [sp]
+ adds r0, r6, #0
+ adds r1, r4, #0
+ adds r2, r5, #0
+ mov r3, r8
+ bl sub_0801E64C
+ ldr r5, _0801E5F0 @ =gUnk_03003DE4
+ ldrb r1, [r5]
+ lsls r0, r1, #2
+ adds r0, r0, r1
+ lsls r0, r0, #9
+ ldr r6, _0801E5F4 @ =gUnk_02017AA0
+ adds r0, r0, r6
+ movs r1, #0xa0
+ lsls r1, r1, #4
+ bl MemClear
+ ldr r2, _0801E5E8 @ =gUnk_02018EE0
+ ldrb r1, [r5]
+ lsls r0, r1, #2
+ adds r0, r0, r1
+ lsls r0, r0, #9
+ adds r1, r0, r6
+ movs r3, #0xa0
+ mov sl, r3
+_0801E5B0:
+ ldr r7, [r2]
+ ldr r6, [r2, #4]
+ ldr r5, [r2, #8]
+ adds r2, #0xc
+ cmp r7, r6
+ ble _0801E5C2
+ adds r4, r7, #0
+ adds r7, r6, #0
+ adds r6, r4, #0
+_0801E5C2:
+ cmp r7, r5
+ ble _0801E5CC
+ adds r4, r7, #0
+ adds r7, r5, #0
+ adds r5, r4, #0
+_0801E5CC:
+ cmp r6, r5
+ ble _0801E5D6
+ adds r4, r6, #0
+ adds r6, r5, #0
+ adds r5, r4, #0
+_0801E5D6:
+ movs r0, #1
+ rsbs r0, r0, #0
+ cmp r7, r0
+ beq _0801E5F8
+ strb r5, [r1]
+ strb r7, [r1, #1]
+ b _0801E60A
+ .align 2, 0
+_0801E5E4: .4byte 0x0000FFFF
+_0801E5E8: .4byte gUnk_02018EE0
+_0801E5EC: .4byte gSineTable
+_0801E5F0: .4byte gUnk_03003DE4
+_0801E5F4: .4byte gUnk_02017AA0
+_0801E5F8:
+ cmp r6, r7
+ beq _0801E602
+ strb r5, [r1]
+ strb r6, [r1, #1]
+ b _0801E60A
+_0801E602:
+ cmp r5, r7
+ beq _0801E60A
+ strb r7, [r1, #1]
+ strb r7, [r1]
+_0801E60A:
+ movs r4, #1
+ rsbs r4, r4, #0
+ add sl, r4
+ adds r1, #2
+ mov r0, sl
+ cmp r0, #0
+ bgt _0801E5B0
+ ldr r0, _0801E63C @ =gUnk_03003DE4
+ ldrb r1, [r0]
+ lsls r0, r1, #2
+ adds r0, r0, r1
+ lsls r0, r0, #9
+ ldr r1, _0801E640 @ =gUnk_02017AA0
+ adds r0, r0, r1
+ ldr r1, _0801E644 @ =0x04000040
+ ldr r2, _0801E648 @ =0xA2600001
+ bl sub_0805622C
+ add sp, #8
+ pop {r3, r4, r5}
+ mov r8, r3
+ mov sb, r4
+ mov sl, r5
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801E63C: .4byte gUnk_03003DE4
+_0801E640: .4byte gUnk_02017AA0
+_0801E644: .4byte 0x04000040
+_0801E648: .4byte 0xA2600001
+ .syntax divided
diff --git a/asm/non_matching/common/sub_0801E64C.inc b/asm/non_matching/common/sub_0801E64C.inc
new file mode 100644
index 00000000..03076c44
--- /dev/null
+++ b/asm/non_matching/common/sub_0801E64C.inc
@@ -0,0 +1,72 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ adds r5, r0, #0
+ adds r4, r1, #0
+ adds r6, r3, #0
+ ldr r7, _0801E6C4 @ =gUnk_02018EE0
+ cmp r4, #0
+ bge _0801E65E
+ cmp r6, #0
+ blt _0801E6C2
+_0801E65E:
+ cmp r4, #0x9f
+ ble _0801E666
+ cmp r6, #0x9f
+ bgt _0801E6C2
+_0801E666:
+ cmp r4, r6
+ ble _0801E676
+ adds r1, r4, #0
+ adds r4, r6, #0
+ adds r6, r1, #0
+ adds r1, r5, #0
+ adds r5, r2, #0
+ adds r2, r1, #0
+_0801E676:
+ cmp r4, r6
+ beq _0801E6C2
+ subs r0, r2, r5
+ lsls r0, r0, #0x10
+ subs r1, r6, r4
+ bl Div
+ adds r3, r0, #0
+ cmp r4, #0
+ bge _0801E694
+ rsbs r0, r4, #0
+ muls r0, r3, r0
+ asrs r0, r0, #0x10
+ adds r5, r5, r0
+ movs r4, #0
+_0801E694:
+ cmp r6, #0x9f
+ ble _0801E69A
+ movs r6, #0x9f
+_0801E69A:
+ lsls r2, r5, #0x10
+ lsls r0, r4, #1
+ adds r0, r0, r4
+ ldr r1, [sp, #0x14]
+ adds r0, r0, r1
+ lsls r0, r0, #2
+ adds r7, r0, r7
+_0801E6A8:
+ cmp r5, #0
+ bge _0801E6AE
+ movs r5, #0
+_0801E6AE:
+ cmp r5, #0xf0
+ ble _0801E6B4
+ movs r5, #0xf0
+_0801E6B4:
+ str r5, [r7]
+ adds r2, r2, r3
+ asrs r5, r2, #0x10
+ adds r4, #1
+ adds r7, #0xc
+ cmp r4, r6
+ ble _0801E6A8
+_0801E6C2:
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801E6C4: .4byte gUnk_02018EE0
+ .syntax divided
diff --git a/asm/non_matching/common/sub_0801E6C8.inc b/asm/non_matching/common/sub_0801E6C8.inc
new file mode 100644
index 00000000..7bb2b576
--- /dev/null
+++ b/asm/non_matching/common/sub_0801E6C8.inc
@@ -0,0 +1,59 @@
+ .syntax unified
+ push {r4, r5, r6, lr}
+ adds r4, r0, #0
+ subs r0, r4, #1
+ cmp r0, #0x63
+ bhi _0801E722
+ movs r1, #0
+ ldr r5, _0801E724 @ =gFuseInfo
+ ldr r3, _0801E728 @ =gUnk_02002C01
+ movs r2, #0xf1
+_0801E6DA:
+ adds r0, r1, r3
+ ldrb r6, [r0]
+ cmp r4, r6
+ bne _0801E6E4
+ strb r2, [r0]
+_0801E6E4:
+ adds r1, #1
+ cmp r1, #0x7f
+ bls _0801E6DA
+ ldr r0, [r5, #0xc]
+ bl sub_08002632
+ adds r1, r0, #0
+ subs r0, r1, #1
+ cmp r0, #0x7e
+ bhi _0801E70A
+ ldr r0, _0801E72C @ =gSave
+ ldr r2, _0801E730 @ =0x000001C1
+ adds r0, r0, r2
+ adds r1, r1, r0
+ ldrb r0, [r1]
+ cmp r0, #0xf1
+ bne _0801E70A
+ movs r0, #0xf2
+ strb r0, [r1]
+_0801E70A:
+ movs r1, #0
+ ldr r0, _0801E734 @ =gUnk_03003DF0
+ movs r2, #0xf1
+ adds r0, #0xb
+_0801E712:
+ ldrb r3, [r0]
+ cmp r4, r3
+ bne _0801E71A
+ strb r2, [r0]
+_0801E71A:
+ adds r0, #0xc
+ adds r1, #1
+ cmp r1, #0x1f
+ bls _0801E712
+_0801E722:
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_0801E724: .4byte gFuseInfo
+_0801E728: .4byte gUnk_02002C01
+_0801E72C: .4byte gSave
+_0801E730: .4byte 0x000001C1
+_0801E734: .4byte gUnk_03003DF0
+ .syntax divided
diff --git a/asm/non_matching/common/sub_0801E738.inc b/asm/non_matching/common/sub_0801E738.inc
new file mode 100644
index 00000000..a6a3df28
--- /dev/null
+++ b/asm/non_matching/common/sub_0801E738.inc
@@ -0,0 +1,51 @@
+ .syntax unified
+ push {r4, lr}
+ adds r4, r0, #0
+ bl sub_0801E82C
+ adds r0, r4, #0
+ subs r0, #0x65
+ cmp r0, #0x10
+ bhi _0801E790
+ adds r0, r4, #0
+ bl sub_0801E8B0
+ adds r1, r0, #0
+ cmp r1, #0
+ bge _0801E76E
+ movs r1, #0
+ ldr r0, _0801E794 @ =gSave
+ movs r3, #0x8c
+ lsls r3, r3, #1
+ adds r2, r0, r3
+ ldrb r0, [r2]
+ cmp r0, #0
+ beq _0801E76E
+_0801E764:
+ adds r1, #1
+ adds r0, r1, r2
+ ldrb r0, [r0]
+ cmp r0, #0
+ bne _0801E764
+_0801E76E:
+ cmp r1, #0x11
+ bhi _0801E790
+ ldr r2, _0801E794 @ =gSave
+ movs r3, #0x8c
+ lsls r3, r3, #1
+ adds r0, r2, r3
+ adds r0, r1, r0
+ strb r4, [r0]
+ adds r3, #0x13
+ adds r0, r2, r3
+ adds r1, r1, r0
+ ldrb r0, [r1]
+ adds r0, #1
+ cmp r0, #0x63
+ ble _0801E78E
+ movs r0, #0x63
+_0801E78E:
+ strb r0, [r1]
+_0801E790:
+ pop {r4, pc}
+ .align 2, 0
+_0801E794: .4byte gSave
+ .syntax divided
diff --git a/asm/non_matching/common/sub_0801E82C.inc b/asm/non_matching/common/sub_0801E82C.inc
new file mode 100644
index 00000000..3f0f200b
--- /dev/null
+++ b/asm/non_matching/common/sub_0801E82C.inc
@@ -0,0 +1,69 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, sl
+ mov r6, sb
+ mov r5, r8
+ push {r5, r6, r7}
+ ldr r1, _0801E8AC @ =gUnk_02002B54
+ movs r5, #0
+ adds r2, r1, #4
+_0801E83C:
+ ldrb r0, [r2, #0x13]
+ adds r3, r1, #4
+ mov sl, r3
+ cmp r0, #0
+ bne _0801E848
+ strb r0, [r2]
+_0801E848:
+ adds r2, #1
+ adds r5, #1
+ cmp r5, #0x12
+ bls _0801E83C
+ movs r0, #0
+ strb r0, [r1, #0x16]
+ adds r2, r1, #0
+ adds r2, #0x29
+ strb r0, [r2]
+ movs r5, #0
+ movs r0, #0x17
+ adds r0, r0, r1
+ mov sb, r0
+ movs r3, #0x18
+ adds r3, r3, r1
+ mov r8, r3
+ adds r7, r1, #4
+ adds r6, r1, #5
+_0801E86C:
+ mov r1, sl
+ adds r0, r1, r5
+ ldrb r0, [r0]
+ subs r0, #0x65
+ cmp r0, #0x10
+ bls _0801E890
+ movs r4, #0x12
+ subs r4, r4, r5
+ adds r0, r6, #0
+ adds r1, r7, #0
+ adds r2, r4, #0
+ bl MemCopy
+ mov r0, r8
+ mov r1, sb
+ adds r2, r4, #0
+ bl MemCopy
+_0801E890:
+ movs r3, #1
+ add sb, r3
+ add r8, r3
+ adds r7, #1
+ adds r6, #1
+ adds r5, #1
+ cmp r5, #0x11
+ bls _0801E86C
+ pop {r3, r4, r5}
+ mov r8, r3
+ mov sb, r4
+ mov sl, r5
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801E8AC: .4byte gUnk_02002B54
+ .syntax divided
diff --git a/asm/non_matching/common/sub_0801E99C.inc b/asm/non_matching/common/sub_0801E99C.inc
new file mode 100644
index 00000000..7bbda3c9
--- /dev/null
+++ b/asm/non_matching/common/sub_0801E99C.inc
@@ -0,0 +1,112 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, r8
+ push {r7}
+ bl sub_08002632
+ mov r8, r0
+ ldr r1, _0801E9E4 @ =gUnk_08001DCC
+ lsls r0, r0, #2
+ adds r0, r0, r1
+ ldr r7, [r0]
+ movs r0, #0x67
+ bl GetInventoryValue
+ cmp r0, #0
+ beq _0801EA56
+ ldr r1, _0801E9E8 @ =gSave
+ ldrb r0, [r7]
+ ldrb r2, [r1, #8]
+ cmp r0, r2
+ bhi _0801EA56
+ ldr r2, _0801E9EC @ =0x000001C1
+ adds r0, r1, r2
+ add r0, r8
+ ldrb r5, [r0]
+ subs r2, #0x80
+ adds r0, r1, r2
+ add r0, r8
+ ldrb r6, [r0]
+ adds r4, r6, r7
+_0801E9D6:
+ cmp r5, #0xf1
+ beq _0801E9F6
+ cmp r5, #0xf1
+ bhi _0801E9F0
+ cmp r5, #0
+ beq _0801E9F6
+ b _0801EA10
+ .align 2, 0
+_0801E9E4: .4byte gUnk_08001DCC
+_0801E9E8: .4byte gSave
+_0801E9EC: .4byte 0x000001C1
+_0801E9F0:
+ cmp r5, #0xf2
+ beq _0801EA0A
+ b _0801EA10
+_0801E9F6:
+ ldrb r5, [r4, #5]
+ cmp r5, #0
+ beq _0801EA10
+ cmp r5, #0xff
+ beq _0801EA14
+ adds r0, r5, #0
+ bl CheckKinstoneFused
+ cmp r0, #0
+ beq _0801EA10
+_0801EA0A:
+ adds r4, #1
+ adds r6, #1
+ ldrb r5, [r4, #5]
+_0801EA10:
+ cmp r5, #0xff
+ bne _0801EA1C
+_0801EA14:
+ adds r0, r7, #0
+ bl sub_0801EA74
+ adds r5, r0, #0
+_0801EA1C:
+ cmp r5, #0
+ beq _0801EA32
+ cmp r5, #0xf2
+ beq _0801E9D6
+ adds r0, r5, #0
+ bl CheckKinstoneFused
+ cmp r0, #0
+ beq _0801EA34
+ movs r5, #0xf1
+ b _0801E9D6
+_0801EA32:
+ movs r5, #0xf3
+_0801EA34:
+ ldr r1, _0801EA5C @ =gSave
+ ldr r2, _0801EA60 @ =0x000001C1
+ adds r0, r1, r2
+ add r0, r8
+ strb r5, [r0]
+ subs r2, #0x80
+ adds r0, r1, r2
+ add r0, r8
+ strb r6, [r0]
+ bl Random
+ ldrb r4, [r7, #1]
+ movs r1, #0x64
+ bl __modsi3
+ cmp r4, r0
+ bhi _0801EA64
+_0801EA56:
+ movs r0, #0
+ b _0801EA6E
+ .align 2, 0
+_0801EA5C: .4byte gSave
+_0801EA60: .4byte 0x000001C1
+_0801EA64:
+ subs r0, r5, #1
+ cmp r0, #0x63
+ bls _0801EA6C
+ movs r5, #0
+_0801EA6C:
+ adds r0, r5, #0
+_0801EA6E:
+ pop {r3}
+ mov r8, r3
+ pop {r4, r5, r6, r7, pc}
+ .syntax divided
diff --git a/asm/non_matching/common/zFree.inc b/asm/non_matching/common/zFree.inc
new file mode 100644
index 00000000..7ff819a2
--- /dev/null
+++ b/asm/non_matching/common/zFree.inc
@@ -0,0 +1,58 @@
+ .syntax unified
+ push {r4, r5, lr}
+ ldr r3, _0801DA44 @ =gzHeap
+ subs r1, r0, r3
+ ldr r0, _0801DA48 @ =0x00000FFF
+ cmp r1, r0
+ bhi _0801DA74
+ adds r4, r3, #0
+ ldrh r5, [r4]
+ adds r4, #2
+ movs r2, #0
+ cmp r2, r5
+ bhs _0801DA74
+ ldrh r0, [r4]
+ cmp r0, r1
+ bne _0801DA4C
+ lsls r0, r5, #2
+ subs r1, r3, #2
+ adds r0, r0, r1
+ ldrh r1, [r0]
+ strh r1, [r4]
+ strh r2, [r0]
+ adds r0, #2
+ ldrh r1, [r0]
+ strh r1, [r4, #2]
+ strh r2, [r0]
+ subs r0, r5, #1
+ strh r0, [r3]
+ b _0801DA74
+ .align 2, 0
+_0801DA44: .4byte gzHeap
+_0801DA48: .4byte 0x00000FFF
+_0801DA4C:
+ adds r4, #4
+ adds r2, #1
+ cmp r2, r5
+ bhs _0801DA74
+ ldrh r0, [r4]
+ cmp r0, r1
+ bne _0801DA4C
+ lsls r1, r5, #2
+ ldr r3, _0801DA78 @ =gUnk_0203553E
+ adds r1, r1, r3
+ ldrh r0, [r1]
+ strh r0, [r4]
+ movs r2, #0
+ strh r2, [r1]
+ adds r1, #2
+ ldrh r0, [r1]
+ strh r0, [r4, #2]
+ strh r2, [r1]
+ subs r0, r5, #1
+ strh r0, [r3, #2]
+_0801DA74:
+ pop {r4, r5, pc}
+ .align 2, 0
+_0801DA78: .4byte gUnk_0203553E
+ .syntax divided
diff --git a/asm/non_matching/common/zMalloc.inc b/asm/non_matching/common/zMalloc.inc
new file mode 100644
index 00000000..742dd67c
--- /dev/null
+++ b/asm/non_matching/common/zMalloc.inc
@@ -0,0 +1,171 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, sl
+ mov r6, sb
+ mov r5, r8
+ push {r5, r6, r7}
+ mov ip, r0
+ movs r0, #3
+ add ip, r0
+ subs r0, #7
+ mov r1, ip
+ ands r1, r0
+ mov ip, r1
+ ldr r6, _0801D90C @ =gzHeap
+ mov sb, r6
+ ldrh r7, [r6]
+ movs r5, #1
+ movs r3, #0x80
+ lsls r3, r3, #5
+ add r3, sb
+ subs r4, r3, r1
+ movs r2, #0
+ b _0801D926
+ .align 2, 0
+_0801D90C: .4byte gzHeap
+_0801D910:
+ cmp r1, r4
+ bhi _0801D918
+ cmp r3, r0
+ bls _0801D952
+_0801D918:
+ cmp r4, r1
+ bhi _0801D920
+ cmp r0, r3
+ bls _0801D952
+_0801D920:
+ adds r0, r2, #1
+ lsls r0, r0, #0x10
+ lsrs r2, r0, #0x10
+_0801D926:
+ cmp r2, r7
+ bhs _0801D94A
+ lsls r0, r2, #2
+ add r0, sb
+ ldrh r1, [r0, #2]
+ ldr r6, _0801D95C @ =gzHeap
+ adds r1, r1, r6
+ ldrh r0, [r0, #4]
+ adds r0, r0, r6
+ cmp r1, r4
+ bhi _0801D940
+ cmp r4, r0
+ bls _0801D952
+_0801D940:
+ cmp r1, r3
+ bhi _0801D910
+ cmp r3, r0
+ bhi _0801D910
+ movs r5, #0
+_0801D94A:
+ lsls r0, r7, #2
+ mov sl, r0
+ cmp r5, #0
+ bne _0801D9D8
+_0801D952:
+ movs r1, #0
+ mov r8, r1
+ lsls r6, r7, #2
+ mov sl, r6
+ b _0801D970
+ .align 2, 0
+_0801D95C: .4byte gzHeap
+_0801D960:
+ movs r5, #0
+_0801D962:
+ mov r0, r8
+ adds r0, #1
+ lsls r0, r0, #0x10
+ lsrs r0, r0, #0x10
+ mov r8, r0
+ cmp r8, r7
+ bhs _0801D9D4
+_0801D970:
+ mov r1, r8
+ lsls r0, r1, #2
+ add r0, sb
+ ldrh r0, [r0, #2]
+ ldr r6, _0801D994 @ =gzHeap
+ adds r3, r0, r6
+ mov r0, ip
+ subs r4, r3, r0
+ movs r5, #0
+ mov r0, sl
+ adds r0, #2
+ add r0, sb
+ adds r0, #4
+ cmp r4, r0
+ blo _0801D962
+ movs r5, #1
+ movs r2, #0
+ b _0801D9AE
+ .align 2, 0
+_0801D994: .4byte gzHeap
+_0801D998:
+ cmp r1, r4
+ bhi _0801D9A0
+ cmp r3, r0
+ bls _0801D960
+_0801D9A0:
+ cmp r4, r1
+ bhi _0801D9A8
+ cmp r0, r3
+ bls _0801D960
+_0801D9A8:
+ adds r0, r2, #1
+ lsls r0, r0, #0x10
+ lsrs r2, r0, #0x10
+_0801D9AE:
+ cmp r2, r7
+ bhs _0801D9D0
+ lsls r0, r2, #2
+ add r0, sb
+ ldrh r1, [r0, #2]
+ adds r1, r1, r6
+ ldrh r0, [r0, #4]
+ adds r0, r0, r6
+ cmp r1, r4
+ bhi _0801D9C6
+ cmp r4, r0
+ blo _0801D960
+_0801D9C6:
+ cmp r1, r3
+ bhs _0801D998
+ cmp r3, r0
+ bhi _0801D998
+ movs r5, #0
+_0801D9D0:
+ cmp r5, #0
+ beq _0801D962
+_0801D9D4:
+ cmp r5, #0
+ beq _0801DA00
+_0801D9D8:
+ ldr r0, _0801D9FC @ =gUnk_02035542
+ mov r1, sl
+ adds r2, r1, r0
+ subs r3, r0, #2
+ subs r1, r4, r3
+ strh r1, [r2]
+ adds r0, #2
+ add r0, sl
+ add r1, ip
+ strh r1, [r0]
+ adds r0, r7, #1
+ strh r0, [r3]
+ adds r0, r4, #0
+ mov r1, ip
+ bl MemClear
+ adds r0, r4, #0
+ b _0801DA02
+ .align 2, 0
+_0801D9FC: .4byte gUnk_02035542
+_0801DA00:
+ movs r0, #0
+_0801DA02:
+ pop {r3, r4, r5}
+ mov r8, r3
+ mov sb, r4
+ mov sl, r5
+ pop {r4, r5, r6, r7, pc}
+ .syntax divided
diff --git a/asm/non_matching/textbox/sub_08056FEC.inc b/asm/non_matching/textbox/sub_08056FEC.inc
index aa1b66b2..d8cd552f 100644
--- a/asm/non_matching/textbox/sub_08056FEC.inc
+++ b/asm/non_matching/textbox/sub_08056FEC.inc
@@ -5,7 +5,7 @@
sub sp, #8
adds r2, r0, #0
adds r5, r1, #0
- bl sub_0801D51C
+ bl DecToHex
adds r2, r0, #0
ldr r0, _08057040 @ =0x0FFFFFFF
ands r2, r0
diff --git a/asm/object/object9.s b/asm/object/object9.s
index 83e07658..2cbdec01 100644
--- a/asm/object/object9.s
+++ b/asm/object/object9.s
@@ -17,7 +17,7 @@ Object9: @ 0x0808386C
rsbs r0, r1, #0
orrs r0, r1
lsrs r2, r0, #0x1f
- ldr r0, _080838CC @ =gUnk_02022740
+ ldr r0, _080838CC @ =gFuseInfo
ldrb r0, [r0]
cmp r0, #2
bgt _08083894
@@ -58,7 +58,7 @@ _080838B6:
pop {r4, pc}
.align 2, 0
_080838C8: .4byte gPlayerState
-_080838CC: .4byte gUnk_02022740
+_080838CC: .4byte gFuseInfo
_080838D0: .4byte gMessage
_080838D4: .4byte gUnk_03003DF0
_080838D8: .4byte gUnk_0811F754
diff --git a/asm/object/objectB3.s b/asm/object/objectB3.s
index 4111e371..41d6458f 100644
--- a/asm/object/objectB3.s
+++ b/asm/object/objectB3.s
@@ -64,7 +64,7 @@ _080A0A5E:
orrs r1, r3
strb r1, [r4, #0x1b]
ldr r1, _080A0ABC @ =gUnk_080C9CBC
- ldr r0, _080A0AC0 @ =gUnk_02022740
+ ldr r0, _080A0AC0 @ =gFuseInfo
ldrb r0, [r0, #3]
lsls r0, r0, #3
adds r0, r0, r1
@@ -78,7 +78,7 @@ _080A0AB0:
.align 2, 0
_080A0AB8: .4byte gUnk_08124A20
_080A0ABC: .4byte gUnk_080C9CBC
-_080A0AC0: .4byte gUnk_02022740
+_080A0AC0: .4byte gFuseInfo
thumb_func_start sub_080A0AC4
sub_080A0AC4: @ 0x080A0AC4
diff --git a/asm/subtask.s b/asm/subtask.s
index fe5e7913..d6bb7811 100644
--- a/asm/subtask.s
+++ b/asm/subtask.s
@@ -186,7 +186,7 @@ sub_080A3DB8: @ 0x080A3DB8
ldrb r1, [r0, #1]
cmp r1, #6
bne _080A3DEE
- ldr r0, _080A3DE0 @ =gUnk_02022740
+ ldr r0, _080A3DE0 @ =gFuseInfo
strb r1, [r0]
ldrb r0, [r0, #3]
lsls r0, r0, #3
@@ -200,20 +200,20 @@ sub_080A3DB8: @ 0x080A3DB8
b _080A3DF8
.align 2, 0
_080A3DDC: .4byte gMenu
-_080A3DE0: .4byte gUnk_02022740
+_080A3DE0: .4byte gFuseInfo
_080A3DE4: .4byte gUnk_080C9CBC
_080A3DE8:
bl sub_080A71DC
b _080A3DF8
_080A3DEE:
- ldr r1, _080A3DFC @ =gUnk_02022740
+ ldr r1, _080A3DFC @ =gFuseInfo
movs r0, #5
strb r0, [r1]
bl sub_080A71DC
_080A3DF8:
pop {pc}
.align 2, 0
-_080A3DFC: .4byte gUnk_02022740
+_080A3DFC: .4byte gFuseInfo
thumb_func_start sub_080A3E00
sub_080A3E00: @ 0x080A3E00
@@ -267,7 +267,7 @@ sub_080A3E48: @ 0x080A3E48
lsls r0, r0, #3
adds r0, r0, r2
ldrb r1, [r0, #5]
- ldr r0, _080A3E80 @ =gUnk_02022740
+ ldr r0, _080A3E80 @ =gFuseInfo
ldrb r0, [r0, #3]
lsls r0, r0, #3
adds r0, r0, r2
@@ -283,7 +283,7 @@ sub_080A3E48: @ 0x080A3E48
.align 2, 0
_080A3E78: .4byte gUnk_080C9CBC
_080A3E7C: .4byte gMenu
-_080A3E80: .4byte gUnk_02022740
+_080A3E80: .4byte gFuseInfo
_080A3E84:
movs r2, #0
movs r0, #2
@@ -407,7 +407,7 @@ sub_080A3F68: @ 0x080A3F68
movs r0, #5
strb r0, [r5, #1]
ldr r4, _080A3FB8 @ =gUnk_02002C81
- ldr r0, _080A3FBC @ =gUnk_02022740
+ ldr r0, _080A3FBC @ =gFuseInfo
ldrb r1, [r0, #3]
adds r0, r4, #0
bl WriteBit
@@ -439,7 +439,7 @@ _080A3F96:
.align 2, 0
_080A3FB4: .4byte gMenu
_080A3FB8: .4byte gUnk_02002C81
-_080A3FBC: .4byte gUnk_02022740
+_080A3FBC: .4byte gFuseInfo
_080A3FC0: .4byte 0xFFFFFED6
_080A3FC4: .4byte 0xFFFFFED5
_080A3FC8: .4byte 0x00000702
@@ -924,14 +924,14 @@ _080A42C4:
_080A42C6:
ldr r0, _080A42D8 @ =gOamCmd
strh r4, [r0]
- ldr r0, _080A42DC @ =gUnk_02022740
+ ldr r0, _080A42DC @ =gFuseInfo
ldrb r0, [r0, #3]
movs r1, #0
bl sub_080A42E0
pop {r4, r5, pc}
.align 2, 0
_080A42D8: .4byte gOamCmd
-_080A42DC: .4byte gUnk_02022740
+_080A42DC: .4byte gFuseInfo
thumb_func_start sub_080A42E0
sub_080A42E0: @ 0x080A42E0
@@ -1150,7 +1150,7 @@ sub_080A4468: @ 0x080A4468
strb r1, [r0, #2]
ldr r0, [r0, #4]
strb r1, [r0, #3]
- ldr r0, _080A448C @ =gUnk_02022740
+ ldr r0, _080A448C @ =gFuseInfo
ldrb r0, [r0, #3]
bl sub_0801E6C8
ldr r0, _080A4490 @ =gMenu
@@ -1160,7 +1160,7 @@ sub_080A4468: @ 0x080A4468
pop {pc}
.align 2, 0
_080A4488: .4byte gUnk_03003DF0
-_080A448C: .4byte gUnk_02022740
+_080A448C: .4byte gFuseInfo
_080A4490: .4byte gMenu
thumb_func_start sub_080A4494
@@ -1181,7 +1181,7 @@ sub_080A4494: @ 0x080A4494
adds r0, r4, #0
movs r2, #0x80
bl sub_080A44E0
- ldr r0, _080A44DC @ =gUnk_02022740
+ ldr r0, _080A44DC @ =gFuseInfo
ldr r0, [r0, #0xc]
bl sub_08002632
adds r0, r4, #0
@@ -1196,7 +1196,7 @@ _080A44D0:
.align 2, 0
_080A44D4: .4byte gTextGfxBuffer
_080A44D8: .4byte gUnk_02002AC0
-_080A44DC: .4byte gUnk_02022740
+_080A44DC: .4byte gFuseInfo
thumb_func_start sub_080A44E0
sub_080A44E0: @ 0x080A44E0
@@ -1237,7 +1237,7 @@ _080A4524: .4byte 0x06010000
thumb_func_start sub_080A4528
sub_080A4528: @ 0x080A4528
push {r4, lr}
- ldr r0, _080A4540 @ =gUnk_02022740
+ ldr r0, _080A4540 @ =gFuseInfo
ldr r2, [r0, #0xc]
ldrb r0, [r2, #8]
cmp r0, #7
@@ -1248,7 +1248,7 @@ sub_080A4528: @ 0x080A4528
bl CreateNPC
b _080A4550
.align 2, 0
-_080A4540: .4byte gUnk_02022740
+_080A4540: .4byte gFuseInfo
_080A4544:
cmp r0, #3
bne _080A45A2
diff --git a/asm/subtask2.s b/asm/subtask2.s
index e62c568e..ceadbd8e 100644
--- a/asm/subtask2.s
+++ b/asm/subtask2.s
@@ -1258,13 +1258,13 @@ _080A5CFA:
sub_080A5CFC: @ 0x080A5CFC
push {r4, lr}
adds r4, r0, #0
- bl sub_0801DDA0
+ bl DrawDungeonFeatures
bl LoadDungeonMap
ldr r1, _080A5D18 @ =gUnk_02019EE0
movs r2, #0x80
lsls r2, r2, #3
adds r0, r4, #0
- bl sub_0801DBA0
+ bl DrawDungeonMap
pop {r4, pc}
.align 2, 0
_080A5D18: .4byte gUnk_02019EE0
@@ -3818,7 +3818,7 @@ sub_080A6B04: @ 0x080A6B04
bl sub_080A4D34
movs r0, #6
bl sub_080A4DB8
- ldr r0, _080A6BF0 @ =gUnk_02022740
+ ldr r0, _080A6BF0 @ =gFuseInfo
ldrb r2, [r0, #3]
lsls r2, r2, #3
ldr r0, _080A6BF4 @ =gUnk_080C9CBC
@@ -3925,7 +3925,7 @@ _080A6BD4:
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
-_080A6BF0: .4byte gUnk_02022740
+_080A6BF0: .4byte gFuseInfo
_080A6BF4: .4byte gUnk_080C9CBC
_080A6BF8: .4byte gUnk_080FE320
_080A6BFC: .4byte gMenu
diff --git a/asm/utils.s b/asm/utils.s
deleted file mode 100644
index d3ffd9a8..00000000
--- a/asm/utils.s
+++ /dev/null
@@ -1,2677 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_0801D898
-sub_0801D898: @ 0x0801D898
- push {r4, r5, r6, r7, lr}
- adds r5, r0, #0
- adds r4, r1, #0
- adds r6, r2, #0
- movs r0, #0x80
- lsls r0, r0, #8
- ands r0, r3
- movs r1, #0x20
- mov ip, r1
- cmp r0, #0
- beq _0801D8B2
- movs r0, #0x40
- mov ip, r0
-_0801D8B2:
- ldr r0, _0801D8D8 @ =0x00007FFF
- ands r3, r0
- ldr r1, _0801D8DC @ =0x040000D4
- movs r2, #0x80
- lsls r2, r2, #0x18
- orrs r2, r6
- lsls r7, r6, #1
- mov r0, ip
- lsls r6, r0, #1
-_0801D8C4:
- str r4, [r1]
- str r5, [r1, #4]
- str r2, [r1, #8]
- ldr r0, [r1, #8]
- adds r4, r4, r7
- adds r5, r5, r6
- subs r3, #1
- cmp r3, #0
- bne _0801D8C4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801D8D8: .4byte 0x00007FFF
-_0801D8DC: .4byte 0x040000D4
-
- thumb_func_start zMalloc
-zMalloc: @ 0x0801D8E0
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- mov ip, r0
- movs r0, #3
- add ip, r0
- subs r0, #7
- mov r1, ip
- ands r1, r0
- mov ip, r1
- ldr r6, _0801D90C @ =gzHeap
- mov sb, r6
- ldrh r7, [r6]
- movs r5, #1
- movs r3, #0x80
- lsls r3, r3, #5
- add r3, sb
- subs r4, r3, r1
- movs r2, #0
- b _0801D926
- .align 2, 0
-_0801D90C: .4byte gzHeap
-_0801D910:
- cmp r1, r4
- bhi _0801D918
- cmp r3, r0
- bls _0801D952
-_0801D918:
- cmp r4, r1
- bhi _0801D920
- cmp r0, r3
- bls _0801D952
-_0801D920:
- adds r0, r2, #1
- lsls r0, r0, #0x10
- lsrs r2, r0, #0x10
-_0801D926:
- cmp r2, r7
- bhs _0801D94A
- lsls r0, r2, #2
- add r0, sb
- ldrh r1, [r0, #2]
- ldr r6, _0801D95C @ =gzHeap
- adds r1, r1, r6
- ldrh r0, [r0, #4]
- adds r0, r0, r6
- cmp r1, r4
- bhi _0801D940
- cmp r4, r0
- bls _0801D952
-_0801D940:
- cmp r1, r3
- bhi _0801D910
- cmp r3, r0
- bhi _0801D910
- movs r5, #0
-_0801D94A:
- lsls r0, r7, #2
- mov sl, r0
- cmp r5, #0
- bne _0801D9D8
-_0801D952:
- movs r1, #0
- mov r8, r1
- lsls r6, r7, #2
- mov sl, r6
- b _0801D970
- .align 2, 0
-_0801D95C: .4byte gzHeap
-_0801D960:
- movs r5, #0
-_0801D962:
- mov r0, r8
- adds r0, #1
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- mov r8, r0
- cmp r8, r7
- bhs _0801D9D4
-_0801D970:
- mov r1, r8
- lsls r0, r1, #2
- add r0, sb
- ldrh r0, [r0, #2]
- ldr r6, _0801D994 @ =gzHeap
- adds r3, r0, r6
- mov r0, ip
- subs r4, r3, r0
- movs r5, #0
- mov r0, sl
- adds r0, #2
- add r0, sb
- adds r0, #4
- cmp r4, r0
- blo _0801D962
- movs r5, #1
- movs r2, #0
- b _0801D9AE
- .align 2, 0
-_0801D994: .4byte gzHeap
-_0801D998:
- cmp r1, r4
- bhi _0801D9A0
- cmp r3, r0
- bls _0801D960
-_0801D9A0:
- cmp r4, r1
- bhi _0801D9A8
- cmp r0, r3
- bls _0801D960
-_0801D9A8:
- adds r0, r2, #1
- lsls r0, r0, #0x10
- lsrs r2, r0, #0x10
-_0801D9AE:
- cmp r2, r7
- bhs _0801D9D0
- lsls r0, r2, #2
- add r0, sb
- ldrh r1, [r0, #2]
- adds r1, r1, r6
- ldrh r0, [r0, #4]
- adds r0, r0, r6
- cmp r1, r4
- bhi _0801D9C6
- cmp r4, r0
- blo _0801D960
-_0801D9C6:
- cmp r1, r3
- bhs _0801D998
- cmp r3, r0
- bhi _0801D998
- movs r5, #0
-_0801D9D0:
- cmp r5, #0
- beq _0801D962
-_0801D9D4:
- cmp r5, #0
- beq _0801DA00
-_0801D9D8:
- ldr r0, _0801D9FC @ =gUnk_02035542
- mov r1, sl
- adds r2, r1, r0
- subs r3, r0, #2
- subs r1, r4, r3
- strh r1, [r2]
- adds r0, #2
- add r0, sl
- add r1, ip
- strh r1, [r0]
- adds r0, r7, #1
- strh r0, [r3]
- adds r0, r4, #0
- mov r1, ip
- bl MemClear
- adds r0, r4, #0
- b _0801DA02
- .align 2, 0
-_0801D9FC: .4byte gUnk_02035542
-_0801DA00:
- movs r0, #0
-_0801DA02:
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start zFree
-zFree: @ 0x0801DA0C
- push {r4, r5, lr}
- ldr r3, _0801DA44 @ =gzHeap
- subs r1, r0, r3
- ldr r0, _0801DA48 @ =0x00000FFF
- cmp r1, r0
- bhi _0801DA74
- adds r4, r3, #0
- ldrh r5, [r4]
- adds r4, #2
- movs r2, #0
- cmp r2, r5
- bhs _0801DA74
- ldrh r0, [r4]
- cmp r0, r1
- bne _0801DA4C
- lsls r0, r5, #2
- subs r1, r3, #2
- adds r0, r0, r1
- ldrh r1, [r0]
- strh r1, [r4]
- strh r2, [r0]
- adds r0, #2
- ldrh r1, [r0]
- strh r1, [r4, #2]
- strh r2, [r0]
- subs r0, r5, #1
- strh r0, [r3]
- b _0801DA74
- .align 2, 0
-_0801DA44: .4byte gzHeap
-_0801DA48: .4byte 0x00000FFF
-_0801DA4C:
- adds r4, #4
- adds r2, #1
- cmp r2, r5
- bhs _0801DA74
- ldrh r0, [r4]
- cmp r0, r1
- bne _0801DA4C
- lsls r1, r5, #2
- ldr r3, _0801DA78 @ =gUnk_0203553E
- adds r1, r1, r3
- ldrh r0, [r1]
- strh r0, [r4]
- movs r2, #0
- strh r2, [r1]
- adds r1, #2
- ldrh r0, [r1]
- strh r0, [r4, #2]
- strh r2, [r1]
- subs r0, r5, #1
- strh r0, [r3, #2]
-_0801DA74:
- pop {r4, r5, pc}
- .align 2, 0
-_0801DA78: .4byte gUnk_0203553E
-
- thumb_func_start zMallocInit
-zMallocInit: @ 0x0801DA7C
- push {lr}
- ldr r0, _0801DA8C @ =gzHeap
- movs r1, #0x80
- lsls r1, r1, #5
- bl MemClear
- pop {pc}
- .align 2, 0
-_0801DA8C: .4byte gzHeap
-
- thumb_func_start DispReset
-DispReset: @ 0x0801DA90
- push {r4, r5, lr}
- adds r4, r0, #0
- ldr r1, _0801DAEC @ =gMain
- ldrb r0, [r1]
- movs r3, #0
- movs r0, #1
- strb r0, [r1]
- ldr r0, _0801DAF0 @ =gUnk_03003DE0
- strb r3, [r0]
- ldr r0, _0801DAF4 @ =gFadeControl
- strb r3, [r0]
- ldr r5, _0801DAF8 @ =gScreen
- adds r0, r5, #0
- adds r0, #0x6d
- strb r3, [r0]
- subs r0, #1
- strb r3, [r0]
- ldr r1, _0801DAFC @ =0x040000B0
- ldrh r2, [r1, #0xa]
- ldr r0, _0801DB00 @ =0x0000C5FF
- ands r0, r2
- strh r0, [r1, #0xa]
- ldrh r2, [r1, #0xa]
- ldr r0, _0801DB04 @ =0x00007FFF
- ands r0, r2
- strh r0, [r1, #0xa]
- ldrh r0, [r1, #0xa]
- movs r0, #0x80
- lsls r0, r0, #0x13
- strh r3, [r0]
- bl ClearOAM
- bl sub_0801DB34
- ldr r0, _0801DB08 @ =0x0600C000
- movs r1, #0x20
- bl MemClear
- ldr r0, _0801DB0C @ =gBG0Buffer
- movs r1, #0x80
- lsls r1, r1, #4
- bl MemClear
- strh r4, [r5, #0xe]
- pop {r4, r5, pc}
- .align 2, 0
-_0801DAEC: .4byte gMain
-_0801DAF0: .4byte gUnk_03003DE0
-_0801DAF4: .4byte gFadeControl
-_0801DAF8: .4byte gScreen
-_0801DAFC: .4byte 0x040000B0
-_0801DB00: .4byte 0x0000C5FF
-_0801DB04: .4byte 0x00007FFF
-_0801DB08: .4byte 0x0600C000
-_0801DB0C: .4byte gBG0Buffer
-
- thumb_func_start ClearOAM
-ClearOAM: @ 0x0801DB10
- push {r4, lr}
- ldr r3, _0801DB30 @ =gUnk_03000020
- movs r1, #0xe0
- lsls r1, r1, #0x13
- movs r0, #0x80
- movs r4, #0xa8
- lsls r4, r4, #2
- adds r2, r4, #0
-_0801DB20:
- strh r2, [r3]
- adds r3, #8
- strh r2, [r1]
- adds r1, #8
- subs r0, #1
- cmp r0, #0
- bne _0801DB20
- pop {r4, pc}
- .align 2, 0
-_0801DB30: .4byte gUnk_03000020
-
- thumb_func_start sub_0801DB34
-sub_0801DB34: @ 0x0801DB34
- push {r4, lr}
- ldr r4, _0801DB6C @ =gScreen
- adds r0, r4, #0
- movs r1, #0x7c
- bl MemClear
- ldr r0, _0801DB70 @ =gBG0Buffer
- str r0, [r4, #0x10]
- ldr r0, _0801DB74 @ =0x00001F0C
- strh r0, [r4, #8]
- ldr r0, _0801DB78 @ =gBG1Buffer
- str r0, [r4, #0x1c]
- ldr r0, _0801DB7C @ =0x00001C01
- strh r0, [r4, #0x14]
- ldr r0, _0801DB80 @ =gBG2Buffer
- str r0, [r4, #0x28]
- ldr r0, _0801DB84 @ =0x00001D02
- strh r0, [r4, #0x20]
- ldr r0, _0801DB88 @ =gBG3Buffer
- str r0, [r4, #0x34]
- ldr r0, _0801DB8C @ =0x00001E03
- strh r0, [r4, #0x2c]
- movs r0, #0xa0
- lsls r0, r0, #1
- strh r0, [r4]
- ldr r0, _0801DB90 @ =0x0000FFFF
- strh r0, [r4, #6]
- pop {r4, pc}
- .align 2, 0
-_0801DB6C: .4byte gScreen
-_0801DB70: .4byte gBG0Buffer
-_0801DB74: .4byte 0x00001F0C
-_0801DB78: .4byte gBG1Buffer
-_0801DB7C: .4byte 0x00001C01
-_0801DB80: .4byte gBG2Buffer
-_0801DB84: .4byte 0x00001D02
-_0801DB88: .4byte gBG3Buffer
-_0801DB8C: .4byte 0x00001E03
-_0801DB90: .4byte 0x0000FFFF
-
- thumb_func_start sub_0801DB94
-sub_0801DB94: @ 0x0801DB94
- ldr r0, _0801DB9C @ =gScreenTransition
- ldrh r0, [r0, #0x1e]
- lsrs r0, r0, #0xb
- bx lr
- .align 2, 0
-_0801DB9C: .4byte gScreenTransition
-
- thumb_func_start sub_0801DBA0
-sub_0801DBA0: @ 0x0801DBA0
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- sub sp, #4
- adds r4, r0, #0
- adds r5, r1, #0
- adds r1, r2, #0
- adds r0, r5, #0
- bl MemClear
- movs r0, #1
- strb r0, [r5]
- ldr r2, _0801DBE4 @ =gScreenTransition
- ldrh r0, [r2, #0x1c]
- lsrs r0, r0, #4
- movs r1, #0x7f
- ands r0, r1
- strb r0, [r5, #1]
- ldrh r0, [r2, #0x1e]
- lsrs r0, r0, #4
- ands r0, r1
- strb r0, [r5, #2]
- adds r5, #3
- ldr r1, _0801DBE8 @ =gUnk_080C9C50
- ldr r0, _0801DBEC @ =gArea
- ldrb r0, [r0, #3]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r0, [r0]
- lsls r4, r4, #2
- adds r4, r4, r0
- ldr r6, [r4]
- b _0801DD3A
- .align 2, 0
-_0801DBE4: .4byte gScreenTransition
-_0801DBE8: .4byte gUnk_080C9C50
-_0801DBEC: .4byte gArea
-_0801DBF0:
- ldrb r0, [r6]
- ldrb r1, [r6, #1]
- movs r2, #3
- bl GetRoomProperty
- adds r4, r0, #0
- cmp r4, #0
- bne _0801DC04
- adds r6, #8
- b _0801DD3A
-_0801DC04:
- adds r0, r6, #0
- bl sub_0801DF10
- mov r8, r0
- bl HasDungeonBigKey
- movs r1, #8
- adds r1, r1, r6
- mov sb, r1
- cmp r0, #0
- beq _0801DCAE
- ldrb r0, [r4]
- cmp r0, #0
- beq _0801DCAE
- movs r3, #0xfc
- lsls r3, r3, #2
- ldr r7, _0801DC84 @ =0x000007FF
-_0801DC26:
- ldrb r0, [r4]
- cmp r0, #3
- bgt _0801DCA6
- cmp r0, #2
- blt _0801DCA6
- ldrb r1, [r4, #1]
- mov r0, r8
- str r3, [sp]
- bl CheckLocalFlagByBank
- ldr r3, [sp]
- cmp r0, #0
- bne _0801DCA6
- ldr r0, _0801DC88 @ =gAreaRoomHeaders
- ldrb r2, [r6]
- lsls r2, r2, #2
- adds r2, r2, r0
- ldrb r1, [r6, #1]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #1
- ldr r1, [r2]
- adds r2, r1, r0
- movs r0, #2
- strb r0, [r5]
- ldrb r0, [r4]
- cmp r0, #2
- bne _0801DC8C
- ldrh r0, [r4, #4]
- lsls r0, r0, #4
- ands r0, r3
- movs r1, #8
- orrs r0, r1
- ldrh r1, [r2]
- ands r1, r7
- adds r0, r0, r1
- asrs r0, r0, #4
- strb r0, [r5, #1]
- ldrh r0, [r4, #4]
- lsrs r0, r0, #2
- ands r0, r3
- movs r1, #8
- orrs r0, r1
- ldrh r1, [r2, #2]
- ands r1, r7
- b _0801DC9E
- .align 2, 0
-_0801DC84: .4byte 0x000007FF
-_0801DC88: .4byte gAreaRoomHeaders
-_0801DC8C:
- ldrh r0, [r2]
- ands r0, r7
- ldrh r1, [r4, #4]
- adds r0, r0, r1
- asrs r0, r0, #4
- strb r0, [r5, #1]
- ldrh r0, [r2, #2]
- ands r0, r7
- ldrh r1, [r4, #6]
-_0801DC9E:
- adds r0, r0, r1
- asrs r0, r0, #4
- strb r0, [r5, #2]
- adds r5, #3
-_0801DCA6:
- adds r4, #8
- ldrb r0, [r4]
- cmp r0, #0
- bne _0801DC26
-_0801DCAE:
- bl HasDungeonBigKey
- cmp r0, #0
- beq _0801DD16
- ldrb r1, [r6, #2]
- movs r0, #2
- ands r0, r1
- cmp r0, #0
- beq _0801DD16
- ldr r0, _0801DD4C @ =gArea
- ldrb r0, [r0, #3]
- adds r0, #1
- bl CheckGlobalFlag
- cmp r0, #0
- bne _0801DD16
- ldr r0, _0801DD50 @ =gAreaRoomHeaders
- ldrb r2, [r6]
- lsls r2, r2, #2
- adds r2, r2, r0
- ldrb r1, [r6, #1]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #1
- ldr r1, [r2]
- adds r2, r1, r0
- movs r0, #4
- strb r0, [r5]
- ldrh r0, [r2, #4]
- lsrs r0, r0, #1
- ldrh r1, [r2]
- adds r0, r0, r1
- asrs r1, r0, #4
- adds r0, r1, #0
- cmp r1, #0
- bge _0801DCF8
- adds r0, #0x7f
-_0801DCF8:
- asrs r0, r0, #7
- lsls r0, r0, #7
- subs r0, r1, r0
- strb r0, [r5, #1]
- ldrh r0, [r2, #6]
- lsrs r0, r0, #1
- ldrh r2, [r2, #2]
- adds r0, r0, r2
- asrs r1, r0, #4
- adds r0, r1, #0
- asrs r0, r0, #7
- lsls r0, r0, #7
- subs r0, r1, r0
- strb r0, [r5, #2]
- adds r5, #3
-_0801DD16:
- ldr r2, _0801DD54 @ =gScreenTransition
- ldrh r0, [r6]
- ldrh r1, [r2, #0x16]
- cmp r0, r1
- bne _0801DD38
- movs r0, #3
- strb r0, [r5]
- ldrh r0, [r2, #0x18]
- lsrs r0, r0, #4
- movs r1, #0x7f
- ands r0, r1
- strb r0, [r5, #1]
- ldrh r0, [r2, #0x1a]
- lsrs r0, r0, #4
- ands r0, r1
- strb r0, [r5, #2]
- adds r5, #3
-_0801DD38:
- mov r6, sb
-_0801DD3A:
- ldrb r0, [r6]
- cmp r0, #0
- beq _0801DD42
- b _0801DBF0
-_0801DD42:
- add sp, #4
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801DD4C: .4byte gArea
-_0801DD50: .4byte gAreaRoomHeaders
-_0801DD54: .4byte gScreenTransition
-
- thumb_func_start sub_0801DD58
-sub_0801DD58: @ 0x0801DD58
- ldr r2, _0801DD7C @ =gAreaRoomHeaders
- lsls r0, r0, #2
- adds r0, r0, r2
- lsls r2, r1, #2
- adds r2, r2, r1
- lsls r2, r2, #1
- ldr r3, [r0]
- adds r3, r3, r2
- ldr r0, _0801DD80 @ =gArea
- ldr r1, _0801DD84 @ =0x0000085C
- adds r0, r0, r1
- ldr r2, [r0]
- ldrh r1, [r3]
- strh r1, [r2, #4]
- ldr r1, [r0]
- ldrh r0, [r3, #2]
- strh r0, [r1, #6]
- bx lr
- .align 2, 0
-_0801DD7C: .4byte gAreaRoomHeaders
-_0801DD80: .4byte gArea
-_0801DD84: .4byte 0x0000085C
-
- thumb_func_start LoadDungeonMap
-LoadDungeonMap: @ 0x0801DD88
- push {lr}
- ldr r0, _0801DD98 @ =gUnk_0201AEE0
- ldr r1, _0801DD9C @ =0x06006000
- movs r2, #0x80
- lsls r2, r2, #6
- bl LoadResourceAsync
- pop {pc}
- .align 2, 0
-_0801DD98: .4byte gUnk_0201AEE0
-_0801DD9C: .4byte 0x06006000
-
- thumb_func_start sub_0801DDA0
-sub_0801DDA0: @ 0x0801DDA0
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #0x14
- adds r4, r0, #0
- bl CheckHasMap
- cmp r0, #0
- bne _0801DDB8
- b _0801DEEA
-_0801DDB8:
- ldr r1, _0801DDD8 @ =gUnk_080C9C50
- ldr r0, _0801DDDC @ =gArea
- ldrb r0, [r0, #3]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r1, [r0]
- lsls r0, r4, #2
- adds r0, r0, r1
- ldr r4, [r0]
- ldr r0, _0801DDE0 @ =gUnk_02019EE0
- movs r1, #0x80
- lsls r1, r1, #8
- bl MemClear
- b _0801DEE2
- .align 2, 0
-_0801DDD8: .4byte gUnk_080C9C50
-_0801DDDC: .4byte gArea
-_0801DDE0: .4byte gUnk_02019EE0
-_0801DDE4:
- ldrb r0, [r4]
- ldrb r1, [r4, #1]
- movs r2, #3
- bl GetRoomProperty
- adds r6, r0, #0
- adds r0, r4, #0
- bl sub_0801DF10
- adds r5, r0, #0
- movs r0, #0
- str r0, [sp, #0xc]
- ldrh r2, [r4]
- ldr r0, _0801DE14 @ =gUnk_02032EC0
- ldrh r3, [r0, #0x20]
- ldr r1, _0801DE18 @ =0x0000FFFF
- ands r1, r2
- ldr r0, _0801DE18 @ =0x0000FFFF
- ands r0, r3
- cmp r1, r0
- bne _0801DE1C
- movs r3, #8
- b _0801DE36
- .align 2, 0
-_0801DE14: .4byte gUnk_02032EC0
-_0801DE18: .4byte 0x0000FFFF
-_0801DE1C:
- bl HasDungeonSmallKey
- cmp r0, #0
- beq _0801DE28
- movs r0, #2
- str r0, [sp, #0xc]
-_0801DE28:
- adds r0, r6, #0
- adds r1, r5, #0
- bl sub_0801DF90
- cmp r0, #0
- beq _0801DE38
- movs r3, #3
-_0801DE36:
- str r3, [sp, #0xc]
-_0801DE38:
- ldrb r1, [r4, #2]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- beq _0801DE46
- movs r0, #0
- str r0, [sp, #0xc]
-_0801DE46:
- adds r3, r4, #0
- adds r3, #8
- str r3, [sp, #0x10]
- ldr r0, [sp, #0xc]
- cmp r0, #0
- beq _0801DEE0
- ldr r2, _0801DEF8 @ =0x040000D4
- ldr r0, [r4, #4]
- ldr r1, _0801DEFC @ =gMapData
- adds r0, r0, r1
- str r0, [r2]
- ldr r0, _0801DF00 @ =gUnk_02019EE0
- str r0, [r2, #4]
- ldr r0, _0801DF04 @ =0x84000100
- str r0, [r2, #8]
- ldr r0, [r2, #8]
- ldr r0, _0801DF08 @ =gAreaRoomHeaders
- ldrb r2, [r4]
- lsls r2, r2, #2
- adds r2, r2, r0
- ldrb r1, [r4, #1]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #1
- ldr r2, [r2]
- adds r2, r2, r0
- ldrh r0, [r2]
- lsrs r0, r0, #4
- str r0, [sp]
- ldrh r0, [r2, #2]
- ldr r1, _0801DF0C @ =0x000007FF
- ands r0, r1
- lsrs r0, r0, #4
- str r0, [sp, #4]
- ldrh r0, [r2, #4]
- lsrs r7, r0, #4
- ldrh r0, [r2, #6]
- lsrs r0, r0, #4
- mov sl, r0
- adds r0, r7, #3
- lsrs r0, r0, #2
- str r0, [sp, #8]
- movs r6, #0
- cmp r6, sl
- bhs _0801DEE0
-_0801DEA0:
- ldr r3, [sp, #8]
- adds r1, r6, #0
- muls r1, r3, r1
- ldr r0, _0801DF00 @ =gUnk_02019EE0
- adds r1, r1, r0
- mov r8, r1
- movs r5, #0
- adds r0, r6, #1
- mov sb, r0
- cmp r5, r7
- bhs _0801DEDA
-_0801DEB6:
- ldr r3, [sp]
- adds r4, r3, r5
- adds r0, r5, #0
- mov r1, r8
- bl sub_0801DF60
- ldr r1, [sp, #0xc]
- bl sub_0801DF78
- adds r2, r0, #0
- adds r0, r4, #0
- ldr r3, [sp, #4]
- adds r1, r3, r6
- bl sub_0801DF28
- adds r5, #1
- cmp r5, r7
- blo _0801DEB6
-_0801DEDA:
- mov r6, sb
- cmp r6, sl
- blo _0801DEA0
-_0801DEE0:
- ldr r4, [sp, #0x10]
-_0801DEE2:
- ldrb r0, [r4]
- cmp r0, #0
- beq _0801DEEA
- b _0801DDE4
-_0801DEEA:
- add sp, #0x14
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801DEF8: .4byte 0x040000D4
-_0801DEFC: .4byte gMapData
-_0801DF00: .4byte gUnk_02019EE0
-_0801DF04: .4byte 0x84000100
-_0801DF08: .4byte gAreaRoomHeaders
-_0801DF0C: .4byte 0x000007FF
-
- thumb_func_start sub_0801DF10
-sub_0801DF10: @ 0x0801DF10
- push {lr}
- adds r1, r0, #0
- ldrb r0, [r1, #3]
- cmp r0, #1
- bne _0801DF20
- movs r0, #0xc0
- lsls r0, r0, #2
- b _0801DF26
-_0801DF20:
- ldrb r0, [r1]
- bl GetFlagBankOffset
-_0801DF26:
- pop {pc}
-
- thumb_func_start sub_0801DF28
-sub_0801DF28: @ 0x0801DF28
- push {r4, lr}
- lsrs r4, r1, #3
- lsls r4, r4, #4
- lsrs r3, r0, #3
- adds r4, r4, r3
- lsls r4, r4, #5
- ldr r3, _0801DF58 @ =gUnk_0201AEE0
- adds r4, r4, r3
- movs r3, #7
- ands r1, r3
- lsls r1, r1, #2
- adds r4, r4, r1
- ands r0, r3
- lsls r0, r0, #2
- lsls r2, r0
- ldr r1, _0801DF5C @ =gUnk_080C9460
- adds r0, r0, r1
- ldr r1, [r4]
- ldr r0, [r0]
- ands r1, r0
- orrs r1, r2
- str r1, [r4]
- pop {r4, pc}
- .align 2, 0
-_0801DF58: .4byte gUnk_0201AEE0
-_0801DF5C: .4byte gUnk_080C9460
-
- thumb_func_start sub_0801DF60
-sub_0801DF60: @ 0x0801DF60
- adds r3, r0, #0
- lsrs r0, r3, #2
- adds r0, r0, r1
- ldrb r0, [r0]
- movs r2, #3
- adds r1, r2, #0
- bics r1, r3
- lsls r1, r1, #1
- asrs r0, r1
- ands r0, r2
- bx lr
- .align 2, 0
-
- thumb_func_start sub_0801DF78
-sub_0801DF78: @ 0x0801DF78
- push {lr}
- cmp r0, #2
- beq _0801DF88
- cmp r0, #2
- blo _0801DF8E
- cmp r0, #3
- beq _0801DF8C
- b _0801DF8E
-_0801DF88:
- adds r0, r1, #0
- b _0801DF8E
-_0801DF8C:
- movs r0, #7
-_0801DF8E:
- pop {pc}
-
- thumb_func_start sub_0801DF90
-sub_0801DF90: @ 0x0801DF90
- push {lr}
- adds r2, r1, #0
- cmp r0, #0
- bne _0801DFAA
- b _0801DFB0
-_0801DF9A:
- ldrb r1, [r0, #1]
- adds r0, r2, #0
- bl CheckLocalFlagByBank
- b _0801DFB2
-_0801DFA4:
- cmp r1, #1
- beq _0801DF9A
- adds r0, #8
-_0801DFAA:
- ldrb r1, [r0]
- cmp r1, #0
- bne _0801DFA4
-_0801DFB0:
- movs r0, #0
-_0801DFB2:
- pop {pc}
-
- thumb_func_start sub_0801DFB4
-sub_0801DFB4: @ 0x0801DFB4
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- mov r8, r0
- adds r4, r1, #0
- adds r5, r2, #0
- adds r6, r3, #0
- ldr r7, _0801E004 @ =gUnk_02022740
- adds r0, r7, #0
- movs r1, #0x10
- bl MemClear
- strh r4, [r7, #6]
- strh r5, [r7, #8]
- strh r6, [r7, #0xa]
- mov r0, r8
- str r0, [r7, #0xc]
- ldr r0, _0801E008 @ =gUnk_03003DF0
- ldrb r0, [r0, #2]
- strb r0, [r7, #3]
- mov r1, r8
- cmp r1, #0
- beq _0801DFF8
- ldrb r1, [r1, #0x11]
- lsls r0, r1, #0x1c
- lsrs r0, r0, #0x1c
- strb r0, [r7, #4]
- movs r0, #0x10
- rsbs r0, r0, #0
- ands r0, r1
- movs r1, #2
- orrs r0, r1
- mov r1, r8
- strb r0, [r1, #0x11]
-_0801DFF8:
- movs r0, #0
- strb r0, [r7]
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801E004: .4byte gUnk_02022740
-_0801E008: .4byte gUnk_03003DF0
-
- thumb_func_start sub_0801E00C
-sub_0801E00C: @ 0x0801E00C
- push {r4, lr}
- ldr r1, _0801E024 @ =gUnk_080C9CAC
- ldr r4, _0801E028 @ =gUnk_02022740
- ldrb r0, [r4, #1]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- ldrb r0, [r4]
- pop {r4, pc}
- .align 2, 0
-_0801E024: .4byte gUnk_080C9CAC
-_0801E028: .4byte gUnk_02022740
-
- thumb_func_start sub_0801E02C
-sub_0801E02C: @ 0x0801E02C
- push {r4, lr}
- ldr r4, _0801E040 @ =gUnk_02022740
- ldrh r0, [r4, #6]
- bl sub_0801E0E0
- movs r0, #3
- strb r0, [r4]
- movs r0, #1
- strb r0, [r4, #1]
- pop {r4, pc}
- .align 2, 0
-_0801E040: .4byte gUnk_02022740
-
- thumb_func_start sub_0801E044
-sub_0801E044: @ 0x0801E044
- push {lr}
- ldr r0, _0801E06C @ =gMessage
- ldrb r1, [r0]
- movs r0, #0x7f
- ands r0, r1
- cmp r0, #0
- bne _0801E06A
- movs r0, #4
- movs r1, #0
- bl MenuFadeIn
- ldr r0, _0801E070 @ =gUnk_02022740
- movs r1, #4
- strb r1, [r0]
- movs r1, #2
- strb r1, [r0, #1]
- movs r0, #0x6b
- bl SoundReq
-_0801E06A:
- pop {pc}
- .align 2, 0
-_0801E06C: .4byte gMessage
-_0801E070: .4byte gUnk_02022740
-
- thumb_func_start sub_0801E074
-sub_0801E074: @ 0x0801E074
- push {lr}
- ldr r0, _0801E084 @ =gUnk_02022740
- ldrb r1, [r0]
- cmp r1, #5
- beq _0801E088
- cmp r1, #6
- beq _0801E08C
- b _0801E098
- .align 2, 0
-_0801E084: .4byte gUnk_02022740
-_0801E088:
- ldrh r0, [r0, #8]
- b _0801E08E
-_0801E08C:
- ldrh r0, [r0, #0xa]
-_0801E08E:
- bl sub_0801E0E0
- ldr r1, _0801E09C @ =gUnk_02022740
- movs r0, #3
- strb r0, [r1, #1]
-_0801E098:
- pop {pc}
- .align 2, 0
-_0801E09C: .4byte gUnk_02022740
-
- thumb_func_start sub_0801E0A0
-sub_0801E0A0: @ 0x0801E0A0
- push {r4, lr}
- ldr r0, _0801E0D8 @ =gMessage
- ldrb r1, [r0]
- movs r0, #0x7f
- ands r0, r1
- cmp r0, #0
- bne _0801E0D4
- ldr r4, _0801E0DC @ =gUnk_02022740
- ldr r3, [r4, #0xc]
- cmp r3, #0
- beq _0801E0C8
- ldrb r0, [r4, #4]
- movs r1, #0xf
- ands r1, r0
- ldrb r2, [r3, #0x11]
- movs r0, #0x10
- rsbs r0, r0, #0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, #0x11]
-_0801E0C8:
- ldrb r0, [r4]
- movs r1, #1
- cmp r0, #6
- bne _0801E0D2
- movs r1, #2
-_0801E0D2:
- strb r1, [r4]
-_0801E0D4:
- pop {r4, pc}
- .align 2, 0
-_0801E0D8: .4byte gMessage
-_0801E0DC: .4byte gUnk_02022740
-
- thumb_func_start sub_0801E0E0
-sub_0801E0E0: @ 0x0801E0E0
- push {lr}
- adds r2, r0, #0
- cmp r2, #0
- beq _0801E102
- ldr r0, _0801E0F8 @ =gUnk_02022740
- ldr r1, [r0, #0xc]
- cmp r1, #0
- beq _0801E0FC
- adds r0, r2, #0
- bl MessageNoOverlap
- b _0801E102
- .align 2, 0
-_0801E0F8: .4byte gUnk_02022740
-_0801E0FC:
- adds r0, r2, #0
- bl MessageFromTarget
-_0801E102:
- pop {pc}
-
- thumb_func_start sub_0801E104
-sub_0801E104: @ 0x0801E104
- ldr r1, _0801E118 @ =gScreen
- ldrh r2, [r1]
- ldr r0, _0801E11C @ =0x00009FFF
- ands r0, r2
- movs r2, #0
- strh r0, [r1]
- adds r1, #0x6c
- strb r2, [r1]
- bx lr
- .align 2, 0
-_0801E118: .4byte gScreen
-_0801E11C: .4byte 0x00009FFF
-
- thumb_func_start sub_0801E120
-sub_0801E120: @ 0x0801E120
- ldr r3, _0801E14C @ =gScreen
- ldrh r1, [r3]
- movs r2, #0x80
- lsls r2, r2, #6
- adds r0, r2, #0
- movs r2, #0
- orrs r0, r1
- strh r0, [r3]
- adds r1, r3, #0
- adds r1, #0x60
- ldr r0, _0801E150 @ =0x00003F37
- strh r0, [r1]
- adds r1, #2
- movs r0, #0x3f
- strh r0, [r1]
- adds r0, r3, #0
- adds r0, #0x58
- strh r2, [r0]
- subs r1, #6
- movs r0, #0xa0
- strh r0, [r1]
- bx lr
- .align 2, 0
-_0801E14C: .4byte gScreen
-_0801E150: .4byte 0x00003F37
-
- thumb_func_start sub_0801E154
-sub_0801E154: @ 0x0801E154
- push {lr}
- movs r1, #0
- bl sub_0801E24C
- pop {pc}
- .align 2, 0
-
- thumb_func_start sub_0801E160
-sub_0801E160: @ 0x0801E160
- push {r4, r5, r6, lr}
- mov r6, sb
- mov r5, r8
- push {r5, r6}
- adds r6, r0, #0
- mov r8, r1
- mov sb, r2
- ldr r5, _0801E1A8 @ =gUnk_03003DE4
- ldrb r1, [r5]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- ldr r4, _0801E1AC @ =gUnk_02017AA0
- adds r0, r0, r4
- movs r1, #0xa0
- lsls r1, r1, #4
- bl MemClear
- adds r0, r6, #0
- mov r1, r8
- mov r2, sb
- bl sub_0801E290
- ldrb r1, [r5]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- adds r0, r0, r4
- ldr r1, _0801E1B0 @ =0x04000040
- ldr r2, _0801E1B4 @ =0xA2600001
- bl sub_0805622C
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0801E1A8: .4byte gUnk_03003DE4
-_0801E1AC: .4byte gUnk_02017AA0
-_0801E1B0: .4byte 0x04000040
-_0801E1B4: .4byte 0xA2600001
-
- thumb_func_start sub_0801E1B8
-sub_0801E1B8: @ 0x0801E1B8
- push {r4, lr}
- ldr r2, _0801E1E8 @ =gScreen
- mov ip, r2
- ldrh r3, [r2]
- movs r4, #0x80
- lsls r4, r4, #6
- adds r2, r4, #0
- movs r4, #0
- orrs r2, r3
- mov r3, ip
- strh r2, [r3]
- mov r2, ip
- adds r2, #0x60
- strh r0, [r2]
- mov r0, ip
- adds r0, #0x62
- strh r1, [r0]
- subs r0, #0xa
- strh r4, [r0]
- mov r1, ip
- adds r1, #0x5c
- movs r0, #0xa0
- strh r0, [r1]
- pop {r4, pc}
- .align 2, 0
-_0801E1E8: .4byte gScreen
-
- thumb_func_start sub_0801E1EC
-sub_0801E1EC: @ 0x0801E1EC
- push {r4, r5, r6, lr}
- mov r6, sb
- mov r5, r8
- push {r5, r6}
- mov r8, r0
- mov sb, r1
- adds r4, r2, #0
- ldr r6, _0801E23C @ =gUnk_03003DE4
- ldrb r1, [r6]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- ldr r5, _0801E240 @ =gUnk_02017AA0
- adds r0, r0, r5
- movs r1, #0xa0
- lsls r1, r1, #4
- bl MemClear
- adds r0, r4, #0
- movs r1, #0
- bl sub_0801E24C
- mov r0, r8
- mov r1, sb
- adds r2, r4, #0
- bl sub_0801E290
- ldrb r1, [r6]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- adds r0, r0, r5
- ldr r1, _0801E244 @ =0x04000040
- ldr r2, _0801E248 @ =0xA2600001
- bl sub_0805622C
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0801E23C: .4byte gUnk_03003DE4
-_0801E240: .4byte gUnk_02017AA0
-_0801E244: .4byte 0x04000040
-_0801E248: .4byte 0xA2600001
-
- thumb_func_start sub_0801E24C
-sub_0801E24C: @ 0x0801E24C
- push {r4, r5, lr}
- lsls r1, r1, #1
- ldr r2, _0801E278 @ =gUnk_02018EE0
- adds r5, r1, r2
- movs r3, #0
- adds r2, r0, #0
- lsls r4, r2, #1
- movs r0, #3
- subs r1, r0, r4
- cmp r3, r2
- bgt _0801E28E
- adds r4, r4, r5
-_0801E264:
- lsls r0, r3, #1
- adds r0, r0, r5
- strh r2, [r0]
- strh r3, [r4]
- cmp r1, #0
- bge _0801E27C
- adds r1, #6
- lsls r0, r3, #2
- adds r1, r1, r0
- b _0801E288
- .align 2, 0
-_0801E278: .4byte gUnk_02018EE0
-_0801E27C:
- adds r1, #0xa
- subs r0, r3, r2
- lsls r0, r0, #2
- adds r1, r1, r0
- subs r4, #2
- subs r2, #1
-_0801E288:
- adds r3, #1
- cmp r3, r2
- ble _0801E264
-_0801E28E:
- pop {r4, r5, pc}
-
- thumb_func_start sub_0801E290
-sub_0801E290: @ 0x0801E290
- push {r4, r5, r6, r7, lr}
- mov r7, sb
- mov r6, r8
- push {r6, r7}
- mov ip, r0
- adds r6, r2, #0
- ldr r0, _0801E2BC @ =gUnk_03003DE4
- ldrb r0, [r0]
- lsls r2, r0, #2
- adds r2, r2, r0
- lsls r2, r2, #9
- lsls r0, r1, #1
- ldr r3, _0801E2C0 @ =gUnk_02017AA0
- adds r0, r0, r3
- adds r2, r2, r0
- adds r4, r2, #0
- adds r5, r1, #0
- mov sb, r5
- ldr r0, _0801E2C4 @ =gUnk_02018EE0
- mov r8, r0
- b _0801E30A
- .align 2, 0
-_0801E2BC: .4byte gUnk_03003DE4
-_0801E2C0: .4byte gUnk_02017AA0
-_0801E2C4: .4byte gUnk_02018EE0
-_0801E2C8:
- mov r1, r8
- movs r3, #0
- ldrsh r0, [r1, r3]
- movs r7, #2
- add r8, r7
- mov r3, ip
- subs r1, r3, r0
- adds r3, r3, r0
- cmp r1, #0
- bge _0801E2DE
- movs r1, #0
-_0801E2DE:
- cmp r3, #0xef
- ble _0801E2E4
- movs r3, #0xf0
-_0801E2E4:
- mov r7, sb
- lsls r0, r7, #0x10
- lsrs r0, r0, #0x10
- cmp r0, #0x9f
- bhi _0801E2F2
- strb r3, [r4]
- strb r1, [r4, #1]
-_0801E2F2:
- lsls r0, r5, #0x10
- lsrs r0, r0, #0x10
- cmp r0, #0x9f
- bhi _0801E2FE
- strb r3, [r2]
- strb r1, [r2, #1]
-_0801E2FE:
- subs r4, #2
- adds r2, #2
- movs r0, #1
- rsbs r0, r0, #0
- add sb, r0
- adds r5, #1
-_0801E30A:
- adds r0, r6, #0
- subs r6, #1
- cmp r0, #0
- bne _0801E2C8
- pop {r3, r4}
- mov r8, r3
- mov sb, r4
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-
- thumb_func_start sub_0801E31C
-sub_0801E31C: @ 0x0801E31C
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #0x20
- str r0, [sp]
- str r1, [sp, #4]
- mov sl, r2
- mov sb, r3
- ldr r0, _0801E3AC @ =gUnk_03003DE4
- ldrb r1, [r0]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- ldr r1, _0801E3B0 @ =gUnk_02017AA0
- adds r0, r0, r1
- movs r1, #0xa0
- lsls r1, r1, #4
- bl MemClear
- cmp sl, sb
- bge _0801E3DC
- movs r6, #0
- mov r8, sl
- mov r7, r8
- mov r0, r8
- lsls r1, r0, #1
- movs r0, #3
- subs r5, r0, r1
- cmp r6, r8
- ble _0801E35E
- b _0801E45E
-_0801E35E:
- mov r1, r8
- lsls r0, r1, #2
- ldr r4, _0801E3B4 @ =gUnk_02018EE0
- adds r0, r0, r4
- str r0, [sp, #0x10]
- mov r1, sb
- mov r0, r8
- muls r0, r1, r0
- str r0, [sp, #0x14]
- movs r3, #0
-_0801E372:
- adds r0, r3, #0
- mov r1, sl
- str r3, [sp, #0x18]
- bl Div
- adds r4, r0, #0
- lsls r4, r4, #0x10
- lsrs r4, r4, #0x10
- str r4, [sp, #0x1c]
- ldr r0, [sp, #0x14]
- mov r1, sl
- bl Div
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- lsls r2, r6, #2
- ldr r4, _0801E3B4 @ =gUnk_02018EE0
- adds r1, r2, r4
- str r0, [r1]
- ldr r0, [sp, #0x1c]
- ldr r1, [sp, #0x10]
- str r0, [r1]
- ldr r3, [sp, #0x18]
- cmp r5, #0
- bge _0801E3B8
- adds r0, r5, #6
- adds r5, r0, r2
- b _0801E3D2
- .align 2, 0
-_0801E3AC: .4byte gUnk_03003DE4
-_0801E3B0: .4byte gUnk_02017AA0
-_0801E3B4: .4byte gUnk_02018EE0
-_0801E3B8:
- adds r1, r5, #0
- adds r1, #0xa
- subs r0, r6, r7
- lsls r0, r0, #2
- adds r5, r1, r0
- ldr r4, [sp, #0x10]
- subs r4, #4
- str r4, [sp, #0x10]
- ldr r0, [sp, #0x14]
- mov r1, sb
- subs r0, r0, r1
- str r0, [sp, #0x14]
- subs r7, #1
-_0801E3D2:
- add r3, sb
- adds r6, #1
- cmp r6, r7
- ble _0801E372
- b _0801E45E
-_0801E3DC:
- movs r6, #0
- mov r8, sb
- mov r7, r8
- mov r4, r8
- lsls r1, r4, #1
- movs r0, #3
- subs r5, r0, r1
- cmp r6, r8
- bgt _0801E45E
- lsls r0, r4, #2
- ldr r1, _0801E438 @ =gUnk_02018EE0
- adds r0, r0, r1
- str r0, [sp, #8]
- mov r0, sl
- mov r4, r8
- muls r4, r0, r4
- str r4, [sp, #0xc]
- movs r3, #0
-_0801E400:
- adds r0, r3, #0
- mov r1, sb
- str r3, [sp, #0x18]
- bl Div
- adds r4, r0, #0
- lsls r4, r4, #0x10
- lsrs r4, r4, #0x10
- str r4, [sp, #0x1c]
- ldr r0, [sp, #0xc]
- mov r1, sb
- bl Div
- lsls r0, r0, #0x10
- lsrs r0, r0, #0x10
- lsls r2, r6, #2
- ldr r4, _0801E438 @ =gUnk_02018EE0
- adds r1, r2, r4
- str r0, [r1]
- ldr r0, [sp, #0x1c]
- ldr r1, [sp, #8]
- str r0, [r1]
- ldr r3, [sp, #0x18]
- cmp r5, #0
- bge _0801E43C
- adds r0, r5, #6
- adds r5, r0, r2
- b _0801E456
- .align 2, 0
-_0801E438: .4byte gUnk_02018EE0
-_0801E43C:
- adds r1, r5, #0
- adds r1, #0xa
- subs r0, r6, r7
- lsls r0, r0, #2
- adds r5, r1, r0
- ldr r4, [sp, #8]
- subs r4, #4
- str r4, [sp, #8]
- ldr r0, [sp, #0xc]
- mov r1, sl
- subs r0, r0, r1
- str r0, [sp, #0xc]
- subs r7, #1
-_0801E456:
- add r3, sl
- adds r6, #1
- cmp r6, r7
- ble _0801E400
-_0801E45E:
- ldr r0, [sp]
- ldr r1, [sp, #4]
- mov r2, r8
- bl sub_0801E290
- ldr r0, _0801E48C @ =gUnk_03003DE4
- ldrb r1, [r0]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- ldr r1, _0801E490 @ =gUnk_02017AA0
- adds r0, r0, r1
- ldr r1, _0801E494 @ =0x04000040
- ldr r2, _0801E498 @ =0xA2600001
- bl sub_0805622C
- add sp, #0x20
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801E48C: .4byte gUnk_03003DE4
-_0801E490: .4byte gUnk_02017AA0
-_0801E494: .4byte 0x04000040
-_0801E498: .4byte 0xA2600001
-
- thumb_func_start sub_0801E49C
-sub_0801E49C: @ 0x0801E49C
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- sub sp, #8
- mov r8, r0
- str r1, [sp, #4]
- mov sb, r2
- adds r5, r3, #0
- ldr r0, _0801E5E4 @ =0x0000FFFF
- movs r2, #0xf0
- lsls r2, r2, #3
- ldr r1, _0801E5E8 @ =gUnk_02018EE0
- bl MemFill16
- adds r3, r5, #0
- subs r3, #0x40
- movs r2, #0xff
- ands r3, r2
- ldr r1, _0801E5EC @ =gSineTable
- adds r0, r3, #0
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r4, #0
- ldrsh r0, [r0, r4]
- mov r4, sb
- muls r4, r0, r4
- adds r0, r4, #0
- asrs r0, r0, #8
- mov r4, r8
- adds r7, r4, r0
- lsls r0, r3, #1
- adds r0, r0, r1
- movs r3, #0
- ldrsh r0, [r0, r3]
- mov r4, sb
- muls r4, r0, r4
- adds r0, r4, #0
- asrs r0, r0, #8
- ldr r3, [sp, #4]
- adds r3, r3, r0
- mov sl, r3
- adds r3, r5, #0
- adds r3, #0x68
- ands r3, r2
- adds r0, r3, #0
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r4, #0
- ldrsh r0, [r0, r4]
- mov r4, sb
- muls r4, r0, r4
- adds r0, r4, #0
- asrs r0, r0, #8
- mov r4, r8
- adds r6, r4, r0
- lsls r0, r3, #1
- adds r0, r0, r1
- movs r3, #0
- ldrsh r0, [r0, r3]
- mov r4, sb
- muls r4, r0, r4
- adds r0, r4, #0
- asrs r0, r0, #8
- ldr r3, [sp, #4]
- adds r4, r3, r0
- adds r3, r5, #0
- subs r3, #0xe8
- ands r3, r2
- adds r0, r3, #0
- adds r0, #0x40
- lsls r0, r0, #1
- adds r0, r0, r1
- movs r2, #0
- ldrsh r0, [r0, r2]
- mov r2, sb
- muls r2, r0, r2
- adds r0, r2, #0
- asrs r0, r0, #8
- mov r2, r8
- adds r5, r2, r0
- lsls r0, r3, #1
- adds r0, r0, r1
- movs r3, #0
- ldrsh r0, [r0, r3]
- mov r1, sb
- muls r1, r0, r1
- adds r0, r1, #0
- asrs r0, r0, #8
- ldr r2, [sp, #4]
- adds r2, r2, r0
- mov r8, r2
- movs r0, #0
- str r0, [sp]
- adds r0, r7, #0
- mov r1, sl
- adds r2, r6, #0
- adds r3, r4, #0
- bl sub_0801E64C
- movs r0, #1
- str r0, [sp]
- adds r0, r7, #0
- mov r1, sl
- adds r2, r5, #0
- mov r3, r8
- bl sub_0801E64C
- movs r0, #2
- str r0, [sp]
- adds r0, r6, #0
- adds r1, r4, #0
- adds r2, r5, #0
- mov r3, r8
- bl sub_0801E64C
- ldr r5, _0801E5F0 @ =gUnk_03003DE4
- ldrb r1, [r5]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- ldr r6, _0801E5F4 @ =gUnk_02017AA0
- adds r0, r0, r6
- movs r1, #0xa0
- lsls r1, r1, #4
- bl MemClear
- ldr r2, _0801E5E8 @ =gUnk_02018EE0
- ldrb r1, [r5]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- adds r1, r0, r6
- movs r3, #0xa0
- mov sl, r3
-_0801E5B0:
- ldr r7, [r2]
- ldr r6, [r2, #4]
- ldr r5, [r2, #8]
- adds r2, #0xc
- cmp r7, r6
- ble _0801E5C2
- adds r4, r7, #0
- adds r7, r6, #0
- adds r6, r4, #0
-_0801E5C2:
- cmp r7, r5
- ble _0801E5CC
- adds r4, r7, #0
- adds r7, r5, #0
- adds r5, r4, #0
-_0801E5CC:
- cmp r6, r5
- ble _0801E5D6
- adds r4, r6, #0
- adds r6, r5, #0
- adds r5, r4, #0
-_0801E5D6:
- movs r0, #1
- rsbs r0, r0, #0
- cmp r7, r0
- beq _0801E5F8
- strb r5, [r1]
- strb r7, [r1, #1]
- b _0801E60A
- .align 2, 0
-_0801E5E4: .4byte 0x0000FFFF
-_0801E5E8: .4byte gUnk_02018EE0
-_0801E5EC: .4byte gSineTable
-_0801E5F0: .4byte gUnk_03003DE4
-_0801E5F4: .4byte gUnk_02017AA0
-_0801E5F8:
- cmp r6, r7
- beq _0801E602
- strb r5, [r1]
- strb r6, [r1, #1]
- b _0801E60A
-_0801E602:
- cmp r5, r7
- beq _0801E60A
- strb r7, [r1, #1]
- strb r7, [r1]
-_0801E60A:
- movs r4, #1
- rsbs r4, r4, #0
- add sl, r4
- adds r1, #2
- mov r0, sl
- cmp r0, #0
- bgt _0801E5B0
- ldr r0, _0801E63C @ =gUnk_03003DE4
- ldrb r1, [r0]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #9
- ldr r1, _0801E640 @ =gUnk_02017AA0
- adds r0, r0, r1
- ldr r1, _0801E644 @ =0x04000040
- ldr r2, _0801E648 @ =0xA2600001
- bl sub_0805622C
- add sp, #8
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801E63C: .4byte gUnk_03003DE4
-_0801E640: .4byte gUnk_02017AA0
-_0801E644: .4byte 0x04000040
-_0801E648: .4byte 0xA2600001
-
- thumb_func_start sub_0801E64C
-sub_0801E64C: @ 0x0801E64C
- push {r4, r5, r6, r7, lr}
- adds r5, r0, #0
- adds r4, r1, #0
- adds r6, r3, #0
- ldr r7, _0801E6C4 @ =gUnk_02018EE0
- cmp r4, #0
- bge _0801E65E
- cmp r6, #0
- blt _0801E6C2
-_0801E65E:
- cmp r4, #0x9f
- ble _0801E666
- cmp r6, #0x9f
- bgt _0801E6C2
-_0801E666:
- cmp r4, r6
- ble _0801E676
- adds r1, r4, #0
- adds r4, r6, #0
- adds r6, r1, #0
- adds r1, r5, #0
- adds r5, r2, #0
- adds r2, r1, #0
-_0801E676:
- cmp r4, r6
- beq _0801E6C2
- subs r0, r2, r5
- lsls r0, r0, #0x10
- subs r1, r6, r4
- bl Div
- adds r3, r0, #0
- cmp r4, #0
- bge _0801E694
- rsbs r0, r4, #0
- muls r0, r3, r0
- asrs r0, r0, #0x10
- adds r5, r5, r0
- movs r4, #0
-_0801E694:
- cmp r6, #0x9f
- ble _0801E69A
- movs r6, #0x9f
-_0801E69A:
- lsls r2, r5, #0x10
- lsls r0, r4, #1
- adds r0, r0, r4
- ldr r1, [sp, #0x14]
- adds r0, r0, r1
- lsls r0, r0, #2
- adds r7, r0, r7
-_0801E6A8:
- cmp r5, #0
- bge _0801E6AE
- movs r5, #0
-_0801E6AE:
- cmp r5, #0xf0
- ble _0801E6B4
- movs r5, #0xf0
-_0801E6B4:
- str r5, [r7]
- adds r2, r2, r3
- asrs r5, r2, #0x10
- adds r4, #1
- adds r7, #0xc
- cmp r4, r6
- ble _0801E6A8
-_0801E6C2:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801E6C4: .4byte gUnk_02018EE0
-
- thumb_func_start sub_0801E6C8
-sub_0801E6C8: @ 0x0801E6C8
- push {r4, r5, r6, lr}
- adds r4, r0, #0
- subs r0, r4, #1
- cmp r0, #0x63
- bhi _0801E722
- movs r1, #0
- ldr r5, _0801E724 @ =gUnk_02022740
- ldr r3, _0801E728 @ =gUnk_02002C01
- movs r2, #0xf1
-_0801E6DA:
- adds r0, r1, r3
- ldrb r6, [r0]
- cmp r4, r6
- bne _0801E6E4
- strb r2, [r0]
-_0801E6E4:
- adds r1, #1
- cmp r1, #0x7f
- bls _0801E6DA
- ldr r0, [r5, #0xc]
- bl sub_08002632
- adds r1, r0, #0
- subs r0, r1, #1
- cmp r0, #0x7e
- bhi _0801E70A
- ldr r0, _0801E72C @ =gSave
- ldr r2, _0801E730 @ =0x000001C1
- adds r0, r0, r2
- adds r1, r1, r0
- ldrb r0, [r1]
- cmp r0, #0xf1
- bne _0801E70A
- movs r0, #0xf2
- strb r0, [r1]
-_0801E70A:
- movs r1, #0
- ldr r0, _0801E734 @ =gUnk_03003DF0
- movs r2, #0xf1
- adds r0, #0xb
-_0801E712:
- ldrb r3, [r0]
- cmp r4, r3
- bne _0801E71A
- strb r2, [r0]
-_0801E71A:
- adds r0, #0xc
- adds r1, #1
- cmp r1, #0x1f
- bls _0801E712
-_0801E722:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0801E724: .4byte gUnk_02022740
-_0801E728: .4byte gUnk_02002C01
-_0801E72C: .4byte gSave
-_0801E730: .4byte 0x000001C1
-_0801E734: .4byte gUnk_03003DF0
-
- thumb_func_start sub_0801E738
-sub_0801E738: @ 0x0801E738
- push {r4, lr}
- adds r4, r0, #0
- bl sub_0801E82C
- adds r0, r4, #0
- subs r0, #0x65
- cmp r0, #0x10
- bhi _0801E790
- adds r0, r4, #0
- bl sub_0801E8B0
- adds r1, r0, #0
- cmp r1, #0
- bge _0801E76E
- movs r1, #0
- ldr r0, _0801E794 @ =gSave
- movs r3, #0x8c
- lsls r3, r3, #1
- adds r2, r0, r3
- ldrb r0, [r2]
- cmp r0, #0
- beq _0801E76E
-_0801E764:
- adds r1, #1
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, #0
- bne _0801E764
-_0801E76E:
- cmp r1, #0x11
- bhi _0801E790
- ldr r2, _0801E794 @ =gSave
- movs r3, #0x8c
- lsls r3, r3, #1
- adds r0, r2, r3
- adds r0, r1, r0
- strb r4, [r0]
- adds r3, #0x13
- adds r0, r2, r3
- adds r1, r1, r0
- ldrb r0, [r1]
- adds r0, #1
- cmp r0, #0x63
- ble _0801E78E
- movs r0, #0x63
-_0801E78E:
- strb r0, [r1]
-_0801E790:
- pop {r4, pc}
- .align 2, 0
-_0801E794: .4byte gSave
-
- thumb_func_start sub_0801E798
-sub_0801E798: @ 0x0801E798
- push {r4, lr}
- bl sub_0801E8B0
- adds r1, r0, #0
- cmp r1, #0
- blt _0801E7C4
- ldr r2, _0801E7C8 @ =gSave
- ldr r3, _0801E7CC @ =0x0000012B
- adds r0, r2, r3
- adds r3, r1, r0
- ldrb r0, [r3]
- subs r0, #1
- cmp r0, #0
- bgt _0801E7C2
- movs r4, #0x8c
- lsls r4, r4, #1
- adds r0, r2, r4
- adds r0, r1, r0
- movs r1, #0
- strb r1, [r0]
- movs r0, #0
-_0801E7C2:
- strb r0, [r3]
-_0801E7C4:
- pop {r4, pc}
- .align 2, 0
-_0801E7C8: .4byte gSave
-_0801E7CC: .4byte 0x0000012B
-
- thumb_func_start sub_0801E7D0
-sub_0801E7D0: @ 0x0801E7D0
- push {lr}
- bl sub_0801E8B0
- adds r1, r0, #0
- cmp r1, #0
- blt _0801E7F0
- ldr r0, _0801E7E8 @ =gSave
- ldr r2, _0801E7EC @ =0x0000012B
- adds r0, r0, r2
- adds r0, r1, r0
- ldrb r0, [r0]
- b _0801E7F2
- .align 2, 0
-_0801E7E8: .4byte gSave
-_0801E7EC: .4byte 0x0000012B
-_0801E7F0:
- movs r0, #0
-_0801E7F2:
- pop {pc}
-
- thumb_func_start CheckKinstoneFused
-CheckKinstoneFused: @ 0x0801E7F4
- push {lr}
- adds r1, r0, #0
- subs r0, r1, #1
- cmp r0, #0x63
- bhi _0801E80C
- ldr r0, _0801E808 @ =gUnk_02002C81
- bl ReadBit
- b _0801E80E
- .align 2, 0
-_0801E808: .4byte gUnk_02002C81
-_0801E80C:
- movs r0, #0
-_0801E80E:
- pop {pc}
-
- thumb_func_start sub_0801E810
-sub_0801E810: @ 0x0801E810
- push {lr}
- adds r1, r0, #0
- subs r0, r1, #1
- cmp r0, #0x63
- bhi _0801E828
- ldr r0, _0801E824 @ =gUnk_02002C8E
- bl ReadBit
- b _0801E82A
- .align 2, 0
-_0801E824: .4byte gUnk_02002C8E
-_0801E828:
- movs r0, #0
-_0801E82A:
- pop {pc}
-
- thumb_func_start sub_0801E82C
-sub_0801E82C: @ 0x0801E82C
- push {r4, r5, r6, r7, lr}
- mov r7, sl
- mov r6, sb
- mov r5, r8
- push {r5, r6, r7}
- ldr r1, _0801E8AC @ =gUnk_02002B54
- movs r5, #0
- adds r2, r1, #4
-_0801E83C:
- ldrb r0, [r2, #0x13]
- adds r3, r1, #4
- mov sl, r3
- cmp r0, #0
- bne _0801E848
- strb r0, [r2]
-_0801E848:
- adds r2, #1
- adds r5, #1
- cmp r5, #0x12
- bls _0801E83C
- movs r0, #0
- strb r0, [r1, #0x16]
- adds r2, r1, #0
- adds r2, #0x29
- strb r0, [r2]
- movs r5, #0
- movs r0, #0x17
- adds r0, r0, r1
- mov sb, r0
- movs r3, #0x18
- adds r3, r3, r1
- mov r8, r3
- adds r7, r1, #4
- adds r6, r1, #5
-_0801E86C:
- mov r1, sl
- adds r0, r1, r5
- ldrb r0, [r0]
- subs r0, #0x65
- cmp r0, #0x10
- bls _0801E890
- movs r4, #0x12
- subs r4, r4, r5
- adds r0, r6, #0
- adds r1, r7, #0
- adds r2, r4, #0
- bl MemCopy
- mov r0, r8
- mov r1, sb
- adds r2, r4, #0
- bl MemCopy
-_0801E890:
- movs r3, #1
- add sb, r3
- add r8, r3
- adds r7, #1
- adds r6, #1
- adds r5, #1
- cmp r5, #0x11
- bls _0801E86C
- pop {r3, r4, r5}
- mov r8, r3
- mov sb, r4
- mov sl, r5
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801E8AC: .4byte gUnk_02002B54
-
- thumb_func_start sub_0801E8B0
-sub_0801E8B0: @ 0x0801E8B0
- push {lr}
- adds r2, r0, #0
- movs r1, #0
- ldr r3, _0801E8C4 @ =gUnk_02002B58
-_0801E8B8:
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r2, r0
- bne _0801E8C8
- adds r0, r1, #0
- b _0801E8D2
- .align 2, 0
-_0801E8C4: .4byte gUnk_02002B58
-_0801E8C8:
- adds r1, #1
- cmp r1, #0x11
- bls _0801E8B8
- movs r0, #1
- rsbs r0, r0, #0
-_0801E8D2:
- pop {pc}
-
- thumb_func_start sub_0801E8D4
-sub_0801E8D4: @ 0x0801E8D4
-.ifdef DEMO_JP
- push {r4, r5, lr}
- movs r5, #0xa
-_0801E914:
- adds r0, r5, #0
- bl CheckKinstoneFused
- cmp r0, #0
- beq _0801E9C4
- adds r0, r5, #0
- bl sub_0801E810
- cmp r0, #0
- bne _0801E9C4
- ldr r1, _0801E94C @ =0x080C9500
- lsls r0, r5, #3
- adds r0, r0, r1
- ldrb r1, [r0, #4]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #2
- ldr r1, _0801E950 @ =0x080FDB04
- adds r2, r0, r1
- ldrh r3, [r2, #0x12]
- ldrb r0, [r2, #0x10]
- cmp r0, #9
- bhi _0801E9B0
- lsls r0, r0, #2
- ldr r1, _0801E954 @ =_0801E958
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801E94C: .4byte 0x080C9500
-_0801E950: .4byte 0x080FDB04
-_0801E954: .4byte _0801E958
-_0801E958: @ jump table
- .4byte _0801E980 @ case 0
- .4byte _0801E984 @ case 1
- .4byte _0801E988 @ case 2
- .4byte _0801E98C @ case 3
- .4byte _0801E990 @ case 4
- .4byte _0801E994 @ case 5
- .4byte _0801E99A @ case 6
- .4byte _0801E9A0 @ case 7
- .4byte _0801E9A6 @ case 8
- .4byte _0801E9AC @ case 9
-_0801E980:
- movs r4, #0
- b _0801E9B0
-_0801E984:
- ldrb r4, [r2, #0x11]
- b _0801E9B0
-_0801E988:
- movs r4, #0xf
- b _0801E9B0
-_0801E98C:
- movs r4, #0x10
- b _0801E9B0
-_0801E990:
- movs r4, #0x11
- b _0801E9B0
-_0801E994:
- movs r4, #4
- movs r3, #0x83
- b _0801E9B0
-_0801E99A:
- movs r4, #4
- movs r3, #0x84
- b _0801E9B0
-_0801E9A0:
- movs r4, #4
- movs r3, #0x87
- b _0801E9B0
-_0801E9A6:
- movs r4, #4
- movs r3, #0x88
- b _0801E9B0
-_0801E9AC:
- movs r4, #4
- movs r3, #0x8b
-_0801E9B0:
- adds r0, r4, #0
- adds r1, r3, #0
- bl sub_0807CB24
- cmp r0, #0
- beq _0801E9C4
- ldr r0, _0801E9CC @ =gUnk_02002C8E
- adds r1, r5, #0
- bl WriteBit
-_0801E9C4:
- adds r5, #1
- cmp r5, #0x64
- bls _0801E914
- pop {r4, r5, pc}
- .align 2, 0
-_0801E9CC: .4byte gUnk_02002C8E
-
-.else
-.ifdef JP
- push {r4, r5, lr}
- movs r4, #0xa
-_0801E8BC:
- adds r0, r4, #0
- bl CheckKinstoneFused
- cmp r0, #0
- beq _0801E93A
- adds r0, r4, #0
- bl sub_0801E810
- cmp r0, #0
- bne _0801E93A
- ldr r1, _0801E8F4 @ =gUnk_080FC3E4
- lsls r0, r4, #3
- adds r0, r0, r1
- ldrb r1, [r0, #4]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #2
- ldr r1, _0801E8F8 @ =gUnk_080FE320
- adds r2, r0, r1
- ldrb r0, [r2, #0x10]
- cmp r0, #4
- bhi _0801E926
- lsls r0, r0, #2
- ldr r1, _0801E8FC @ =_0801E900
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801E8F4: .4byte gUnk_080C9CBC
-_0801E8F8: .4byte gUnk_080FE320
-_0801E8FC: .4byte _0801E900
-_0801E900: @ jump table
- .4byte _0801E914 @ case 0
- .4byte _0801E918 @ case 1
- .4byte _0801E91C @ case 2
- .4byte _0801E920 @ case 3
- .4byte _0801E924 @ case 4
-_0801E914:
- movs r5, #0
- b _0801E926
-_0801E918:
- ldrb r5, [r2, #0x11]
- b _0801E926
-_0801E91C:
- movs r5, #0xf
- b _0801E926
-_0801E920:
- movs r5, #0x10
- b _0801E926
-_0801E924:
- movs r5, #0x11
-_0801E926:
- ldrh r1, [r2, #0x12]
- adds r0, r5, #0
- bl sub_0807CB24
- cmp r0, #0
- beq _0801E93A
- ldr r0, _0801E944 @ =0x02002C8E
- adds r1, r4, #0
- bl WriteBit
-_0801E93A:
- adds r4, #1
- cmp r4, #0x64
- bls _0801E8BC
- pop {r4, r5, pc}
- .align 2, 0
-_0801E944: .4byte 0x02002C8E
-.else
-.ifdef EU
- push {r4, r5, lr}
- movs r4, #0xa
-_0801E910:
- adds r0, r4, #0
- bl CheckKinstoneFused
- cmp r0, #0
- beq _0801E98E
- adds r0, r4, #0
- bl sub_0801E810
- cmp r0, #0
- bne _0801E98E
- ldr r1, _0801E948 @ =gUnk_080C9CBC
- lsls r0, r4, #3
- adds r0, r0, r1
- ldrb r1, [r0, #4]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #2
- ldr r1, _0801E94C @ =gUnk_080FE320
- adds r2, r0, r1
- ldrb r0, [r2, #0x10]
- cmp r0, #4
- bhi _0801E97A
- lsls r0, r0, #2
- ldr r1, _0801E950 @ =_0801E954
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801E948: .4byte gUnk_080C9CBC
-_0801E94C: .4byte gUnk_080FE320
-_0801E950: .4byte _0801E954
-_0801E954: @ jump table
- .4byte _0801E968 @ case 0
- .4byte _0801E96C @ case 1
- .4byte _0801E970 @ case 2
- .4byte _0801E974 @ case 3
- .4byte _0801E978 @ case 4
-_0801E968:
- movs r5, #0
- b _0801E97A
-_0801E96C:
- ldrb r5, [r2, #0x11]
- b _0801E97A
-_0801E970:
- movs r5, #0xf
- b _0801E97A
-_0801E974:
- movs r5, #0x10
- b _0801E97A
-_0801E978:
- movs r5, #0x11
-_0801E97A:
- ldrh r1, [r2, #0x12]
- adds r0, r5, #0
- bl sub_0807CB24
- cmp r0, #0
- beq _0801E98E
- ldr r0, _0801E998 @ =gUnk_02002C8E
- adds r1, r4, #0
- bl WriteBit
-_0801E98E:
- adds r4, #1
- cmp r4, #0x64
- bls _0801E910
- pop {r4, r5, pc}
- .align 2, 0
-_0801E998: .4byte gUnk_02002C8E
-
-.else
- push {r4, r5, lr}
- movs r5, #0xa
-_0801E8D8:
- adds r0, r5, #0
- bl CheckKinstoneFused
- cmp r0, #0
- beq _0801E990
- adds r0, r5, #0
- bl sub_0801E810
- cmp r0, #0
- bne _0801E990
- ldr r1, _0801E910 @ =gUnk_080C9CBC
- lsls r0, r5, #3
- adds r0, r0, r1
- ldrb r1, [r0, #4]
- lsls r0, r1, #2
- adds r0, r0, r1
- lsls r0, r0, #2
- ldr r1, _0801E914 @ =gUnk_080FE320
- adds r2, r0, r1
- ldrh r3, [r2, #0x12]
- ldrb r0, [r2, #0x10]
- cmp r0, #0xa
- bhi _0801E97C
- lsls r0, r0, #2
- ldr r1, _0801E918 @ =_0801E91C
- adds r0, r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0801E910: .4byte gUnk_080C9CBC
-_0801E914: .4byte gUnk_080FE320
-_0801E918: .4byte _0801E91C
-_0801E91C: @ jump table
- .4byte _0801E948 @ case 0
- .4byte _0801E94C @ case 1
- .4byte _0801E950 @ case 2
- .4byte _0801E954 @ case 3
- .4byte _0801E958 @ case 4
- .4byte _0801E95C @ case 5
- .4byte _0801E962 @ case 6
- .4byte _0801E968 @ case 7
- .4byte _0801E96E @ case 8
- .4byte _0801E972 @ case 9
- .4byte _0801E978 @ case 10
-_0801E948:
- movs r4, #0
- b _0801E97C
-_0801E94C:
- ldrb r4, [r2, #0x11]
- b _0801E97C
-_0801E950:
- movs r4, #0xf
- b _0801E97C
-_0801E954:
- movs r4, #0x10
- b _0801E97C
-_0801E958:
- movs r4, #0x11
- b _0801E97C
-_0801E95C:
- movs r4, #4
- movs r3, #0x83
- b _0801E97C
-_0801E962:
- movs r4, #4
- movs r3, #0x84
- b _0801E97C
-_0801E968:
- movs r4, #4
- movs r3, #0x87
- b _0801E97C
-_0801E96E:
- movs r4, #4
- b _0801E97A
-_0801E972:
- movs r4, #4
- movs r3, #0x8b
- b _0801E97C
-_0801E978:
- movs r4, #5
-_0801E97A:
- movs r3, #0x88
-_0801E97C:
- adds r0, r4, #0
- adds r1, r3, #0
- bl sub_0807CB24
- cmp r0, #0
- beq _0801E990
- ldr r0, _0801E998 @ =gUnk_02002C8E
- adds r1, r5, #0
- bl WriteBit
-_0801E990:
- adds r5, #1
- cmp r5, #0x64
- bls _0801E8D8
- pop {r4, r5, pc}
- .align 2, 0
-_0801E998: .4byte gUnk_02002C8E
-.endif
-.endif
-.endif
-
- thumb_func_start sub_0801E99C
-sub_0801E99C: @ 0x0801E99C
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- bl sub_08002632
- mov r8, r0
- ldr r1, _0801E9E4 @ =gUnk_08001DCC
- lsls r0, r0, #2
- adds r0, r0, r1
- ldr r7, [r0]
- movs r0, #0x67
- bl GetInventoryValue
- cmp r0, #0
- beq _0801EA56
- ldr r1, _0801E9E8 @ =gSave
- ldrb r0, [r7]
- ldrb r2, [r1, #8]
- cmp r0, r2
- bhi _0801EA56
- ldr r2, _0801E9EC @ =0x000001C1
- adds r0, r1, r2
- add r0, r8
- ldrb r5, [r0]
- subs r2, #0x80
- adds r0, r1, r2
- add r0, r8
- ldrb r6, [r0]
- adds r4, r6, r7
-_0801E9D6:
- cmp r5, #0xf1
- beq _0801E9F6
- cmp r5, #0xf1
- bhi _0801E9F0
- cmp r5, #0
- beq _0801E9F6
- b _0801EA10
- .align 2, 0
-_0801E9E4: .4byte gUnk_08001DCC
-_0801E9E8: .4byte gSave
-_0801E9EC: .4byte 0x000001C1
-_0801E9F0:
- cmp r5, #0xf2
- beq _0801EA0A
- b _0801EA10
-_0801E9F6:
- ldrb r5, [r4, #5]
- cmp r5, #0
- beq _0801EA10
- cmp r5, #0xff
- beq _0801EA14
- adds r0, r5, #0
- bl CheckKinstoneFused
- cmp r0, #0
- beq _0801EA10
-_0801EA0A:
- adds r4, #1
- adds r6, #1
- ldrb r5, [r4, #5]
-_0801EA10:
- cmp r5, #0xff
- bne _0801EA1C
-_0801EA14:
- adds r0, r7, #0
- bl sub_0801EA74
- adds r5, r0, #0
-_0801EA1C:
- cmp r5, #0
- beq _0801EA32
- cmp r5, #0xf2
- beq _0801E9D6
- adds r0, r5, #0
- bl CheckKinstoneFused
- cmp r0, #0
- beq _0801EA34
- movs r5, #0xf1
- b _0801E9D6
-_0801EA32:
- movs r5, #0xf3
-_0801EA34:
- ldr r1, _0801EA5C @ =gSave
- ldr r2, _0801EA60 @ =0x000001C1
- adds r0, r1, r2
- add r0, r8
- strb r5, [r0]
- subs r2, #0x80
- adds r0, r1, r2
- add r0, r8
- strb r6, [r0]
- bl Random
- ldrb r4, [r7, #1]
- movs r1, #0x64
- bl __modsi3
- cmp r4, r0
- bhi _0801EA64
-_0801EA56:
- movs r0, #0
- b _0801EA6E
- .align 2, 0
-_0801EA5C: .4byte gSave
-_0801EA60: .4byte 0x000001C1
-_0801EA64:
- subs r0, r5, #1
- cmp r0, #0x63
- bls _0801EA6C
- movs r5, #0
-_0801EA6C:
- adds r0, r5, #0
-_0801EA6E:
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_0801EA74
-sub_0801EA74: @ 0x0801EA74
- push {r4, r5, r6, lr}
- bl Random
- movs r1, #0x12
- bl __modsi3
- adds r5, r0, #0
- movs r6, #0
-_0801EA84:
- ldr r0, _0801EA98 @ =gUnk_080CA11C
- adds r0, r5, r0
- ldrb r4, [r0]
- adds r0, r4, #0
- bl CheckKinstoneFused
- cmp r0, #0
- bne _0801EA9C
- adds r0, r4, #0
- b _0801EAAE
- .align 2, 0
-_0801EA98: .4byte gUnk_080CA11C
-_0801EA9C:
- adds r0, r5, #1
- movs r1, #0x12
- bl __modsi3
- adds r5, r0, #0
- adds r6, #1
- cmp r6, #0x11
- bls _0801EA84
- movs r0, #0xf2
-_0801EAAE:
- pop {r4, r5, r6, pc}
diff --git a/include/asm.h b/include/asm.h
index fa0476ba..f250ebb1 100644
--- a/include/asm.h
+++ b/include/asm.h
@@ -3,8 +3,6 @@
#include "global.h"
-struct Entity_;
-
extern u32 Random(void);
extern void sub_08000152(u32, u32, u32);
extern u32 GetTileTypeByEntity(struct Entity_*);
diff --git a/include/color.h b/include/color.h
new file mode 100644
index 00000000..14ab24a9
--- /dev/null
+++ b/include/color.h
@@ -0,0 +1,21 @@
+#ifndef COLOR_H
+#define COLOR_H
+
+#include "global.h"
+
+typedef struct {
+ u8 _0;
+ u8 _1;
+ u16 _2;
+} Palette;
+extern Palette gPaletteList[];
+
+void sub_0801CFA8(u32 a1);
+void sub_0801D000(u32 a1);
+void LoadObjPalette(struct Entity_*, u32);
+void UnloadOBJPalette(struct Entity_* entity);
+void sub_0801D244(u32);
+void sub_0801D28C(struct Entity_* entity, u32 palette);
+void ChangeObjPalette(struct Entity_* entity, u32 palette);
+
+#endif // COLOR_H
diff --git a/include/utils.h b/include/common.h
index 8cb3e8d1..a971ed21 100644
--- a/include/utils.h
+++ b/include/common.h
@@ -1,5 +1,5 @@
-#ifndef UTILS_H
-#define UTILS_H
+#ifndef COMMON_H
+#define COMMON_H
#include "global.h"
@@ -13,6 +13,11 @@ typedef struct {
extern Input gInput;
+void LoadPalettes(const u8*, s32, s32);
+void LoadPaletteGroup(u32 group);
+void SetColor(u32 colorIndex, u32 color);
+void SetFillColor(u32 color, u32 arg1);
+
/**
* Fill memory with 16 bit value.
*/
@@ -38,11 +43,6 @@ void MemCopy(const void* src, void* dest, u32 size);
*/
void ReadKeyInput(void);
-void LoadPalettes(const u8*, s32, s32);
-void LoadPaletteGroup(u32 group);
-void SetColor(u32 colorIndex, u32 color);
-void SetFillColor(u32 color, u32 arg1);
-
/**
* Allocate memory on heap.
*
@@ -66,10 +66,12 @@ void zFree(void* ptr);
/**
* Reset All display hardware registers.
*
- * @param updateHUD bool32 Request refresh of HUD layer (bg 0)
+ * @param refresh bool32 Request refresh of HUD layer (bg 0)
*/
-void DispReset(bool32 updateHUD);
+void DispReset(bool32 refresh);
u32 CheckPlayerProximity(u32, u32, u32, u32);
-#endif
+void sub_0801E1EC(u32, u32, u32);
+
+#endif // COMMON_H
diff --git a/include/enemy.h b/include/enemy.h
index c4ef561e..1a8fc7f2 100644
--- a/include/enemy.h
+++ b/include/enemy.h
@@ -7,7 +7,7 @@
#include "sound.h"
#include "effects.h"
#include "flags.h"
-#include "utils.h"
+#include "common.h"
#include "entity.h"
diff --git a/include/entity.h b/include/entity.h
index 597c5367..e3fca5d4 100644
--- a/include/entity.h
+++ b/include/entity.h
@@ -3,6 +3,7 @@
#define ENTITY_H
#include "global.h"
+#include "color.h"
#include "sprite.h"
#define MAX_ENTITIES 71
diff --git a/include/flags.h b/include/flags.h
index 1d3080ae..10224374 100644
--- a/include/flags.h
+++ b/include/flags.h
@@ -25,10 +25,10 @@ void SetLocalFlag(u32);
void SetLocalFlagByBank(u32, u32);
void SetRoomFlag(u32);
-extern u32 ReadBit(u32*, u32);
-extern u32 CheckBits(u32*, u32, u32);
-extern void WriteBit(u32*, u32);
-extern void ClearBit(u32*, u32);
+extern u32 ReadBit(void*, u32);
+extern u32 CheckBits(void*, u32, u32);
+extern u32 WriteBit(void*, u32);
+extern u32 ClearBit(void*, u32);
extern u32 gGlobalFlags;
extern u32 gRoomFlags;
diff --git a/include/functions.h b/include/functions.h
index 79fe5c2d..0a6c0ca9 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -44,7 +44,6 @@ extern void sub_0805EC9C();
extern void sub_0805EC60(Entity*);
extern void sub_0806D0B0(Entity*);
extern void sub_0806D02C(Entity*);
-extern void ChangeObjPalette(Entity*, u32);
extern void sub_0806FD3C(Entity*);
extern void sub_0805ED14(u32*);
extern void sub_080A7C18(u32, u32, u32);
@@ -101,10 +100,8 @@ extern void sub_0804ED18();
extern void sub_080AF2E4(void);
extern void sub_0804F578(void);
extern void sub_08059994(void);
-extern s32 sub_0801CFA8(u32);
extern void sub_080ADA14(u32, u32); // trampoline to sub_080B27F4
extern void sub_0801E1B8(u32, u32);
-extern void sub_0801E1EC(s32, s32, s32);
extern void sub_080A3B74(void);
extern void sub_080A4054(void);
extern void sub_0801C1D4(void);
@@ -169,7 +166,7 @@ extern void sub_0806F62C(Entity*, u32, u32);
extern void sub_080A1ED0(u32, u32, u32);
extern u32 sub_0806F5B0(u32);
extern void sub_0801DFB4(Entity*, u32, u32, u32);
-extern void sub_0801E00C();
+extern u32 sub_0801E00C(void);
extern void sub_08078790(Entity*, u32);
extern void sub_080788E0(Entity*);
extern void sub_08078B48(void);
@@ -200,6 +197,4 @@ extern void sub_080042D0(Entity*, u32, u16);
extern u32 sub_080002A8(u32, u32, u32);
extern void sub_080806BC(u32, u32, u32, u32);
-extern void LoadObjPalette(Entity*, u32);
-
#endif
diff --git a/include/global.h b/include/global.h
index e7eddd31..512a903d 100644
--- a/include/global.h
+++ b/include/global.h
@@ -101,4 +101,7 @@ union SplitHWord {
#define FORCE_WORD_ALIGNED __attribute__((packed, aligned(2)))
+/* forward decls */
+struct Entity_;
+
#endif // GUARD_GLOBAL_H
diff --git a/include/kinstone.h b/include/kinstone.h
new file mode 100644
index 00000000..8760673d
--- /dev/null
+++ b/include/kinstone.h
@@ -0,0 +1,28 @@
+#ifndef KINSTONE_H
+#define KINSTONE_H
+
+#include "global.h"
+
+typedef struct {
+ u8 unk[4];
+ u32 unk2;
+ u32 unk4;
+} Unk_struct;
+extern Unk_struct gUnk_03003DF0[];
+
+typedef struct {
+ u8 _0;
+ u8 action;
+ u8 _2;
+ u8 _3;
+ u8 _4;
+ u8 _5;
+ u16 _6;
+ u16 _8;
+ u16 _a;
+ Entity* ent;
+} FuseInfo;
+static_assert(sizeof(FuseInfo) == 0x10);
+extern FuseInfo gFuseInfo;
+
+#endif // KINSTONE_H
diff --git a/include/main.h b/include/main.h
index d18e54c0..eda7676c 100644
--- a/include/main.h
+++ b/include/main.h
@@ -78,6 +78,8 @@ void InitScreen(u32 screen);
void InitDMA(void);
+void sub_0805622C(void* a1, u32 a2, u32 a3);
+
extern void sub_08056208(void);
extern void ResetPalettes(void);
diff --git a/include/npc.h b/include/npc.h
index 3e049fb0..3ad4beff 100644
--- a/include/npc.h
+++ b/include/npc.h
@@ -3,7 +3,7 @@
#include "global.h"
#include "asm.h"
-#include "utils.h"
+#include "common.h"
#include "sound.h"
#include "effects.h"
diff --git a/include/object.h b/include/object.h
index 84f9c02c..d4792ecf 100644
--- a/include/object.h
+++ b/include/object.h
@@ -3,7 +3,7 @@
#include "global.h"
#include "asm.h"
-#include "utils.h"
+#include "common.h"
#include "sound.h"
#include "flags.h"
diff --git a/include/room.h b/include/room.h
index 59c6e094..fb2e8398 100644
--- a/include/room.h
+++ b/include/room.h
@@ -124,8 +124,8 @@ typedef struct {
u8 dungeon_room;
s16 dungeon_x;
s16 dungeon_y;
- s16 dungeon_map_x;
- s16 dungeon_map_y;
+ u16 dungeon_map_x;
+ u16 dungeon_map_y;
s16 overworld_map_x;
s16 overworld_map_y;
u8 field_0x24[0x8];
diff --git a/include/save.h b/include/save.h
index 5df71806..9dbba7ff 100644
--- a/include/save.h
+++ b/include/save.h
@@ -41,9 +41,13 @@ typedef struct {
/*0x086*/ u8 filler86[0x2];
/*0x088*/ PlayerWorldStatus saved_status;
/*0x0A8*/ Stats stats;
- /*0x0D0*/ u8 fillerD0[0x71];
+ /*0x0D0*/ u8 fillerD0[0x48];
+ /*0x118*/ u8 unk118[0x13];
+ /*0x12B*/ u8 unk12B[0x16];
/*0x141*/ u8 unk141[128];
- /*0x1C1*/ u8 unk1C1[155];
+ /*0x1C1*/ u8 unk1C1[128];
+ /*0x241*/ u8 unk241[13];
+ /*0x24E*/ u8 unk24E[14];
/*0x25C*/ u8 flags[0x200];
/*0x45C*/ u8 unk45C[0x10];
/*0x46C*/ u8 unk46C[0x20];
diff --git a/include/screen.h b/include/screen.h
index 784224a8..a5b05623 100644
--- a/include/screen.h
+++ b/include/screen.h
@@ -62,7 +62,7 @@ typedef struct {
/*0x38*/ BgControls controls;
/*0x6c*/ u8 _6c;
/*0x6d*/ u8 _6d;
- /*0x70*/ u32 _70;
+ /*0x70*/ void* _70;
/*0x74*/ u32 _74;
/*0x78*/ u32 _78;
} Screen;
diff --git a/include/structures.h b/include/structures.h
index 014b0abe..1f368dcd 100644
--- a/include/structures.h
+++ b/include/structures.h
@@ -135,7 +135,6 @@ typedef struct {
} PriorityHandler;
extern PriorityHandler gPriorityHandler;
-extern u8 gUnk_02022740[];
extern u8 gUnk_02034490[];
typedef struct {
diff --git a/linker.ld b/linker.ld
index 572a7fb8..fc7f630c 100644
--- a/linker.ld
+++ b/linker.ld
@@ -79,7 +79,7 @@ SECTIONS {
. = 0x00022030; gUnk_02022030 = .;
. = 0x00022130; gUnk_02022130 = .;
. = 0x00022730; gUnk_02022730 = .;
- . = 0x00022740; gUnk_02022740 = .;
+ . = 0x00022740; gFuseInfo = .;
. = 0x00022750; gPlayerScriptExecutionContext = .;
. = 0x00022780; gTextRender = .;
. = 0x000227DC; gUnk_020227DC = .;
@@ -315,9 +315,8 @@ SECTIONS {
src/playerItem/playerItemCellOverwriteSet.o(.text);
asm/ui.o(.text);
src/ui.o(.text);
- asm/code_0801CEC0.o(.text); /* utils.c */
- src/utils.o(.text);
- asm/utils.o(.text);
+ src/color.o(.text);
+ src/common.o(.text);
/* enemies */
src/enemy/octorok.o(.text);
src/enemy/chuchu.o(.text);
diff --git a/src/code_0805436C.c b/src/code_0805436C.c
index d0df011a..eade294e 100644
--- a/src/code_0805436C.c
+++ b/src/code_0805436C.c
@@ -3,7 +3,7 @@
#include "room.h"
#include "menu.h"
#include "area.h"
-#include "utils.h"
+#include "common.h"
#include "save.h"
#include "item.h"
diff --git a/src/code_08078778.c b/src/code_08078778.c
index 32e422ff..643cd7bc 100644
--- a/src/code_08078778.c
+++ b/src/code_08078778.c
@@ -1,14 +1,7 @@
#include "global.h"
#include "entity.h"
#include "functions.h"
-
-typedef struct {
- u8 unk[4];
- u32 unk2;
- u32 unk4;
-} Unk_struct;
-
-extern Unk_struct gUnk_03003DF0[];
+#include "kinstone.h"
void sub_08078778(Entity* ent) {
sub_0807887C(ent, 1, 0);
diff --git a/src/collision.c b/src/collision.c
index d39cb4a2..44f53719 100644
--- a/src/collision.c
+++ b/src/collision.c
@@ -3,7 +3,7 @@
#include "entity.h"
#include "player.h"
#include "save.h"
-#include "utils.h"
+#include "common.h"
#include "functions.h"
#include "enemy.h"
#include "object.h"
diff --git a/src/color.c b/src/color.c
new file mode 100644
index 00000000..8a69184a
--- /dev/null
+++ b/src/color.c
@@ -0,0 +1,84 @@
+#include "global.h"
+#include "entity.h"
+#include "common.h"
+#include "color.h"
+
+void LoadObjPaletteAtIndex(u32 a1, u32 a2);
+
+static void sub_0801CFD0(u32 a1);
+
+void sub_0801CFA8(u32 a1) {
+ u32 i;
+
+ MemClear(gPaletteList, 0x40);
+ for (i = 0; i < 6; ++i) {
+ sub_0801CFD0(i);
+ }
+ sub_0801D000(a1);
+}
+
+void sub_0801CFD0(u32 a1) {
+ Palette* p = &gPaletteList[a1];
+ p->_0 = ((s8)p->_0 & ~0xf) | 4;
+ p->_0 = (p->_0 & 0xf) | 0x10;
+ p->_1 = 0x80;
+ p->_2 = 0xFFFF;
+}
+
+ASM_FUNC("asm/non_matching/color/sub_0801D000.inc", void sub_0801D000(u32 a1));
+
+ASM_FUNC("asm/non_matching/color/LoadObjPalette.inc", void LoadObjPalette(Entity* entity, u32 a2));
+
+ASM_FUNC("asm/non_matching/color/FindPalette.inc", s32 FindPalette(u32 a1));
+
+ASM_FUNC("asm/non_matching/color/FindFreeObjPalette.inc", u32 FindFreeObjPalette(u32 a1));
+
+ASM_FUNC("asm/non_matching/color/SetEntityObjPalette.inc", void SetEntityObjPalette(Entity* entity, u32 palette));
+
+void UnloadOBJPalette(Entity* entity) {
+ u8* p = &entity->spriteAnimation[1];
+ u32 idx = *p;
+ *p = 0;
+ sub_0801D244(idx);
+}
+
+ASM_FUNC("asm/non_matching/color/sub_0801D244.inc", void sub_0801D244(u32 a1));
+
+void sub_0801D28C(Entity* entity, u32 palette) {
+ u32 c = entity->spriteAnimation[1];
+ Palette* list = gPaletteList;
+ Palette* p = &list[c];
+ u32 lo = (u32)(p->_0 << 0x1C) >> 0x1C;
+
+ if (lo == 3) {
+ p->_2 = palette;
+ LoadObjPaletteAtIndex(palette, c);
+ }
+}
+
+void ChangeObjPalette(Entity* entity, u32 a2) {
+ UnloadOBJPalette(entity);
+ LoadObjPalette(entity, a2);
+}
+
+ASM_FUNC("asm/non_matching/color/LoadObjPaletteAtIndex.inc", void LoadObjPaletteAtIndex(u32 a1, u32 a2));
+
+ASM_FUNC("asm/non_matching/color/CleanUpObjPalettes.inc", void CleanUpObjPalettes(void));
+
+u32 sub_0801D458(u32 a1) {
+ u32 i;
+ for (i = a1; i < 16; i++) {
+ s32 tmp = ((u32)gPaletteList[i]._0 << 28) >> 28;
+ switch (tmp) {
+ case 0:
+ case 1:
+ case 4:
+ continue;
+ default:
+ return i;
+ }
+ }
+ return 0;
+}
+
+ASM_FUNC("asm/non_matching/color/sub_0801D48C.inc", void sub_0801D48C(u32 a1, u32 a2));
diff --git a/src/common.c b/src/common.c
new file mode 100644
index 00000000..2a8fef53
--- /dev/null
+++ b/src/common.c
@@ -0,0 +1,681 @@
+#include "global.h"
+#include "asm.h"
+#include "common.h"
+#include "structures.h"
+#include "screen.h"
+#include "main.h"
+#include "area.h"
+#include "room.h"
+#include "fileScreen.h"
+#include "game.h"
+#include "flags.h"
+#include "kinstone.h"
+#include "functions.h"
+#include "message.h"
+
+typedef struct {
+ u8 _0;
+ u8 _1;
+ u8 _2;
+ u8 _3;
+} DungeonLayout;
+
+extern u8 gUnk_03003DE0;
+extern u8 gzHeap[0x1000];
+extern u8 gUnk_0201AEE0[0x2000];
+extern u8 gUnk_080CA11C[];
+
+extern void (*gUnk_080C9CAC[])(void);
+
+static void StoreKeyInput(Input* input, u32 keyInput);
+void ClearOAM(void);
+void ResetScreenRegs(void);
+void sub_0801E0E0(u32);
+void sub_0801E24C(u32, u32);
+void sub_0801E290(u32, u32, u32);
+s32 sub_0801E8B0(u32);
+
+extern u32 sub_0807CB24(u32, u32);
+
+typedef struct {
+ u16 paletteId;
+ u8 destPaletteNum;
+ u8 numPalettes;
+} PaletteGroup;
+
+typedef struct {
+ union {
+ int raw;
+ struct {
+ u8 filler0[0x3];
+ u8 unk3;
+ } bytes;
+ } unk0;
+ u32 dest;
+ u32 unk8;
+} GfxItem;
+
+typedef struct {
+ u8 filler[0xA00];
+} struct_02017AA0;
+extern struct_02017AA0 gUnk_02017AA0[];
+extern u8 gUnk_03003DE4;
+
+typedef struct {
+ u8 _0[4];
+ u8 evt_type;
+ u8 _5[3];
+} struct_080C9CBC;
+extern struct_080C9CBC gUnk_080C9CBC[];
+
+typedef struct {
+ u8 evt_type;
+ u8 entity_idx;
+ u8 _2[6];
+ u16 x;
+ u16 y;
+ u8 _c[4];
+ u8 _10;
+ u8 _11;
+ u16 flag;
+} struct_080FE320;
+extern struct_080FE320 gUnk_080FE320[];
+
+extern const PaletteGroup* gPaletteGroups[];
+extern const u8 gGlobalGfxAndPalettes[];
+extern u32 gUsedPalettes;
+extern u16 gPaletteBuffer[];
+extern const GfxItem* gGfxGroups[];
+
+u32 DecToHex(u32 value) {
+ u32 result;
+ register u32 r1 asm("r1");
+
+ if (value >= 100000000) {
+ return 0x99999999;
+ }
+
+ result = Div(value, 10000000) * 0x10000000;
+ result += Div(r1, 1000000) * 0x1000000;
+ result += Div(r1, 100000) * 0x100000;
+ result += Div(r1, 10000) * 0x10000;
+ result += Div(r1, 1000) * 0x1000;
+ result += Div(r1, 100) * 0x100;
+ result += Div(r1, 10) * 0x10;
+ return result + r1;
+}
+
+u32 ReadBit(void* src, u32 bit) {
+ return (*((u8*)src + bit / 8) >> (bit % 8)) & 1;
+}
+
+NONMATCH("asm/non_matching/common/WriteBit.inc", u32 WriteBit(void* src, u32 bit)) {
+ u8* b;
+ u32 mask;
+ u32 orig;
+
+ b = (u8*)(bit / 8 + (u32)src);
+ mask = 1 << (bit % 8);
+ orig = *b;
+ *b |= mask;
+ orig &= mask;
+ return orig;
+}
+END_NONMATCH
+
+NONMATCH("asm/non_matching/common/ClearBit.inc", u32 ClearBit(void* src, u32 bit)) {
+ u8* b;
+ u32 mask;
+ u32 orig;
+
+ b = (u8*)(bit / 8 + (u32)src);
+ mask = 1 << (bit % 8);
+ orig = *b;
+ *b &= ~mask;
+ orig &= mask;
+ return orig;
+}
+END_NONMATCH
+
+void MemFill16(u32 value, void* dest, u32 size) {
+ DmaFill16(3, value, dest, size);
+}
+
+void MemFill32(u32 value, void* dest, u32 size) {
+ DmaFill32(3, value, dest, size);
+}
+
+void MemClear(void* dest, u32 size) {
+ u32 zero = 0;
+
+ // alignment check
+ switch (((uintptr_t)dest | size) % 4) {
+ case 0:
+ MemFill32(0, dest, size);
+ break;
+ case 2:
+ MemFill16(0, dest, size);
+ break;
+ default:
+ do {
+ *(u8*)dest = zero;
+ dest++;
+ size--;
+ } while (size != 0);
+ }
+}
+
+void MemCopy(const void* src, void* dest, u32 size) {
+ switch (((uintptr_t)src | (uintptr_t)dest | size) % 4) {
+ case 0:
+ DmaCopy32(3, src, dest, size);
+ break;
+ case 2:
+ DmaCopy16(3, src, dest, size);
+ break;
+ default:
+ do {
+ *(u8*)dest = *(u8*)src;
+ src++;
+ dest++;
+ } while (--size);
+ }
+}
+
+void ReadKeyInput(void) {
+ u32 keyInput = ~REG_KEYINPUT & KEYS_MASK;
+ StoreKeyInput(&gInput, keyInput);
+}
+
+static void StoreKeyInput(Input* input, u32 keyInput) {
+ u32 heldKeys = input->heldKeys;
+ u32 difference = keyInput & ~heldKeys;
+ input->newKeys = difference;
+ if (keyInput == heldKeys) {
+ if (--input->unk7 == 0) {
+ input->unk7 = 4;
+ input->unk4 = keyInput;
+ } else {
+ input->unk4 = 0;
+ }
+ } else {
+ input->unk7 = 20;
+ input->unk4 = difference;
+ }
+ input->heldKeys = keyInput;
+}
+
+void LoadPaletteGroup(u32 group) {
+ const PaletteGroup* paletteGroup = gPaletteGroups[group];
+ while (1) {
+ u32 destPaletteNum = paletteGroup->destPaletteNum;
+ u32 numPalettes = paletteGroup->numPalettes & 0xF;
+ if (numPalettes == 0) {
+ numPalettes = 16;
+ }
+ LoadPalettes(&gGlobalGfxAndPalettes[paletteGroup->paletteId * 32], destPaletteNum, numPalettes);
+ if ((paletteGroup->numPalettes & 0x80) == 0) {
+ break;
+ }
+ paletteGroup++;
+ }
+}
+
+void LoadPalettes(const u8* src, s32 destPaletteNum, s32 numPalettes) {
+ u16* dest;
+ u32 size = numPalettes * 32;
+ u32 usedPalettesMask = 1 << destPaletteNum;
+ while (--numPalettes > 0) {
+ usedPalettesMask |= (usedPalettesMask << 1);
+ }
+ gUsedPalettes |= usedPalettesMask;
+ dest = &gPaletteBuffer[destPaletteNum * 16];
+ DmaCopy32(3, src, dest, size);
+}
+
+void SetColor(u32 colorIndex, u32 color) {
+ gPaletteBuffer[colorIndex] = color;
+ gUsedPalettes |= 1 << (colorIndex / 16);
+}
+
+void SetFillColor(u32 color, u32 disable_layers) {
+ if (disable_layers) {
+ gScreen.lcd.displayControlMask = ~(DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON);
+ } else {
+ gScreen.lcd.displayControlMask = ~0;
+ }
+ SetColor(0, color);
+}
+
+void LoadGfxGroup(u32 group) {
+ u32 terminator;
+ u32 dmaCtrl;
+ int gfxOffset;
+ const u8* src;
+ u32 dest;
+ int size;
+ const GfxItem* gfxItem = gGfxGroups[group];
+ while (1) {
+ u32 loadGfx = FALSE;
+ u32 ctrl = gfxItem->unk0.bytes.unk3;
+ ctrl &= 0xF;
+ switch (ctrl) {
+ case 0x7:
+ loadGfx = TRUE;
+ break;
+ case 0xD:
+ return;
+ case 0xE:
+ if (gSaveHeader->gameLanguage != 0 && gSaveHeader->gameLanguage != 1) {
+ loadGfx = TRUE;
+ }
+ break;
+ case 0xF:
+ if (gSaveHeader->gameLanguage != 0) {
+ loadGfx = TRUE;
+ }
+ break;
+ default:
+ if (ctrl == gSaveHeader->gameLanguage) {
+ loadGfx = TRUE;
+ }
+ break;
+ }
+
+ if (loadGfx) {
+ gfxOffset = gfxItem->unk0.raw & 0xFFFFFF;
+ src = &gGlobalGfxAndPalettes[gfxOffset];
+ dest = gfxItem->dest;
+ size = gfxItem->unk8;
+ dmaCtrl = 0x80000000;
+ if (size < 0) {
+ if (dest >= VRAM) {
+ LZ77UnCompVram(src, (void*)dest);
+ } else {
+ LZ77UnCompWram(src, (void*)dest);
+ }
+ } else {
+ DmaSet(3, src, dest, dmaCtrl | ((u32)size >> 1));
+ }
+ }
+
+ terminator = gfxItem->unk0.bytes.unk3;
+ terminator &= 0x80;
+ gfxItem++;
+ if (!terminator) {
+ break;
+ }
+ }
+}
+
+// regalloc
+NONMATCH("asm/non_matching/common/sub_0801D898.inc", void sub_0801D898(void* dest, void* src, u32 word, u32 size)) {
+ u32 v6;
+ u32 i;
+
+ if (size & 0x8000)
+ v6 = 0x40;
+ else
+ v6 = 0x20;
+
+ i = size & ~0x8000;
+ do {
+ DmaSet(3, src, dest, word | 0x80000000) src += word * 2;
+ dest += v6 * 2;
+ } while (--i);
+}
+END_NONMATCH
+
+ASM_FUNC("asm/non_matching/common/zMalloc.inc", void* zMalloc(u32 size));
+
+ASM_FUNC("asm/non_matching/common/zFree.inc", void zFree(void* ptr));
+
+void zMallocInit(void) {
+ MemClear(gzHeap, sizeof(gzHeap));
+}
+
+void DispReset(bool32 refresh) {
+ gMain.interruptFlag = 1;
+ gUnk_03003DE0 = 0;
+ gFadeControl.active = 0;
+ gScreen._6d = 0;
+ gScreen._6c = 0;
+ DmaStop(0);
+ REG_DISPCNT = 0;
+ ClearOAM();
+ ResetScreenRegs();
+ MemClear((void*)0x600C000, 0x20);
+ MemClear(gBG0Buffer, 0x800);
+ gScreen.bg0.updated = refresh;
+}
+
+void ClearOAM(void) {
+ u8* d = (u8*)gUnk_03000000.oam;
+ u8* mem = (u8*)0x07000000;
+ u32 i;
+ for (i = 128; i != 0; --i) {
+ *(u16*)d = 0x2A0;
+ d += 8;
+ *(u16*)mem = 0x2A0;
+ mem += 8;
+ }
+}
+
+void ResetScreenRegs(void) {
+ MemClear(&gScreen, sizeof(gScreen));
+ gScreen.bg0.tilemap = &gBG0Buffer;
+ gScreen.bg0.control = 0x1F0C;
+ gScreen.bg1.tilemap = &gBG1Buffer;
+ gScreen.bg1.control = 0x1C01;
+ gScreen.bg2.tilemap = &gBG2Buffer;
+ gScreen.bg2.control = 0x1D02;
+ gScreen.bg3.tilemap = &gBG3Buffer;
+ gScreen.bg3.control = 0x1E03;
+ gScreen.lcd.displayControl = 0x140;
+ gScreen.lcd.displayControlMask = 0xffff;
+}
+
+u32 sub_0801DB94(void) {
+ return gScreenTransition.player_status.dungeon_map_y >> 11;
+}
+
+ASM_FUNC("asm/non_matching/common/DrawDungeonMap.inc", void DrawDungeonMap(u32 floor, struct_02019EE0* data, u32 size));
+
+void sub_0801DD58(u32 area, u32 room) {
+ RoomHeader* hdr = gAreaRoomHeaders[area] + room;
+ gArea.pCurrentRoomInfo->map_x = hdr->map_x;
+ gArea.pCurrentRoomInfo->map_y = hdr->map_y;
+}
+
+void LoadDungeonMap(void) {
+ LoadResourceAsync(gUnk_0201AEE0, 0x6006000, sizeof(gUnk_0201AEE0));
+}
+
+ASM_FUNC("asm/non_matching/common/DrawDungeonFeatures.inc", void DrawDungeonFeatures(u32 room, void* data, u32 size));
+
+u32 sub_0801DF10(DungeonLayout* lyt) {
+ u32 offset;
+
+ if (lyt->_3 == 1)
+ offset = 0x300;
+ else
+ offset = GetFlagBankOffset(lyt->_0);
+ return offset;
+}
+
+ASM_FUNC("asm/non_matching/common/sub_0801DF28.inc", void sub_0801DF28(u32 a1, u32 a2, u32 a3));
+
+u32 sub_0801DF60(u32 a1, u8* p) {
+ return (p[a1 >> 2] >> (2 * (~a1 & 3))) & 3;
+}
+
+u32 sub_0801DF78(u32 a1, u32 a2) {
+ switch (a1) {
+ case 0:
+ case 1:
+ default:
+ return a1;
+ case 2:
+ return a2;
+ case 3:
+ return 7;
+ }
+}
+
+u32 sub_0801DF90(u8* a1, u32 a2) {
+ if (a1 == NULL)
+ return 0;
+
+ for (; *a1 != 0; a1 += 8) {
+ if (*a1 == 1)
+ return CheckLocalFlagByBank(a2, a1[1]);
+ }
+ return 0;
+}
+
+void sub_0801DFB4(Entity* entity, u32 a2, u32 a3, u32 a4) {
+ MemClear(&gFuseInfo, sizeof(gFuseInfo));
+ gFuseInfo._6 = a2;
+ gFuseInfo._8 = a3;
+ gFuseInfo._a = a4;
+ gFuseInfo.ent = entity;
+ gFuseInfo._3 = gUnk_03003DF0[0].unk[2];
+ if (entity != NULL) {
+ gFuseInfo._4 = entity->updatePriority;
+ entity->updatePriority = 2;
+ }
+ gFuseInfo._0 = 0;
+}
+
+u32 sub_0801E00C(void) {
+ gUnk_080C9CAC[gFuseInfo.action]();
+ return gFuseInfo._0;
+}
+
+void sub_0801E02C(void) {
+ sub_0801E0E0(gFuseInfo._6);
+ gFuseInfo._0 = 3;
+ gFuseInfo.action = 1;
+}
+
+void sub_0801E044(void) {
+ if ((gMessage.doTextBox & 0x7F) == 0) {
+ MenuFadeIn(4, 0);
+ gFuseInfo._0 = 4;
+ gFuseInfo.action = 2;
+ SoundReq(0x6b);
+ }
+}
+
+void sub_0801E074(void) {
+ u32 tmp;
+ switch (gFuseInfo._0) {
+ case 5:
+ tmp = gFuseInfo._8;
+ break;
+ case 6:
+ tmp = gFuseInfo._a;
+ break;
+ default:
+ return;
+ }
+ sub_0801E0E0(tmp);
+ gFuseInfo.action = 3;
+}
+
+void sub_0801E0A0(void) {
+ if ((gMessage.doTextBox & 0x7f) == 0) {
+ if (gFuseInfo.ent != NULL) {
+ gFuseInfo.ent->updatePriority = gFuseInfo._4;
+ }
+ gFuseInfo._0 = gFuseInfo._0 == 6 ? 2 : 1;
+ }
+}
+
+void sub_0801E0E0(u32 idx) {
+ if (idx != 0) {
+ if (gFuseInfo.ent != NULL) {
+ MessageNoOverlap(idx, gFuseInfo.ent);
+ } else {
+ MessageFromTarget(idx);
+ }
+ }
+}
+
+void sub_0801E104(void) {
+ gScreen.lcd.displayControl &= ~0x6000;
+ gScreen._6c = 0;
+}
+
+void sub_0801E120(void) {
+ gScreen.lcd.displayControl |= 0x2000;
+ gScreen.controls.windowInsideControl = 0x3F37;
+ gScreen.controls.windowOutsideControl = 0x3F;
+ gScreen.controls.window0HorizontalDimensions = 0;
+ gScreen.controls.window0VerticalDimensions = 160;
+}
+
+void sub_0801E154(u32 a1) {
+ sub_0801E24C(a1, 0);
+}
+
+void sub_0801E160(u32 a1, u32 a2, u32 a3) {
+ MemClear(&gUnk_02017AA0[gUnk_03003DE4], sizeof(gUnk_02017AA0[gUnk_03003DE4]));
+ sub_0801E290(a1, a2, a3);
+ sub_0805622C(&gUnk_02017AA0[gUnk_03003DE4], 0x4000040, 0xA2600001);
+}
+
+void sub_0801E1B8(u32 a1, u32 a2) {
+ gScreen.lcd.displayControl |= 0x2000;
+ gScreen.controls.windowInsideControl = a1;
+ gScreen.controls.windowOutsideControl = a2;
+ gScreen.controls.window0HorizontalDimensions = 0;
+ gScreen.controls.window0VerticalDimensions = 160;
+}
+
+void sub_0801E1EC(u32 a1, u32 a2, u32 a3) {
+ MemClear(&gUnk_02017AA0[gUnk_03003DE4], sizeof(gUnk_02017AA0[gUnk_03003DE4]));
+ sub_0801E24C(a3, 0);
+ sub_0801E290(a1, a2, a3);
+ sub_0805622C(&gUnk_02017AA0[gUnk_03003DE4], 0x4000040, 0xA2600001);
+}
+
+ASM_FUNC("asm/non_matching/common/sub_0801E24C.inc", void sub_0801E24C(u32 a1, u32 a2));
+
+ASM_FUNC("asm/non_matching/common/sub_0801E290.inc", void sub_0801E290(u32 a1, u32 a2, u32 a3));
+
+ASM_FUNC("asm/non_matching/common/sub_0801E31C.inc", void sub_0801E31C(u32 a1, u32 a2, u32 a3, u32 a4));
+
+ASM_FUNC("asm/non_matching/common/sub_0801E49C.inc", void sub_0801E49C(u32 a1, u32 a2, u32 a3, u32 a4));
+
+ASM_FUNC("asm/non_matching/common/sub_0801E64C.inc", void sub_0801E64C(u32 a1, u32 a2, u32 a3, u32 a4, u32 a5));
+
+ASM_FUNC("asm/non_matching/common/sub_0801E6C8.inc", void sub_0801E6C8(u32 a1));
+
+ASM_FUNC("asm/non_matching/common/sub_0801E738.inc", void sub_0801E738(u32 a1));
+
+void sub_0801E798(u32 a1) {
+ s32 idx = sub_0801E8B0(a1);
+ if (idx >= 0) {
+ s32 next = gSave.unk12B[idx] - 1;
+ if (next <= 0) {
+ gSave.unk118[idx] = 0;
+ next = 0;
+ }
+ gSave.unk12B[idx] = next;
+ }
+}
+
+u32 sub_0801E7D0(u32 a1) {
+ s32 tmp = sub_0801E8B0(a1);
+ if (tmp < 0) {
+ return 0;
+ }
+ return gSave.unk12B[tmp];
+}
+
+u32 CheckKinstoneFused(u32 idx) {
+ if (idx > 100 || idx < 1) {
+ return 0;
+ }
+ return ReadBit(&gSave.unk241, idx);
+}
+
+u32 sub_0801E810(u32 idx) {
+ if (idx > 100 || idx < 1) {
+ return 0;
+ }
+ return ReadBit(&gSave.unk24E, idx);
+}
+
+ASM_FUNC("asm/non_matching/common/sub_0801E82C.inc", void sub_0801E82C(void));
+
+s32 sub_0801E8B0(u32 idx) {
+ u32 i;
+
+ for (i = 0; i < 18; ++i) {
+ if (idx == gSave.unk118[i])
+ return i;
+ }
+ return -1;
+}
+
+void sub_0801E8D4(void) {
+ u32 i;
+ for (i = 10; i <= 100; ++i) {
+ if (CheckKinstoneFused(i) && !sub_0801E810(i)) {
+ u32 evt_type = gUnk_080C9CBC[i].evt_type;
+ struct_080FE320* s = &gUnk_080FE320[evt_type];
+#if !defined EU && !defined JP
+ u32 flag = s->flag;
+#endif
+ u32 tmp;
+ switch (s->_10) {
+ case 0:
+ tmp = 0;
+ break;
+ case 1:
+ tmp = s->_11;
+ break;
+ case 2:
+ tmp = 0xf;
+ break;
+ case 3:
+ tmp = 0x10;
+ break;
+ case 4:
+ tmp = 0x11;
+ break;
+#if !defined EU && !defined JP
+ case 5:
+ tmp = 4;
+ flag = 0x83;
+ break;
+ case 6:
+ tmp = 4;
+ flag = 0x84;
+ break;
+ case 7:
+ tmp = 4;
+ flag = 0x87;
+ break;
+ case 8:
+ tmp = 4;
+ flag = 0x88;
+ break;
+ case 9:
+ tmp = 4;
+ flag = 0x8b;
+ break;
+#ifndef DEMO_JP
+ case 10:
+ tmp = 5;
+ flag = 0x88;
+ break;
+#endif
+#endif
+ }
+#if !defined EU && !defined JP
+ if (sub_0807CB24(tmp, flag)) {
+#else
+ if (sub_0807CB24(tmp, s->flag)) {
+#endif
+ WriteBit(&gSave.unk24E, i);
+ }
+ }
+ }
+}
+
+ASM_FUNC("asm/non_matching/common/sub_0801E99C.inc", u32 sub_0801E99C(u32 a1));
+
+u32 sub_0801EA74(void) {
+ s32 r = (s32)Random() % 18;
+ u32 i;
+ for (i = 0; i < 18; ++i) {
+ u32 n = gUnk_080CA11C[r];
+ if (!CheckKinstoneFused(n))
+ return n;
+ r = (r + 1) % 18;
+ }
+ return 0xF2;
+}
diff --git a/src/coord.c b/src/coord.c
index cf8548fc..3ee708e6 100644
--- a/src/coord.c
+++ b/src/coord.c
@@ -2,7 +2,7 @@
#include "area.h"
#include "player.h"
#include "coord.h"
-#include "utils.h"
+#include "common.h"
#include "sound.h"
#include "room.h"
#include "functions.h"
diff --git a/src/debugScreen.c b/src/debugScreen.c
index b3300574..9eded432 100644
--- a/src/debugScreen.c
+++ b/src/debugScreen.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "sound.h"
-#include "utils.h"
+#include "common.h"
#include "functions.h"
#include "main.h"
#include "menu.h"
diff --git a/src/demoScreen.c b/src/demoScreen.c
index daec74d7..2f6ad402 100644
--- a/src/demoScreen.c
+++ b/src/demoScreen.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "functions.h"
#include "main.h"
-#include "utils.h"
+#include "common.h"
#include "message.h"
#include "fileScreen.h"
#include "screen.h"
diff --git a/src/dungeon.c b/src/dungeon.c
new file mode 100644
index 00000000..dc4f98a6
--- /dev/null
+++ b/src/dungeon.c
@@ -0,0 +1 @@
+#include "global.h"
diff --git a/src/enemy/code_080300AC.c b/src/enemy/code_080300AC.c
index d1af8248..e3f5c2ef 100644
--- a/src/enemy/code_080300AC.c
+++ b/src/enemy/code_080300AC.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "utils.h"
+#include "common.h"
#include "functions.h"
void sub_080300AC(void) {
diff --git a/src/enterPortalSubtask.c b/src/enterPortalSubtask.c
index c9f70c55..0387751a 100644
--- a/src/enterPortalSubtask.c
+++ b/src/enterPortalSubtask.c
@@ -2,7 +2,7 @@
#include "entity.h"
#include "area.h"
#include "main.h"
-#include "utils.h"
+#include "common.h"
#include "screen.h"
#include "object.h"
#include "functions.h"
diff --git a/src/entity.c b/src/entity.c
index 79040e23..bdbe2e55 100644
--- a/src/entity.c
+++ b/src/entity.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "utils.h"
+#include "common.h"
#include "functions.h"
#include "area.h"
#include "message.h"
@@ -15,7 +15,6 @@ void sub_0805EE88(void);
void ClearAllDeletedEntities(void);
void DeleteAllEntities(void);
void sub_0805E98C(void);
-extern void UnloadOBJPalette();
extern void sub_0806FE84();
extern void sub_08078954();
extern void sub_08017744(Entity*);
diff --git a/src/fade.c b/src/fade.c
index f6abc39c..04cd34e5 100644
--- a/src/fade.c
+++ b/src/fade.c
@@ -2,7 +2,7 @@
#include "structures.h"
#include "functions.h"
#include "screen.h"
-#include "utils.h"
+#include "common.h"
static u32 sub_080501C0(FadeControl* ctl);
static u32 sub_08050230(FadeControl* ctl);
diff --git a/src/fileScreen.c b/src/fileScreen.c
index ae44ecb0..691c5999 100644
--- a/src/fileScreen.c
+++ b/src/fileScreen.c
@@ -1,6 +1,6 @@
#include "fileScreen.h"
#include "main.h"
-#include "utils.h"
+#include "common.h"
#include "screen.h"
#include "menu.h"
#include "message.h"
diff --git a/src/flags.c b/src/flags.c
index 1c153b5a..57f49892 100644
--- a/src/flags.c
+++ b/src/flags.c
@@ -13,13 +13,13 @@ u32 CheckLocalFlag(u32 flag) {
}
u32 CheckFlags(u32 flags) {
- s32 type;
- s32 index;
- s32 length;
+ u32 type;
+ u32 index;
+ u32 length;
index = flags & 0x3ff;
length = (((flags & (0xf0) << 0x6) >> 0xa) + 1);
type = (flags & 0xc000) >> 0xe;
- switch ((u32)type) {
+ switch (type) {
case 2:
return CheckRoomFlags(index, length);
case 0:
@@ -40,7 +40,6 @@ u32 CheckRoomFlag(u32 flag) {
}
u32 CheckLocalFlagsByBank(u32 offset, u32 flag, u32 length) {
-
return CheckBits(&gGlobalFlags, offset + flag, length);
}
@@ -67,13 +66,13 @@ void SetLocalFlag(u32 flag) {
}
void SetFlag(u32 flag) {
- s32 uVar1;
- s32 index;
+ u32 type;
+ u32 index;
if (flag != 0) {
index = flag & 0x3ff;
- uVar1 = (flag & 0xc000) >> 0xe;
- switch ((u32)uVar1) {
+ type = (flag & 0xc000) >> 0xe;
+ switch (type) {
case 2:
SetRoomFlag(index);
return;
@@ -104,12 +103,12 @@ void ClearLocalFlag(u32 flag) {
}
void ClearFlag(u32 flag) {
- s32 uVar1;
- s32 index;
+ u32 type;
+ u32 index;
index = flag & 0x3ff;
- uVar1 = (flag & 0xc000) >> 0xe;
- switch ((u32)uVar1) {
+ type = (flag & 0xc000) >> 0xe;
+ switch (type) {
case 2:
ClearRoomFlag(index);
return;
diff --git a/src/game.c b/src/game.c
index 33054701..034d9076 100644
--- a/src/game.c
+++ b/src/game.c
@@ -7,7 +7,7 @@
#include "main.h"
#include "flags.h"
#include "save.h"
-#include "utils.h"
+#include "common.h"
#include "fileScreen.h"
#include "menu.h"
#include "functions.h"
diff --git a/src/main.c b/src/main.c
index 9a2a5dbe..1ce5d2bb 100644
--- a/src/main.c
+++ b/src/main.c
@@ -2,7 +2,7 @@
#include "functions.h"
#include "main.h"
#include "screen.h"
-#include "utils.h"
+#include "common.h"
#include "save.h"
#include "message.h"
#include "interrupts.h"
@@ -244,7 +244,7 @@ void sub_08056208() {
gScreen._6d = 0;
}
-void sub_0805622C(u32 a1, u32 a2, u32 a3) {
+void sub_0805622C(void* a1, u32 a2, u32 a3) {
gScreen._70 = a1;
gScreen._74 = a2;
gScreen._78 = a3;
diff --git a/src/manager/manager10.c b/src/manager/manager10.c
index adfbf44c..607463a5 100644
--- a/src/manager/manager10.c
+++ b/src/manager/manager10.c
@@ -5,7 +5,7 @@
#include "area.h"
#include "sound.h"
#include "screen.h"
-#include "utils.h"
+#include "common.h"
#include "fileScreen.h"
#include "functions.h"
diff --git a/src/manager/manager14.c b/src/manager/manager14.c
index 05c6a46e..a3771fe9 100644
--- a/src/manager/manager14.c
+++ b/src/manager/manager14.c
@@ -19,7 +19,6 @@ const u16 gUnk_08108588[] = { 0x1000, 0xF01, 0xE02, 0xD03, 0xC04, 0xB05, 0xA06,
const u16 gUnk_0810859A[] = { 0x808, 0x907, 0xA06, 0x907 };
-extern void sub_0805622C(u16*, u32, u32);
extern u16 gUnk_02017AA0[];
void sub_08059E80(Manager14*);
diff --git a/src/manager/manager1A.c b/src/manager/manager1A.c
index a0eb2a8b..2ad78228 100644
--- a/src/manager/manager1A.c
+++ b/src/manager/manager1A.c
@@ -3,7 +3,7 @@
#include "flags.h"
#include "room.h"
#include "screen.h"
-#include "utils.h"
+#include "common.h"
#include "object.h"
#include "functions.h"
diff --git a/src/manager/manager2C.c b/src/manager/manager2C.c
index 125dcc5b..c8b3f63d 100644
--- a/src/manager/manager2C.c
+++ b/src/manager/manager2C.c
@@ -1,7 +1,7 @@
#include "manager.h"
#include "asm.h"
#include "functions.h"
-#include "utils.h"
+#include "common.h"
typedef struct {
struct Manager manager;
diff --git a/src/manager/manager32.c b/src/manager/manager32.c
index 1e6580d8..77e3d955 100644
--- a/src/manager/manager32.c
+++ b/src/manager/manager32.c
@@ -3,7 +3,7 @@
#include "room.h"
#include "functions.h"
#include "area.h"
-#include "utils.h"
+#include "common.h"
#include "game.h"
typedef struct {
diff --git a/src/manager/manager39.c b/src/manager/manager39.c
index bf69d08a..b43de6e8 100644
--- a/src/manager/manager39.c
+++ b/src/manager/manager39.c
@@ -3,7 +3,7 @@
#include "screen.h"
#include "area.h"
#include "message.h"
-#include "utils.h"
+#include "common.h"
#include "game.h"
#include "functions.h"
diff --git a/src/manager/managerB.c b/src/manager/managerB.c
index 2219470c..6d0fc1fe 100644
--- a/src/manager/managerB.c
+++ b/src/manager/managerB.c
@@ -3,7 +3,7 @@
#include "flags.h"
#include "room.h"
#include "area.h"
-#include "utils.h"
+#include "common.h"
#include "sound.h"
/*
diff --git a/src/manager/managerC.c b/src/manager/managerC.c
index fc77cfc6..e8790891 100644
--- a/src/manager/managerC.c
+++ b/src/manager/managerC.c
@@ -9,7 +9,7 @@
#include "functions.h"
#include "save.h"
#include "area.h"
-#include "utils.h"
+#include "common.h"
typedef struct {
Manager manager;
diff --git a/src/manager/managerF.c b/src/manager/managerF.c
index 15fa53fa..3fb57bc2 100644
--- a/src/manager/managerF.c
+++ b/src/manager/managerF.c
@@ -7,7 +7,7 @@
#include "functions.h"
#include "area.h"
#include "message.h"
-#include "utils.h"
+#include "common.h"
#include "tiles.h"
#include "object.h"
#include "item.h"
diff --git a/src/message.c b/src/message.c
index 586bee15..1383e0e6 100644
--- a/src/message.c
+++ b/src/message.c
@@ -2,7 +2,7 @@
#include "sound.h"
#include "asm.h"
#include "room.h"
-#include "utils.h"
+#include "common.h"
#include "functions.h"
#include "message.h"
#include "save.h"
@@ -35,7 +35,7 @@ extern void sub_0805EF40(Token* tok, const u8*);
extern void RecoverUI(u32 bottomPt, u32 topPt);
extern void RefreshUI(void);
extern void sub_0805F918(u32, u32, u32);
-extern u32 sub_0801D51C(u32, u8*, u32);
+extern u32 DecToHex(u32, u8*, u32);
u32 sub_08056FEC(u32, u8*);
u32 GetCharacter(Token* tok);
@@ -831,7 +831,7 @@ NONMATCH("asm/non_matching/textbox/sub_08056FEC.inc", u32 sub_08056FEC(u32 this,
int iVar4;
u8 local_1c[8];
- uVar1 = sub_0801D51C(this, param_2, this);
+ uVar1 = DecToHex(this, param_2, this);
uVar1 = uVar1 & 0xfffffff;
iVar4 = 0;
do {
diff --git a/src/npc/zeldaFollower.c b/src/npc/zeldaFollower.c
index fc0890fb..5cbaa03f 100644
--- a/src/npc/zeldaFollower.c
+++ b/src/npc/zeldaFollower.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "entity.h"
#include "functions.h"
-#include "utils.h"
+#include "common.h"
extern void sub_08068318(Entity*);
extern void sub_0806854C(Entity*, u32*);
diff --git a/src/npcUtils.c b/src/npcUtils.c
index e4739226..d44f3336 100644
--- a/src/npcUtils.c
+++ b/src/npcUtils.c
@@ -5,6 +5,7 @@
#include "definitions.h"
#include "save.h"
#include "npc.h"
+#include "kinstone.h"
extern const NPCDefinition gNPCDefinitions[];
@@ -287,7 +288,7 @@ u32 UpdateFuseInteraction(Entity* ent) {
u32 ret;
sub_0801E00C();
ret = -1;
- switch (gUnk_02022740[0]) {
+ switch (gFuseInfo._0) {
default:
ret = 0;
break;
diff --git a/src/object/lockedDoor.c b/src/object/lockedDoor.c
index 6f23a9d8..5a38d7a1 100644
--- a/src/object/lockedDoor.c
+++ b/src/object/lockedDoor.c
@@ -6,6 +6,7 @@
#include "functions.h"
#include "effects.h"
#include "game.h"
+#include "common.h"
void sub_08083338(Entity*);
void sub_080834B4(Entity*);
diff --git a/src/player.c b/src/player.c
index 65af62d8..dad3ec08 100644
--- a/src/player.c
+++ b/src/player.c
@@ -4,7 +4,7 @@
#include "entity.h"
#include "player.h"
#include "message.h"
-#include "utils.h"
+#include "common.h"
#include "area.h"
#include "item.h"
#include "save.h"
diff --git a/src/playerItem/playerItemPacciCane.c b/src/playerItem/playerItemPacciCane.c
index 23d16cd3..471f180e 100644
--- a/src/playerItem/playerItemPacciCane.c
+++ b/src/playerItem/playerItemPacciCane.c
@@ -1,7 +1,7 @@
#include "entity.h"
#include "sound.h"
#include "functions.h"
-#include "utils.h"
+#include "common.h"
#include "message.h"
#include "save.h"
diff --git a/src/playerItem/playerItemSwordBeam.c b/src/playerItem/playerItemSwordBeam.c
index 0d72189d..671c13b5 100644
--- a/src/playerItem/playerItemSwordBeam.c
+++ b/src/playerItem/playerItemSwordBeam.c
@@ -4,6 +4,7 @@
#include "functions.h"
#include "sound.h"
#include "effects.h"
+#include "common.h"
extern void (*const gUnk_080B43F4[])(Entity*);
diff --git a/src/playerItemUtils.c b/src/playerItemUtils.c
index be571896..1dd23ad1 100644
--- a/src/playerItemUtils.c
+++ b/src/playerItemUtils.c
@@ -1,7 +1,7 @@
#include "entity.h"
#include "functions.h"
#include "save.h"
-#include "utils.h"
+#include "common.h"
#include "sound.h"
#include "flags.h"
#include "message.h"
diff --git a/src/projectile/winder.c b/src/projectile/winder.c
index 0075763c..7a0471e6 100644
--- a/src/projectile/winder.c
+++ b/src/projectile/winder.c
@@ -1,7 +1,7 @@
#include "entity.h"
#include "asm.h"
#include "functions.h"
-#include "utils.h"
+#include "common.h"
extern void (*const Winder_Actions[])(Entity*);
extern const u8 gUnk_0812A6BC[];
diff --git a/src/room.c b/src/room.c
index d752abfb..660fcacd 100644
--- a/src/room.c
+++ b/src/room.c
@@ -3,7 +3,7 @@
#include "room.h"
#include "flags.h"
#include "functions.h"
-#include "utils.h"
+#include "common.h"
#include "object.h"
#include "game.h"
diff --git a/src/roomInit.c b/src/roomInit.c
index 384c7b79..3872b39e 100644
--- a/src/roomInit.c
+++ b/src/roomInit.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "main.h"
-#include "utils.h"
+#include "common.h"
#include "functions.h"
diff --git a/src/script.c b/src/script.c
index b2648251..96b6abf9 100644
--- a/src/script.c
+++ b/src/script.c
@@ -6,6 +6,7 @@
#include "object.h"
#include "npc.h"
+#include "kinstone.h"
#include "functions.h"
@@ -1154,7 +1155,7 @@ void ScriptCommand_0807E9F0(Entity* entity, ScriptExecutionContext* context) {
u32 tmp;
sub_0801E00C();
tmp = 1;
- switch (gUnk_02022740[0]) {
+ switch (gFuseInfo._0) {
case 2:
gPlayerState.controlMode = CONTROL_DISABLED;
gUnk_02034490[0] = tmp;
diff --git a/src/sound.c b/src/sound.c
index 32dc20c4..aa12853b 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -2,7 +2,7 @@
#include "main.h"
#include "gba/m4a.h"
#include "sound.h"
-#include "utils.h"
+#include "common.h"
#define IS_BGM(song) ((song)-1 <= NUM_BGM - 1)
#define IS_SFX(song) ((song)-1 > NUM_BGM - 1)
diff --git a/src/sub_0807CA18.c b/src/sub_0807CA18.c
index 6a342989..01768a24 100644
--- a/src/sub_0807CA18.c
+++ b/src/sub_0807CA18.c
@@ -1,6 +1,6 @@
#include "global.h"
#include "save.h"
-#include "utils.h"
+#include "common.h"
extern void sub_0807C960();
diff --git a/src/text.c b/src/text.c
index 7dc44443..2ca3d929 100644
--- a/src/text.c
+++ b/src/text.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "utils.h"
+#include "common.h"
#include "structures.h"
#include "functions.h"
#include "asm.h"
diff --git a/src/title.c b/src/title.c
index b31c67e8..7f65c343 100644
--- a/src/title.c
+++ b/src/title.c
@@ -1,7 +1,7 @@
#include "sound.h"
#include "main.h"
#include "entity.h"
-#include "utils.h"
+#include "common.h"
#include "screen.h"
#include "object.h"
#include "message.h"
diff --git a/src/utils.c b/src/utils.c
deleted file mode 100644
index f8ae7c2d..00000000
--- a/src/utils.c
+++ /dev/null
@@ -1,205 +0,0 @@
-#include "global.h"
-#include "utils.h"
-#include "structures.h"
-#include "screen.h"
-
-static void StoreKeyInput(Input* input, u32 keyInput);
-
-typedef struct {
- u16 paletteId;
- u8 destPaletteNum;
- u8 numPalettes;
-} PaletteGroup;
-
-typedef struct {
- union {
- int raw;
- struct {
- u8 filler0[0x3];
- u8 unk3;
- } bytes;
- } unk0;
- u32 dest;
- u32 unk8;
-} GfxItem;
-
-extern const PaletteGroup* gPaletteGroups[];
-extern const u8 gGlobalGfxAndPalettes[];
-extern u32 gUsedPalettes;
-extern u16 gPaletteBuffer[];
-extern const GfxItem* gGfxGroups[];
-
-void MemFill16(u32 value, void* dest, u32 size) {
- DmaFill16(3, value, dest, size);
-}
-
-void MemFill32(u32 value, void* dest, u32 size) {
- DmaFill32(3, value, dest, size);
-}
-
-void MemClear(void* dest, u32 size) {
- u32 zero = 0;
-
- // alignment check
- switch (((intptr_t)dest | size) % 4) {
- case 0:
- MemFill32(0, dest, size);
- break;
- case 2:
- MemFill16(0, dest, size);
- break;
- default:
- do {
- *(u8*)dest = zero;
- dest++;
- size--;
- } while (size != 0);
- }
-}
-
-void MemCopy(const void* src, void* dest, u32 size) {
- switch (((intptr_t)src | (intptr_t)dest | size) % 4) {
- case 0:
- DmaCopy32(3, src, dest, size);
- break;
- case 2:
- DmaCopy16(3, src, dest, size);
- break;
- default:
- do {
- *(u8*)dest = *(u8*)src;
- src++;
- dest++;
- } while (--size);
- }
-}
-
-void ReadKeyInput(void) {
- u32 keyInput = ~REG_KEYINPUT & KEYS_MASK;
- StoreKeyInput(&gInput, keyInput);
-}
-
-static void StoreKeyInput(Input* input, u32 keyInput) {
- u32 heldKeys = input->heldKeys;
- u32 difference = keyInput & ~heldKeys;
- input->newKeys = difference;
- if (keyInput == heldKeys) {
- if (--input->unk7 == 0) {
- input->unk7 = 4;
- input->unk4 = keyInput;
- } else {
- input->unk4 = 0;
- }
- } else {
- input->unk7 = 20;
- input->unk4 = difference;
- }
- input->heldKeys = keyInput;
-}
-
-void LoadPaletteGroup(u32 group) {
- const PaletteGroup* paletteGroup = gPaletteGroups[group];
- while (1) {
- u32 destPaletteNum = paletteGroup->destPaletteNum;
- u32 numPalettes = paletteGroup->numPalettes & 0xF;
- if (numPalettes == 0) {
- numPalettes = 16;
- }
- LoadPalettes(&gGlobalGfxAndPalettes[paletteGroup->paletteId * 32], destPaletteNum, numPalettes);
- if ((paletteGroup->numPalettes & 0x80) == 0) {
- break;
- }
- paletteGroup++;
- }
-}
-
-void LoadPalettes(const u8* src, s32 destPaletteNum, s32 numPalettes) {
- u16* dest;
- u32 size = numPalettes * 32;
- u32 usedPalettesMask = 1 << destPaletteNum;
- while (--numPalettes > 0) {
- usedPalettesMask |= (usedPalettesMask << 1);
- }
- gUsedPalettes |= usedPalettesMask;
- dest = &gPaletteBuffer[destPaletteNum * 16];
- DmaCopy32(3, src, dest, size);
-}
-
-void SetColor(u32 colorIndex, u32 color) {
- gPaletteBuffer[colorIndex] = color;
- gUsedPalettes |= 1 << (colorIndex / 16);
-}
-
-void SetFillColor(u32 color, u32 disable_layers) {
- if (disable_layers) {
- gScreen.lcd.displayControlMask = ~(DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON);
- } else {
- gScreen.lcd.displayControlMask = ~0;
- }
- SetColor(0, color);
-}
-
-void LoadGfxGroup(u32 group) {
- u32 terminator;
- u32 dmaCtrl;
- int gfxOffset;
- const u8* src;
- u32 dest;
- int size;
- const GfxItem* gfxItem = gGfxGroups[group];
- while (1) {
- u32 loadGfx = FALSE;
- u32 ctrl = gfxItem->unk0.bytes.unk3;
- ctrl &= 0xF;
- switch (ctrl) {
- case 0x7:
- loadGfx = TRUE;
- break;
- case 0xD:
- return;
- case 0xE:
- if (gSaveHeader->gameLanguage != 0 && gSaveHeader->gameLanguage != 1) {
- loadGfx = TRUE;
- }
- break;
- case 0xF:
- if (gSaveHeader->gameLanguage != 0) {
- loadGfx = TRUE;
- }
- break;
- default:
- if (ctrl == gSaveHeader->gameLanguage) {
- loadGfx = TRUE;
- }
- break;
- }
-
- if (loadGfx) {
- gfxOffset = gfxItem->unk0.raw & 0xFFFFFF;
- src = &gGlobalGfxAndPalettes[gfxOffset];
- dest = gfxItem->dest;
- size = gfxItem->unk8;
- dmaCtrl = 0x80000000;
- if (size < 0) {
- if (dest >= VRAM) {
- LZ77UnCompVram(src, (void*)dest);
- } else {
- LZ77UnCompWram(src, (void*)dest);
- }
- } else {
- DmaSet(3, src, dest, dmaCtrl | ((u32)size >> 1));
- }
- }
-
- terminator = gfxItem->unk0.bytes.unk3;
- terminator &= 0x80;
- gfxItem++;
- if (!terminator) {
- break;
- }
- }
-}
-
-/* TODO:
- clear OAM, zMalloc, etc.
-*/