summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroctorock <79596758+octorock@users.noreply.github.com>2022-03-05 19:24:39 +0100
committeroctorock <79596758+octorock@users.noreply.github.com>2022-03-17 00:58:47 +0100
commit41ea9ab943d8be91d9e296d23cd1f2dd48d37d9d (patch)
tree4c17c549e48b887a18e74f8ec73d26a66892fbe1
parent9749170b751c35c65d9fb05b9ce0426770d1bbb9 (diff)
Decompile some UI
-rw-r--r--asm/intr.s66
-rw-r--r--asm/non_matching/sub_0801CED8.inc33
-rw-r--r--asm/non_matching/subtask2/sub_080A70AC.inc2
-rw-r--r--asm/non_matching/ui/ButtonUIElement_Action1.inc99
-rw-r--r--asm/non_matching/ui/CreateUIElement.inc41
-rw-r--r--asm/non_matching/ui/DrawChargeBar.inc155
-rw-r--r--asm/non_matching/ui/DrawHearts.inc196
-rw-r--r--asm/non_matching/ui/DrawKeys.inc101
-rw-r--r--asm/non_matching/ui/DrawRupees.inc152
-rw-r--r--asm/non_matching/ui/ItemUIElement.inc117
-rw-r--r--asm/non_matching/ui/TextUIElement.inc75
-rw-r--r--asm/non_matching/ui/sub_0801C25C.inc75
-rw-r--r--asm/non_matching/ui/sub_0801C2F0.inc39
-rw-r--r--asm/non_matching/ui/sub_0801C5E0.inc66
-rw-r--r--asm/ui.s1708
-rw-r--r--assets/assets.json46
-rw-r--r--data/const/object/treeHidingPortal.s10
-rw-r--r--data/data_080B7B74.s94
-rw-r--r--include/functions.h6
-rw-r--r--include/structures.h83
-rw-r--r--linker.ld11
-rw-r--r--src/affine.c17
-rw-r--r--src/fileselect.c12
-rw-r--r--src/game.c20
-rw-r--r--src/interrupts.c12
-rw-r--r--src/menu/figurine_menu.c6
-rw-r--r--src/menu/kinstone_menu.c4
-rw-r--r--src/menu/pause_menu.c4
-rw-r--r--src/object/crenelBeanSprout.c6
-rw-r--r--src/object/itemForSale.c12
-rw-r--r--src/player.c4
-rw-r--r--src/playerUtils.c2
-rw-r--r--src/script.c4
-rw-r--r--src/subtask2.c2
-rw-r--r--src/ui.c496
35 files changed, 1805 insertions, 1971 deletions
diff --git a/asm/intr.s b/asm/intr.s
index 76f4fb60..4aea95fc 100644
--- a/asm/intr.s
+++ b/asm/intr.s
@@ -280,8 +280,8 @@ UpdateCollision: @ 0x080B1C54
strb r1, [r3]
bx lr
- arm_func_start CollideAll
-CollideAll: @ 0x080B1C7C
+ arm_func_start arm_CollideAll
+arm_CollideAll: @ 0x080B1C7C
push {r4, r5, r6, r7, r8, sb, sl, lr}
add r0, pc, #0x104 @ =_080B1D8C
ldm r0, {r8, sb, sl}
@@ -326,7 +326,7 @@ _080B1CC8:
orrs r0, r0, r2
bne _080B1CC8
_080B1D20:
- bl CalcCollision
+ bl arm_CalcCollision
cmp r0, #0
beq _080B1CC8
ldrb r3, [r4, #0x3c]
@@ -360,8 +360,8 @@ _080B1D8C: .4byte gUnk_02018EA0
_080B1D90: .4byte gCollidableList
_080B1D94: .4byte gCollidableCount
- arm_func_start CalcCollision
-CalcCollision: @ 0x080B1D98
+ arm_func_start arm_CalcCollision
+arm_CalcCollision: @ 0x080B1D98
@ r6 = this, r7 = other
push {r2, r3, r6, r7, r8, sb, ip, lr}
@@ -422,7 +422,7 @@ CalcCollision: @ 0x080B1D98
_080B1E74:
mov r2, #0
mov ip, #0
- bl CalcCollisionDirection
+ bl arm_CalcCollisionDirection
mov r6, r0
ldrb r1, [r5, #0x3f]
mov r0, #0x22
@@ -473,8 +473,8 @@ _080B1F28:
mov r0, #0
b _080B1F20
- arm_func_start sub_080B1F30
-sub_080B1F30: @ 0x080B1F30
+ arm_func_start arm_sub_080B1F30
+arm_sub_080B1F30: @ 0x080B1F30
ldrh r0, [r4, #0x2e]
ldrh r1, [r5, #0x2e]
sub r0, r0, r1
@@ -487,8 +487,8 @@ sub_080B1F30: @ 0x080B1F30
sub r1, r1, r2
bx lr
- arm_func_start sub_080B1F5C
-sub_080B1F5C: @ 0x080B1F5C
+ arm_func_start arm_sub_080B1F5C
+arm_sub_080B1F5C: @ 0x080B1F5C
ldrh r0, [r4, #0x2e]
ldrh r1, [r5, #0x2e]
sub r0, r0, r1
@@ -501,8 +501,8 @@ sub_080B1F5C: @ 0x080B1F5C
add r1, r1, r2
bx lr
- arm_func_start sub_080B1F88
-sub_080B1F88: @ 0x080B1F88
+ arm_func_start arm_sub_080B1F88
+arm_sub_080B1F88: @ 0x080B1F88
ldrh r0, [r4, #0x2e]
ldrh r1, [r5, #0x2e]
sub r0, r0, r1
@@ -511,8 +511,8 @@ sub_080B1F88: @ 0x080B1F88
sub r1, r1, r2
bx lr
- arm_func_start sub_080B1FA4
-sub_080B1FA4: @ 0x080B1FA4
+ arm_func_start arm_sub_080B1FA4
+arm_sub_080B1FA4: @ 0x080B1FA4
ldrb r0, [r5, #0x15]
eor r0, r0, #0x10
b _080B1FB4
@@ -532,8 +532,8 @@ _080B1FB4:
and r6, r6, #0x1f
bx lr
- arm_func_start sub_080B1FE4
-sub_080B1FE4: @ 0x080B1FE4
+ arm_func_start arm_sub_080B1FE4
+arm_sub_080B1FE4: @ 0x080B1FE4
ldrb r6, [r4, #0x15]
_080B1FE8:
bx lr
@@ -630,8 +630,8 @@ _080B20FC:
mov r0, #1
bx lr
- arm_func_start MakeFadeBuff256
-MakeFadeBuff256: @ 0x080B2124
+ arm_func_start arm_MakeFadeBuff256
+arm_MakeFadeBuff256: @ 0x080B2124
push {r4, r5, r6, r7, r8, sb, sl, fp}
mul r3, r2, r3
mov r4, #0x400
@@ -670,7 +670,7 @@ _080B21A4: .4byte 0x01010101
_080B21A8: .4byte 0x02000000 + 6 @ brightness preference
_080B21AC: .4byte gUnk_08000F54
-_ClearAndUpdateEntities:
+arm_ClearAndUpdateEntities:
ldr r11, _080B2270 @ =gUpdateContext
ldr r1, [r11]
ldm r1, {r7, r8, r9, r10}
@@ -686,8 +686,8 @@ _ClearAndUpdateEntities:
@ void* restore_sp;
@ }
- arm_func_start _UpdateEntities
-_UpdateEntities: @ 0x080B21B0 @
+ arm_func_start arm_UpdateEntities
+arm_UpdateEntities: @ 0x080B21B0 @
@ UpdateEntities starts here
@ arg0 (r0) : 0 = entities, 1 = managers
ldr r1, _080B2274 @ =gUnk_080026A4
@@ -742,8 +742,8 @@ _080B2270: .4byte gUpdateContext
_080B2274: .4byte gUnk_080026A4
_080B2278: .4byte gUpdateContext
- arm_func_start sub_080B227C
-sub_080B227C: @ 0x080B227C
+ arm_func_start arm_sub_080B227C
+arm_sub_080B227C: @ 0x080B227C
push {r4, r5, r6, r7, r8, lr}
ldr r2, [r0, #0x48]
cmp r2, #0
@@ -812,8 +812,8 @@ _080B236C:
.align 2, 0
_080B2378: .4byte sub_080044AE
- arm_func_start CalcCollisionDirection
-CalcCollisionDirection: @ 0x080B237C
+ arm_func_start arm_CalcCollisionDirection
+arm_CalcCollisionDirection: @ 0x080B237C
subs r2, r2, r0
movpl r0, #0
movmi r0, #0x20
@@ -845,8 +845,8 @@ CalcCollisionDirection: @ 0x080B237C
.align 2, 0
_080B23EC: .4byte gUnk_0800464E
- arm_func_start sub_080B23F0
-sub_080B23F0: @ 0x080B23F0
+ arm_func_start arm_DrawEntities
+arm_DrawEntities: @ 0x080B23F0
.ifdef EU
push {r4, r5, r6, r7, r8, sb, sl, fp, lr}
ldr fp, _080B2A30 @ =gOAMControls
@@ -1528,8 +1528,8 @@ sub_080B27F4: @ 0x080B27F4
add sl, sl, r0
b sub_080B2874
- arm_func_start sub_080B280C
-sub_080B280C: @ 0x080B280C
+ arm_func_start arm_DrawDirect
+arm_DrawDirect: @ 0x080B280C
cmp r2, #0xff
bxeq lr
ldr r3, _080B2A60 @ =gFrameObjLists
@@ -1537,7 +1537,7 @@ sub_080B280C: @ 0x080B280C
add r1, r1, r2, lsl #2
ldr r1, [r3, r1]
add r1, r1, r3
-_080B2828:
+arm_sub_080ADA04:
ldrb r2, [r1]
cmp r2, #0
bxeq lr
@@ -1741,8 +1741,9 @@ _080B2074EU:
cmp r5, #0x1f
bls _080B1FECEU
bx sl
- arm_func_start sub_080B2088
-sub_080B2088: @ 0x080B2088
+
+ arm_func_start arm_sub_080B2088
+arm_sub_080B2088: @ 0x080B2088
ldr r5, [r4, #0x48]
cmp r5, #0
bxeq lr
@@ -1856,6 +1857,7 @@ _080B2074EU:
cmp r5, #0x1f
bls _080B1FECEU
bx sl
+
arm_func_start sub_080B2088
sub_080B2088: @ 0x080B2088
ldr r5, [r4, #0x48]
diff --git a/asm/non_matching/sub_0801CED8.inc b/asm/non_matching/sub_0801CED8.inc
deleted file mode 100644
index a976f73a..00000000
--- a/asm/non_matching/sub_0801CED8.inc
+++ /dev/null
@@ -1,33 +0,0 @@
- .syntax unified
- push {r4, lr}
- adds r3, r0, #0
- ldr r0, _0801CF10 @ =gUnk_0200AF00
- adds r1, r0, #0
- adds r1, #0x24
- ldrb r4, [r1]
- cmp r4, #1
- bne _0801CF0E
- movs r2, #2
- movs r0, #2
- strb r0, [r1]
- movs r1, #0
- movs r0, #0x10
- strh r0, [r3, #0xc]
- movs r0, #0x90
- strh r0, [r3, #0xe]
- strb r1, [r3, #6]
- movs r0, #7
- strb r0, [r3, #1]
- strb r4, [r3, #4]
- ldrb r0, [r3]
- orrs r0, r2
- strb r0, [r3]
- ldr r1, _0801CF14 @ =gUnk_080C9094
- adds r0, r3, #0
- bl sub_0801CAB8
-_0801CF0E:
- pop {r4, pc}
- .align 2, 0
-_0801CF10: .4byte gUnk_0200AF00
-_0801CF14: .4byte gUnk_080C9094
- .syntax divided
diff --git a/asm/non_matching/subtask2/sub_080A70AC.inc b/asm/non_matching/subtask2/sub_080A70AC.inc
index fac44484..afcd15bf 100644
--- a/asm/non_matching/subtask2/sub_080A70AC.inc
+++ b/asm/non_matching/subtask2/sub_080A70AC.inc
@@ -41,7 +41,7 @@
_080A70FC:
ldrb r0, [r5]
ldrb r1, [r5, #1]
- bl sub_0801CA6C
+ bl CreateUIElement
adds r5, #2
movs r0, #0
ldrsb r0, [r5, r0]
diff --git a/asm/non_matching/ui/ButtonUIElement_Action1.inc b/asm/non_matching/ui/ButtonUIElement_Action1.inc
new file mode 100644
index 00000000..76f9a763
--- /dev/null
+++ b/asm/non_matching/ui/ButtonUIElement_Action1.inc
@@ -0,0 +1,99 @@
+ .syntax unified
+ push {r4, r5, r6, lr}
+ adds r5, r0, #0
+ ldrb r0, [r5, #2]
+ movs r6, #8
+ cmp r0, #0
+ bne _0801CC10
+ movs r6, #4
+ cmp r0, #0
+ bne _0801CC10
+ ldr r3, _0801CC08 @ =gUnk_0200AF00
+ ldrb r0, [r3, #1]
+ ldrb r2, [r5, #1]
+ asrs r0, r2
+ movs r1, #1
+ ands r0, r1
+ cmp r0, #0
+ bne _0801CBF6
+ ldr r0, _0801CC0C @ =gMessage
+ ldrb r1, [r0]
+ movs r0, #0x7f
+ ands r0, r1
+ cmp r0, #0
+ beq _0801CC10
+_0801CBF6:
+ lsls r0, r2, #1
+ adds r1, r3, #0
+ adds r1, #0x1c
+ adds r0, r0, r1
+ movs r1, #0
+ ldrsh r0, [r0, r1]
+ adds r1, r0, #0
+ subs r1, #0x28
+ b _0801CC1E
+ .align 2, 0
+_0801CC08: .4byte gUnk_0200AF00
+_0801CC0C: .4byte gMessage
+_0801CC10:
+ ldr r1, _0801CC7C @ =gUnk_0200AF00
+ ldrb r0, [r5, #1]
+ lsls r0, r0, #1
+ adds r1, #0x1c
+ adds r0, r0, r1
+ movs r2, #0
+ ldrsh r1, [r0, r2]
+_0801CC1E:
+ movs r2, #0xe
+ ldrsh r0, [r5, r2]
+ subs r4, r1, r0
+ adds r1, r4, #0
+ cmp r4, #0
+ bge _0801CC2C
+ rsbs r4, r4, #0
+_0801CC2C:
+ cmp r6, r4
+ bgt _0801CC32
+ adds r4, r6, #0
+_0801CC32:
+ adds r0, r1, #0
+ bl sub_08000E44
+ muls r4, r0, r4
+ cmp r4, #0
+ beq _0801CC44
+ ldrh r0, [r5, #0xe]
+ adds r0, r0, r4
+ strh r0, [r5, #0xe]
+_0801CC44:
+ ldr r0, _0801CC7C @ =gUnk_0200AF00
+ ldrb r1, [r5, #1]
+ lsls r1, r1, #1
+ adds r0, #0x16
+ adds r1, r1, r0
+ movs r0, #0
+ ldrsh r1, [r1, r0]
+ movs r2, #0xc
+ ldrsh r0, [r5, r2]
+ subs r4, r1, r0
+ adds r1, r4, #0
+ cmp r4, #0
+ bge _0801CC60
+ rsbs r4, r4, #0
+_0801CC60:
+ cmp r6, r4
+ bgt _0801CC66
+ adds r4, r6, #0
+_0801CC66:
+ adds r0, r1, #0
+ bl sub_08000E44
+ muls r4, r0, r4
+ cmp r4, #0
+ beq _0801CC78
+ ldrh r0, [r5, #0xc]
+ adds r0, r0, r4
+ strh r0, [r5, #0xc]
+_0801CC78:
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_0801CC7C: .4byte gUnk_0200AF00
+ .syntax divided
diff --git a/asm/non_matching/ui/CreateUIElement.inc b/asm/non_matching/ui/CreateUIElement.inc
new file mode 100644
index 00000000..590a1e16
--- /dev/null
+++ b/asm/non_matching/ui/CreateUIElement.inc
@@ -0,0 +1,41 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ adds r5, r0, #0
+ adds r6, r1, #0
+ movs r3, #0
+ ldr r7, _0801CAA8 @ =gUnk_0200AF34
+ movs r0, #1
+ mov ip, r0
+ ldr r1, _0801CAAC @ =gUIElementDefinitions
+ lsls r0, r5, #4
+ adds r4, r0, r1
+_0801CA80:
+ lsls r0, r3, #5
+ adds r1, r0, r7
+ ldrb r2, [r1]
+ movs r0, #1
+ ands r0, r2
+ cmp r0, #0
+ bne _0801CAB0
+ strb r5, [r1, #1]
+ strb r6, [r1, #2]
+ movs r0, #0xff
+ strb r0, [r1, #0x10]
+ mov r0, ip
+ orrs r0, r2
+ strb r0, [r1]
+ ldrh r0, [r4, #4]
+ strh r0, [r1, #0x1a]
+ ldrb r0, [r4, #0xc]
+ strb r0, [r1, #3]
+ b _0801CAB6
+ .align 2, 0
+_0801CAA8: .4byte gUnk_0200AF34
+_0801CAAC: .4byte gUIElementDefinitions
+_0801CAB0:
+ adds r3, #1
+ cmp r3, #0x17
+ bls _0801CA80
+_0801CAB6:
+ pop {r4, r5, r6, r7, pc}
+ .syntax divided
diff --git a/asm/non_matching/ui/DrawChargeBar.inc b/asm/non_matching/ui/DrawChargeBar.inc
new file mode 100644
index 00000000..252ab19d
--- /dev/null
+++ b/asm/non_matching/ui/DrawChargeBar.inc
@@ -0,0 +1,155 @@
+ .syntax unified
+ push {r4, r5, r6, lr}
+ movs r2, #0
+ ldr r5, _0801C884 @ =gUnk_0200AF00
+ ldrb r1, [r5, #1]
+ movs r0, #0x20
+ ands r0, r1
+ cmp r0, #0
+ bne _0801C878
+ ldr r0, _0801C888 @ =gPlayerState
+ adds r0, #0xa0
+ ldrb r1, [r0]
+ rsbs r0, r1, #0
+ orrs r0, r1
+ lsrs r2, r0, #0x1f
+_0801C878:
+ cmp r2, #0
+ bne _0801C88C
+ bl sub_0801C824
+ b _0801C984
+ .align 2, 0
+_0801C884: .4byte gUnk_0200AF00
+_0801C888: .4byte gPlayerState
+_0801C88C:
+ ldrb r0, [r5, #4]
+ ldr r4, _0801C92C @ =gUnk_02034D30
+ cmp r0, #0x28
+ bls _0801C896
+ adds r4, #0x40
+_0801C896:
+ ldr r0, _0801C930 @ =gPlayerState
+ adds r0, #0xa4
+ movs r1, #0
+ ldrsh r0, [r0, r1]
+ adds r0, #0x13
+ movs r1, #0x14
+ bl Div
+ adds r1, r0, #0
+ cmp r1, #0x28
+ bls _0801C8AE
+ movs r1, #0x28
+_0801C8AE:
+ ldrb r0, [r5, #6]
+ cmp r0, #0
+ beq _0801C8BA
+ ldrb r0, [r5, #7]
+ cmp r0, r1
+ beq _0801C910
+_0801C8BA:
+ movs r6, #1
+ strb r6, [r5, #6]
+ strb r1, [r5, #7]
+ adds r0, r1, #0
+ movs r1, #4
+ bl Div
+ adds r3, r0, #0
+ adds r5, r1, #0
+ ldr r1, _0801C934 @ =0x0000F016
+ adds r0, r1, #0
+ strh r0, [r4]
+ ldr r1, _0801C938 @ =0x0000F416
+ adds r0, r1, #0
+ strh r0, [r4, #0x16]
+ ldr r2, _0801C93C @ =0x040000D4
+ movs r0, #0xa
+ subs r0, r0, r3
+ lsls r0, r0, #1
+ ldr r1, _0801C940 @ =gUnk_080C8F54
+ adds r0, r0, r1
+ str r0, [r2]
+ adds r0, r4, #2
+ str r0, [r2, #4]
+ ldr r0, _0801C944 @ =0x8000000A
+ str r0, [r2, #8]
+ ldr r0, [r2, #8]
+ cmp r5, #0
+ beq _0801C90C
+ lsls r2, r3, #1
+ adds r2, r2, r4
+ adds r0, r5, #0
+ adds r0, #0x17
+ ldr r3, _0801C948 @ =0x000003FF
+ adds r1, r3, #0
+ ands r0, r1
+ movs r3, #0xf0
+ lsls r3, r3, #8
+ adds r1, r3, #0
+ orrs r0, r1
+ strh r0, [r2, #2]
+_0801C90C:
+ ldr r0, _0801C94C @ =gScreen
+ strh r6, [r0, #0xe]
+_0801C910:
+ ldr r0, _0801C930 @ =gPlayerState
+ adds r0, #0xa0
+ ldrb r0, [r0]
+ cmp r0, #5
+ bgt _0801C962
+ cmp r0, #4
+ blt _0801C962
+ ldr r2, _0801C950 @ =gUnk_0200AF00
+ ldrb r1, [r2, #9]
+ adds r4, r2, #0
+ cmp r0, #4
+ bne _0801C954
+ adds r0, r1, #2
+ b _0801C956
+ .align 2, 0
+_0801C92C: .4byte gUnk_02034D30
+_0801C930: .4byte gPlayerState
+_0801C934: .4byte 0x0000F016
+_0801C938: .4byte 0x0000F416
+_0801C93C: .4byte 0x040000D4
+_0801C940: .4byte gUnk_080C8F54
+_0801C944: .4byte 0x8000000A
+_0801C948: .4byte 0x000003FF
+_0801C94C: .4byte gScreen
+_0801C950: .4byte gUnk_0200AF00
+_0801C954:
+ adds r0, r1, #1
+_0801C956:
+ strb r0, [r2, #9]
+ ldrb r0, [r4, #9]
+ lsrs r3, r0, #4
+ movs r0, #3
+ ands r3, r0
+ b _0801C966
+_0801C962:
+ movs r3, #0
+ ldr r4, _0801C988 @ =gUnk_0200AF00
+_0801C966:
+ ldrb r0, [r4, #8]
+ cmp r3, r0
+ beq _0801C984
+ strb r3, [r4, #8]
+ ldr r4, _0801C98C @ =0x0600C2C0
+ ldr r1, _0801C990 @ =0x040000D4
+ ldr r2, _0801C994 @ =gUnk_080C8F7C
+ lsls r0, r3, #2
+ adds r0, r0, r2
+ ldr r0, [r0]
+ str r0, [r1]
+ str r4, [r1, #4]
+ ldr r0, _0801C998 @ =0x84000030
+ str r0, [r1, #8]
+ ldr r0, [r1, #8]
+_0801C984:
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_0801C988: .4byte gUnk_0200AF00
+_0801C98C: .4byte 0x0600C2C0
+_0801C990: .4byte 0x040000D4
+_0801C994: .4byte gUnk_080C8F7C
+_0801C998: .4byte 0x84000030
+ .syntax divided
diff --git a/asm/non_matching/ui/DrawHearts.inc b/asm/non_matching/ui/DrawHearts.inc
new file mode 100644
index 00000000..092d7b9d
--- /dev/null
+++ b/asm/non_matching/ui/DrawHearts.inc
@@ -0,0 +1,196 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ mov r7, r8
+ push {r7}
+ ldr r2, _0801C6CC @ =gUnk_0200AF00
+ ldrb r1, [r2, #1]
+ movs r0, #0x10
+ ands r0, r1
+ cmp r0, #0
+ beq _0801C6D0
+ bl sub_0801C824
+ bl sub_0801C66C
+ b _0801C802
+ .align 2, 0
+_0801C6CC: .4byte gUnk_0200AF00
+_0801C6D0:
+ ldr r5, _0801C6F8 @ =gSave
+ adds r0, r5, #0
+ adds r0, #0xab
+ ldrb r0, [r0]
+ lsrs r4, r0, #1
+ ldrb r0, [r2, #4]
+ cmp r4, r0
+ beq _0801C6EA
+ strb r4, [r2, #4]
+ bl sub_0801C824
+ bl sub_0801C66C
+_0801C6EA:
+ adds r1, r5, #0
+ adds r1, #0xaa
+ ldrb r0, [r1]
+ cmp r0, #1
+ beq _0801C6FC
+ lsrs r1, r0, #1
+ b _0801C6FE
+ .align 2, 0
+_0801C6F8: .4byte gSave
+_0801C6FC:
+ movs r1, #1
+_0801C6FE:
+ cmp r1, r4
+ ble _0801C704
+ adds r1, r4, #0
+_0801C704:
+ movs r4, #0
+ ldr r0, _0801C748 @ =gUnk_0200AF00
+ ldrb r2, [r0, #3]
+ adds r7, r0, #0
+ cmp r1, r2
+ beq _0801C718
+ movs r4, #1
+ cmp r1, r2
+ ble _0801C718
+ movs r4, #2
+_0801C718:
+ cmp r4, #1
+ beq _0801C750
+ cmp r4, #2
+ bne _0801C756
+ ldrb r0, [r7, #5]
+ adds r1, r0, #1
+ strb r1, [r7, #5]
+ lsls r0, r0, #0x18
+ lsrs r1, r0, #0x18
+ movs r0, #1
+ ands r0, r1
+ cmp r0, #0
+ bne _0801C74C
+ movs r0, #7
+ ands r1, r0
+ cmp r1, #0
+ bne _0801C740
+ movs r0, #0x71
+ bl SoundReq
+_0801C740:
+ ldrb r0, [r7, #3]
+ adds r0, #1
+ strb r0, [r7, #3]
+ b _0801C75A
+ .align 2, 0
+_0801C748: .4byte gUnk_0200AF00
+_0801C74C:
+ movs r4, #0
+ b _0801C75A
+_0801C750:
+ ldrb r0, [r7, #3]
+ subs r0, #1
+ strb r0, [r7, #3]
+_0801C756:
+ movs r0, #0
+ strb r0, [r7, #5]
+_0801C75A:
+ ldrb r0, [r7, #2]
+ cmp r0, #0
+ beq _0801C764
+ cmp r4, #0
+ beq _0801C802
+_0801C764:
+ movs r0, #2
+ strb r0, [r7, #2]
+ ldrb r0, [r7, #3]
+ lsrs r3, r0, #2
+ cmp r3, #0xa
+ ble _0801C77A
+ movs r1, #0xa
+ mov r8, r1
+ adds r6, r3, #0
+ subs r6, #0xa
+ b _0801C77E
+_0801C77A:
+ mov r8, r3
+ movs r6, #0
+_0801C77E:
+ ldrb r0, [r7, #4]
+ lsrs r4, r0, #2
+ adds r1, r4, #0
+ cmp r4, #0xa
+ ble _0801C78A
+ movs r4, #0xa
+_0801C78A:
+ adds r2, r1, #0
+ subs r2, #0xa
+ ldr r0, _0801C808 @ =gUnk_080C8F2C
+ mov ip, r0
+ cmp r2, #0
+ ble _0801C7B8
+ ldr r5, _0801C80C @ =gUnk_02034D30
+ ldr r1, _0801C810 @ =0x0000F010
+ adds r0, r1, #0
+ strh r0, [r5]
+ ldr r1, _0801C814 @ =0x040000D4
+ movs r0, #0xa
+ subs r0, r0, r6
+ lsls r0, r0, #1
+ add r0, ip
+ str r0, [r1]
+ adds r0, r5, #2
+ str r0, [r1, #4]
+ movs r0, #0x80
+ lsls r0, r0, #0x18
+ orrs r2, r0
+ str r2, [r1, #8]
+ ldr r0, [r1, #8]
+_0801C7B8:
+ ldr r5, _0801C818 @ =gUnk_02034CF0
+ ldr r2, _0801C810 @ =0x0000F010
+ adds r0, r2, #0
+ strh r0, [r5]
+ ldr r1, _0801C814 @ =0x040000D4
+ movs r0, #0xa
+ mov r2, r8
+ subs r0, r0, r2
+ lsls r0, r0, #1
+ add r0, ip
+ str r0, [r1]
+ adds r0, r5, #2
+ str r0, [r1, #4]
+ movs r0, #0x80
+ lsls r0, r0, #0x18
+ orrs r4, r0
+ str r4, [r1, #8]
+ ldr r0, [r1, #8]
+ ldrb r0, [r7, #3]
+ movs r1, #3
+ ands r1, r0
+ cmp r1, #0
+ beq _0801C7FC
+ cmp r3, #9
+ ble _0801C7EE
+ subs r3, #0xa
+ adds r5, #0x40
+_0801C7EE:
+ lsls r0, r3, #1
+ adds r0, r0, r5
+ adds r1, #0x11
+ ldr r3, _0801C81C @ =0xFFFFF000
+ adds r2, r3, #0
+ orrs r1, r2
+ strh r1, [r0, #2]
+_0801C7FC:
+ ldr r1, _0801C820 @ =gScreen
+ movs r0, #1
+ strh r0, [r1, #0xe]
+_0801C802:
+ pop {r3}
+ mov r8, r3
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801C808: .4byte gUnk_080C8F2C
+_0801C80C: .4byte gUnk_02034D30
+_0801C810: .4byte 0x0000F010
+_0801C814: .4byte 0x040000D4
+_0801C818: .4byte gUnk_02034CF0
+_0801C81C: .4byte 0xFFFFF000
+_0801C820: .4byte gScreen
+ .syntax divided
diff --git a/asm/non_matching/ui/DrawKeys.inc b/asm/non_matching/ui/DrawKeys.inc
new file mode 100644
index 00000000..6d483a4f
--- /dev/null
+++ b/asm/non_matching/ui/DrawKeys.inc
@@ -0,0 +1,101 @@
+ .syntax unified
+ push {r4, r5, lr}
+ ldr r4, _0801C9E0 @ =gUnk_0200AF00
+ ldrb r1, [r4, #1]
+ movs r0, #0x80
+ ands r0, r1
+ cmp r0, #0
+ bne _0801C9B2
+ bl AreaHasKeys
+ cmp r0, #0
+ bne _0801C9EC
+_0801C9B2:
+ ldrb r0, [r4, #0x10]
+ cmp r0, #0
+ beq _0801CA50
+ movs r0, #0
+ strb r0, [r4, #0x10]
+ ldr r2, _0801C9E4 @ =gUnk_020350E2
+ strh r0, [r2]
+ strh r0, [r2, #2]
+ strh r0, [r2, #4]
+ strh r0, [r2, #6]
+ adds r1, r2, #0
+ adds r1, #0x40
+ strh r0, [r1]
+ adds r1, #2
+ strh r0, [r1]
+ adds r1, #2
+ strh r0, [r1]
+ adds r1, #2
+ strh r0, [r1]
+ ldr r1, _0801C9E8 @ =gScreen
+ movs r0, #1
+ strh r0, [r1, #0xe]
+ b _0801CA50
+ .align 2, 0
+_0801C9E0: .4byte gUnk_0200AF00
+_0801C9E4: .4byte gUnk_020350E2
+_0801C9E8: .4byte gScreen
+_0801C9EC:
+ ldrb r0, [r4, #0x10]
+ cmp r0, #0
+ bne _0801CA1E
+ ldr r2, _0801CA54 @ =gUnk_020350E2
+ adds r1, r2, #0
+ adds r1, #0x40
+ ldr r3, _0801CA58 @ =0x0000F01C
+ strh r3, [r2]
+ adds r0, r3, #1
+ strh r0, [r2, #2]
+ adds r0, r3, #2
+ strh r0, [r1]
+ adds r0, r3, #3
+ strh r0, [r1, #2]
+ adds r3, #0x5a
+ strh r3, [r2, #4]
+ adds r0, r3, #1
+ strh r0, [r1, #4]
+ adds r0, r3, #2
+ strh r0, [r2, #6]
+ adds r0, r3, #3
+ strh r0, [r1, #6]
+ ldr r1, _0801CA5C @ =gScreen
+ movs r0, #1
+ strh r0, [r1, #0xe]
+_0801CA1E:
+ ldr r0, _0801CA60 @ =gSave
+ ldr r3, _0801CA64 @ =gArea
+ ldrb r1, [r3, #3]
+ ldr r5, _0801CA68 @ =0x0000045C
+ adds r2, r0, r5
+ adds r1, r1, r2
+ ldrb r0, [r4, #0x12]
+ ldrb r1, [r1]
+ cmp r0, r1
+ bne _0801CA38
+ ldrb r0, [r4, #0x10]
+ cmp r0, #0
+ bne _0801CA50
+_0801CA38:
+ movs r0, #2
+ strb r0, [r4, #0x10]
+ ldrb r0, [r3, #3]
+ adds r0, r0, r2
+ ldrb r0, [r0]
+ strb r0, [r4, #0x12]
+ ldrb r1, [r4, #0x12]
+ movs r0, #0x76
+ movs r2, #0
+ movs r3, #2
+ bl sub_0801C5E0
+_0801CA50:
+ pop {r4, r5, pc}
+ .align 2, 0
+_0801CA54: .4byte gUnk_020350E2
+_0801CA58: .4byte 0x0000F01C
+_0801CA5C: .4byte gScreen
+_0801CA60: .4byte gSave
+_0801CA64: .4byte gArea
+_0801CA68: .4byte 0x0000045C
+ .syntax divided
diff --git a/asm/non_matching/ui/DrawRupees.inc b/asm/non_matching/ui/DrawRupees.inc
new file mode 100644
index 00000000..e7807cc3
--- /dev/null
+++ b/asm/non_matching/ui/DrawRupees.inc
@@ -0,0 +1,152 @@
+ .syntax unified
+ push {r4, r5, r6, lr}
+ ldr r2, _0801C4F0 @ =gUnk_0200AF00
+ ldrb r1, [r2, #1]
+ movs r0, #0x40
+ ands r0, r1
+ adds r6, r2, #0
+ cmp r0, #0
+ beq _0801C4FC
+ ldrb r0, [r6, #0xa]
+ cmp r0, #0
+ bne _0801C4C8
+ b _0801C5D0
+_0801C4C8:
+ movs r0, #0
+ strb r0, [r6, #0xa]
+ ldr r3, _0801C4F4 @ =gUnk_02035160
+ strh r0, [r3]
+ strh r0, [r3, #2]
+ strh r0, [r3, #4]
+ strh r0, [r3, #6]
+ strh r0, [r3, #8]
+ adds r4, r3, #0
+ adds r4, #0x40
+ strh r0, [r4]
+ strh r0, [r4, #2]
+ strh r0, [r4, #4]
+ strh r0, [r4, #6]
+ strh r0, [r4, #8]
+ ldr r1, _0801C4F8 @ =gScreen
+ movs r0, #1
+ strh r0, [r1, #0xe]
+ b _0801C5D0
+ .align 2, 0
+_0801C4F0: .4byte gUnk_0200AF00
+_0801C4F4: .4byte gUnk_02035160
+_0801C4F8: .4byte gScreen
+_0801C4FC:
+ ldrb r0, [r6, #0xa]
+ cmp r0, #0
+ bne _0801C560
+ movs r0, #2
+ strb r0, [r6, #0xa]
+ ldr r3, _0801C54C @ =gUnk_02035160
+ adds r4, r3, #0
+ adds r4, #0x40
+ ldr r1, _0801C550 @ =gWalletSizes
+ ldr r2, _0801C554 @ =gSave
+ adds r0, r2, #0
+ adds r0, #0xa8
+ ldrb r0, [r0]
+ lsls r0, r0, #2
+ adds r0, r0, r1
+ ldrh r1, [r0, #2]
+ strh r1, [r3]
+ adds r0, r1, #1
+ strh r0, [r3, #2]
+ adds r0, r1, #2
+ strh r0, [r4]
+ adds r0, r1, #3
+ strh r0, [r4, #2]
+ ldr r1, _0801C558 @ =0x0000F070
+ strh r1, [r3, #4]
+ adds r0, r1, #1
+ strh r0, [r4, #4]
+ adds r0, r1, #2
+ strh r0, [r3, #6]
+ adds r0, r1, #3
+ strh r0, [r4, #6]
+ adds r0, r1, #4
+ strh r0, [r3, #8]
+ adds r0, r1, #5
+ strh r0, [r4, #8]
+ ldr r1, _0801C55C @ =gScreen
+ movs r0, #1
+ strh r0, [r1, #0xe]
+ movs r4, #1
+ b _0801C564
+ .align 2, 0
+_0801C54C: .4byte gUnk_02035160
+_0801C550: .4byte gWalletSizes
+_0801C554: .4byte gSave
+_0801C558: .4byte 0x0000F070
+_0801C55C: .4byte gScreen
+_0801C560:
+ movs r4, #0
+ ldr r2, _0801C580 @ =gSave
+_0801C564:
+ adds r5, r6, #0
+ adds r0, r2, #0
+ adds r0, #0xc0
+ ldrh r1, [r5, #0xe]
+ adds r3, r1, #0
+ ldrh r0, [r0]
+ cmp r3, r0
+ beq _0801C58A
+ cmp r3, r0
+ bhs _0801C584
+ adds r0, r1, #1
+ strh r0, [r5, #0xe]
+ b _0801C588
+ .align 2, 0
+_0801C580: .4byte gSave
+_0801C584:
+ subs r0, r1, #1
+ strh r0, [r6, #0xe]
+_0801C588:
+ movs r4, #2
+_0801C58A:
+ cmp r4, #1
+ beq _0801C5A4
+ cmp r4, #2
+ bne _0801C5CC
+ ldr r0, _0801C5D4 @ =gUnk_0200AF00
+ ldrb r0, [r0, #0xc]
+ movs r1, #3
+ ands r0, r1
+ cmp r0, #0
+ bne _0801C5A4
+ movs r0, #0x6f
+ bl SoundReq
+_0801C5A4:
+ ldr r4, _0801C5D4 @ =gUnk_0200AF00
+ ldrh r3, [r4, #0xe]
+ movs r2, #0
+ ldr r1, _0801C5D8 @ =gWalletSizes
+ ldr r0, _0801C5DC @ =gSave
+ adds r0, #0xa8
+ ldrb r0, [r0]
+ lsls r0, r0, #2
+ adds r0, r0, r1
+ ldrh r0, [r0]
+ cmp r0, r3
+ bhi _0801C5BE
+ movs r2, #1
+_0801C5BE:
+ movs r0, #0x70
+ adds r1, r3, #0
+ movs r3, #3
+ bl sub_0801C5E0
+ ldrb r0, [r4, #0xc]
+ adds r4, r0, #1
+_0801C5CC:
+ ldr r0, _0801C5D4 @ =gUnk_0200AF00
+ strb r4, [r0, #0xc]
+_0801C5D0:
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+_0801C5D4: .4byte gUnk_0200AF00
+_0801C5D8: .4byte gWalletSizes
+_0801C5DC: .4byte gSave
+ .syntax divided
diff --git a/asm/non_matching/ui/ItemUIElement.inc b/asm/non_matching/ui/ItemUIElement.inc
new file mode 100644
index 00000000..ea1eee27
--- /dev/null
+++ b/asm/non_matching/ui/ItemUIElement.inc
@@ -0,0 +1,117 @@
+ .syntax unified
+ push {r4, r5, r6, lr}
+ adds r4, r0, #0
+ ldrb r1, [r4]
+ movs r0, #3
+ rsbs r0, r0, #0
+ ands r0, r1
+ strb r0, [r4]
+ adds r0, r4, #0
+ bl sub_0801CC80
+ adds r1, r0, #0
+ cmp r1, #0
+ beq _0801CD90
+ ldrb r0, [r4, #8]
+ cmp r0, r1
+ beq _0801CCE0
+ strb r1, [r4, #8]
+ ldr r0, _0801CD1C @ =gSpriteAnimations_322
+ lsls r1, r1, #2
+ adds r1, r1, r0
+ ldr r1, [r1]
+ adds r0, r4, #0
+ bl sub_0801CAB8
+_0801CCE0:
+ ldrb r0, [r4, #1]
+ movs r1, #3
+ eors r0, r1
+ rsbs r1, r0, #0
+ orrs r1, r0
+ lsrs r6, r1, #0x1f
+ ldr r3, _0801CD20 @ =gUnk_0200AF13
+ cmp r6, #0
+ beq _0801CCF4
+ adds r3, #1
+_0801CCF4:
+ ldrb r0, [r4, #8]
+ cmp r0, #7
+ blt _0801CD60
+ cmp r0, #8
+ ble _0801CD28
+ cmp r0, #0xa
+ bgt _0801CD60
+ ldr r1, _0801CD24 @ =gSave
+ adds r0, r1, #0
+ adds r0, #0xad
+ ldrb r2, [r0]
+ ldrb r0, [r3]
+ adds r5, r1, #0
+ cmp r0, r2
+ beq _0801CD4C
+ adds r0, r2, #0
+ adds r0, #0x80
+ strb r0, [r3]
+ b _0801CD4C
+ .align 2, 0
+_0801CD1C: .4byte gSpriteAnimations_322
+_0801CD20: .4byte gUnk_0200AF13
+_0801CD24: .4byte gSave
+_0801CD28:
+ ldr r5, _0801CD44 @ =gSave
+ adds r0, r5, #0
+ adds r0, #0xac
+ ldrb r2, [r0]
+ ldrb r0, [r3]
+ cmp r0, r2
+ beq _0801CD3C
+ adds r0, r2, #0
+ adds r0, #0x80
+ strb r0, [r3]
+_0801CD3C:
+ ldr r1, _0801CD48 @ =gBombBagSizes
+ adds r0, r5, #0
+ adds r0, #0xae
+ b _0801CD52
+ .align 2, 0
+_0801CD44: .4byte gSave
+_0801CD48: .4byte gBombBagSizes
+_0801CD4C:
+ ldr r1, _0801CD5C @ =gQuiverSizes
+ adds r0, r5, #0
+ adds r0, #0xaf
+_0801CD52:
+ ldrb r0, [r0]
+ adds r0, r0, r1
+ ldrb r0, [r0]
+ b _0801CD64
+ .align 2, 0
+_0801CD5C: .4byte gQuiverSizes
+_0801CD60:
+ movs r0, #1
+ movs r2, #0
+_0801CD64:
+ movs r1, #3
+ cmp r0, r2
+ bhi _0801CD6C
+ movs r1, #4
+_0801CD6C:
+ strb r1, [r4, #0x18]
+ adds r0, r6, #0
+ bl FindUIElement
+ adds r1, r0, #0
+ cmp r1, #0
+ beq _0801CD90
+ ldrh r0, [r1, #0xc]
+ strh r0, [r4, #0xc]
+ ldrh r0, [r1, #0xe]
+ strh r0, [r4, #0xe]
+ ldrb r0, [r4]
+ movs r1, #2
+ orrs r0, r1
+ strb r0, [r4]
+ adds r0, r4, #0
+ bl sub_0801CAD0
+_0801CD90:
+ pop {r4, r5, r6, pc}
+ .align 2, 0
+ .syntax divided
diff --git a/asm/non_matching/ui/TextUIElement.inc b/asm/non_matching/ui/TextUIElement.inc
new file mode 100644
index 00000000..2521b2e2
--- /dev/null
+++ b/asm/non_matching/ui/TextUIElement.inc
@@ -0,0 +1,75 @@
+ .syntax unified
+ push {r4, lr}
+ adds r4, r0, #0
+ ldrb r0, [r4, #2]
+ ldr r1, _0801CDC0 @ =gUnk_0200AF00
+ cmp r0, #9
+ bne _0801CDD4
+ adds r0, r1, #0
+ adds r0, #0x2f
+ ldrb r2, [r0]
+ cmp r2, #0
+ bne _0801CDCE
+ ldr r0, _0801CDC4 @ =gArea
+ ldrb r0, [r0, #0x18]
+ cmp r0, #2
+ beq _0801CDC8
+ cmp r0, #3
+ beq _0801CDCC
+ adds r0, r1, #0
+ adds r0, #0x2c
+ ldrb r2, [r0]
+ b _0801CDCE
+ .align 2, 0
+_0801CDC0: .4byte gUnk_0200AF00
+_0801CDC4: .4byte gArea
+_0801CDC8:
+ movs r2, #0xb
+ b _0801CDCE
+_0801CDCC:
+ movs r2, #0xa
+_0801CDCE:
+ adds r0, r1, #0
+ adds r0, #0x32
+ strb r2, [r0]
+_0801CDD4:
+ adds r0, r1, #0
+ adds r0, #0x30
+ ldrb r1, [r4, #3]
+ adds r0, r0, r1
+ ldrb r2, [r0]
+ ldrb r1, [r4]
+ movs r0, #3
+ rsbs r0, r0, #0
+ ands r0, r1
+ strb r0, [r4]
+ cmp r2, #0
+ beq _0801CE1E
+ ldr r1, _0801CE20 @ =gUnk_080C9044
+ movs r0, #0x80
+ lsls r0, r0, #0x12
+ ldrb r0, [r0, #7]
+ adds r0, r0, r1
+ ldrb r0, [r0]
+ adds r2, r2, r0
+ adds r0, r4, #0
+ adds r1, r2, #0
+ bl sub_0801CAFC
+ ldrb r0, [r4, #3]
+ bl FindUIElement
+ adds r1, r0, #0
+ cmp r1, #0
+ beq _0801CE1E
+ ldrh r0, [r1, #0xc]
+ strh r0, [r4, #0xc]
+ ldrh r0, [r1, #0xe]
+ strh r0, [r4, #0xe]
+ ldrb r0, [r4]
+ movs r1, #2
+ orrs r0, r1
+ strb r0, [r4]
+_0801CE1E:
+ pop {r4, pc}
+ .align 2, 0
+_0801CE20: .4byte gUnk_080C9044
+ .syntax divided
diff --git a/asm/non_matching/ui/sub_0801C25C.inc b/asm/non_matching/ui/sub_0801C25C.inc
new file mode 100644
index 00000000..3dc31d7c
--- /dev/null
+++ b/asm/non_matching/ui/sub_0801C25C.inc
@@ -0,0 +1,75 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ movs r4, #0
+ ldr r5, _0801C2E4 @ =gUnk_0200AF34
+ adds r6, r5, #0
+ subs r6, #0x34
+ movs r7, #0xd
+ rsbs r7, r7, #0
+ ldr r3, _0801C2E8 @ =0x040000D4
+_0801C26C:
+ lsls r0, r4, #5
+ adds r2, r0, r5
+ ldrb r1, [r2]
+ movs r0, #3
+ ands r0, r1
+ cmp r0, #3
+ bne _0801C2A8
+ lsls r0, r1, #0x1c
+ lsrs r0, r0, #0x1e
+ cmp r0, #1
+ bne _0801C2A8
+ adds r0, r7, #0
+ ands r0, r1
+ movs r1, #8
+ orrs r0, r1
+ strb r0, [r2]
+ ldr r0, [r2, #0x1c]
+ str r0, [r3]
+ ldrh r0, [r2, #0x1a]
+ lsls r0, r0, #5
+ ldr r1, _0801C2EC @ =0x06010000
+ adds r0, r0, r1
+ str r0, [r3, #4]
+ ldrb r0, [r2, #0x19]
+ lsls r0, r0, #3
+ movs r1, #0x84
+ lsls r1, r1, #0x18
+ orrs r0, r1
+ str r0, [r3, #8]
+ ldr r0, [r3, #8]
+_0801C2A8:
+ adds r4, #1
+ cmp r4, #0x17
+ ble _0801C26C
+ adds r2, r6, #0
+ ldrb r3, [r2, #0x13]
+ movs r0, #0x13
+ ldrsb r0, [r2, r0]
+ cmp r0, #0
+ bge _0801C2C8
+ movs r1, #0x7f
+ ands r1, r3
+ strb r1, [r2, #0x13]
+ movs r0, #0x8d
+ lsls r0, r0, #1
+ bl sub_0801C2F0
+_0801C2C8:
+ ldrb r2, [r6, #0x14]
+ movs r0, #0x14
+ ldrsb r0, [r6, r0]
+ cmp r0, #0
+ bge _0801C2E0
+ movs r1, #0x7f
+ ands r1, r2
+ strb r1, [r6, #0x14]
+ movs r0, #0x93
+ lsls r0, r0, #1
+ bl sub_0801C2F0
+_0801C2E0:
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801C2E4: .4byte gUnk_0200AF34
+_0801C2E8: .4byte 0x040000D4
+_0801C2EC: .4byte 0x06010000
+ .syntax divided
diff --git a/asm/non_matching/ui/sub_0801C2F0.inc b/asm/non_matching/ui/sub_0801C2F0.inc
new file mode 100644
index 00000000..95c9e633
--- /dev/null
+++ b/asm/non_matching/ui/sub_0801C2F0.inc
@@ -0,0 +1,39 @@
+ .syntax unified
+ push {r4, r5, lr}
+ adds r4, r0, #0
+ adds r0, r1, #0
+ lsls r5, r4, #5
+ ldr r1, _0801C330 @ =0x06010000
+ adds r4, r5, r1
+ movs r1, #0xa
+ bl Div
+ cmp r0, #9
+ bls _0801C308
+ movs r0, #9
+_0801C308:
+ ldr r2, _0801C334 @ =0x040000D4
+ lsls r0, r0, #5
+ ldr r3, _0801C338 @ =gUnk_085C4620
+ adds r0, r0, r3
+ str r0, [r2]
+ str r4, [r2, #4]
+ ldr r4, _0801C33C @ =0x84000008
+ str r4, [r2, #8]
+ ldr r0, [r2, #8]
+ adds r1, #0xa
+ lsls r1, r1, #5
+ adds r1, r1, r3
+ str r1, [r2]
+ ldr r1, _0801C340 @ =0x06010020
+ adds r0, r5, r1
+ str r0, [r2, #4]
+ str r4, [r2, #8]
+ ldr r0, [r2, #8]
+ pop {r4, r5, pc}
+ .align 2, 0
+_0801C330: .4byte 0x06010000
+_0801C334: .4byte 0x040000D4
+_0801C338: .4byte gUnk_085C4620
+_0801C33C: .4byte 0x84000008
+_0801C340: .4byte 0x06010020
+ .syntax divided
diff --git a/asm/non_matching/ui/sub_0801C5E0.inc b/asm/non_matching/ui/sub_0801C5E0.inc
new file mode 100644
index 00000000..8d77d87c
--- /dev/null
+++ b/asm/non_matching/ui/sub_0801C5E0.inc
@@ -0,0 +1,66 @@
+ .syntax unified
+ push {r4, r5, r6, r7, lr}
+ adds r4, r0, #0
+ adds r5, r1, #0
+ ldr r7, _0801C650 @ =gUnk_085C4B20
+ cmp r2, #0
+ bne _0801C5F0
+ ldr r0, _0801C654 @ =0xFFFFFD80
+ adds r7, r7, r0
+_0801C5F0:
+ ldr r0, _0801C658 @ =0x000003FF
+ ands r0, r4
+ lsls r6, r0, #5
+ ldr r0, _0801C65C @ =0x0600C000
+ adds r4, r6, r0
+ cmp r3, #2
+ beq _0801C620
+ cmp r3, #3
+ bne _0801C63C
+ adds r0, r5, #0
+ movs r1, #0x64
+ bl Div
+ adds r5, r1, #0
+ ldr r1, _0801C660 @ =0x040000D4
+ lsls r0, r0, #6
+ adds r0, r7, r0
+ str r0, [r1]
+ str r4, [r1, #4]
+ ldr r0, _0801C664 @ =0x84000010
+ str r0, [r1, #8]
+ ldr r0, [r1, #8]
+ ldr r0, _0801C668 @ =0x0600C040
+ adds r4, r6, r0
+_0801C620:
+ adds r0, r5, #0
+ movs r1, #0xa
+ bl Div
+ adds r5, r1, #0
+ ldr r1, _0801C660 @ =0x040000D4
+ lsls r0, r0, #6
+ adds r0, r7, r0
+ str r0, [r1]
+ str r4, [r1, #4]
+ ldr r0, _0801C664 @ =0x84000010
+ str r0, [r1, #8]
+ ldr r0, [r1, #8]
+ adds r4, #0x40
+_0801C63C:
+ ldr r1, _0801C660 @ =0x040000D4
+ lsls r0, r5, #6
+ adds r0, r7, r0
+ str r0, [r1]
+ str r4, [r1, #4]
+ ldr r0, _0801C664 @ =0x84000010
+ str r0, [r1, #8]
+ ldr r0, [r1, #8]
+ pop {r4, r5, r6, r7, pc}
+ .align 2, 0
+_0801C650: .4byte gUnk_085C4B20
+_0801C654: .4byte 0xFFFFFD80
+_0801C658: .4byte 0x000003FF
+_0801C65C: .4byte 0x0600C000
+_0801C660: .4byte 0x040000D4
+_0801C664: .4byte 0x84000010
+_0801C668: .4byte 0x0600C040
+ .syntax divided
diff --git a/asm/ui.s b/asm/ui.s
deleted file mode 100644
index b4a4960a..00000000
--- a/asm/ui.s
+++ /dev/null
@@ -1,1708 +0,0 @@
- .include "asm/macros.inc"
-
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_0801C1D4
-sub_0801C1D4: @ 0x0801C1D4
- push {r4, lr}
- movs r4, #0
-_0801C1D8:
- lsls r1, r4, #5
- ldr r0, _0801C200 @ =gUnk_0200AF34
- adds r2, r1, r0
- ldrb r1, [r2]
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- beq _0801C1F8
- ldrb r0, [r2, #1]
- lsls r0, r0, #4
- ldr r1, _0801C204 @ =gUnk_080C8F8C
- adds r0, r0, r1
- ldr r1, [r0, #8]
- adds r0, r2, #0
- bl _call_via_r1
-_0801C1F8:
- adds r4, #1
- cmp r4, #0x17
- bls _0801C1D8
- pop {r4, pc}
- .align 2, 0
-_0801C200: .4byte gUnk_0200AF34
-_0801C204: .4byte gUnk_080C8F8C
-
- thumb_func_start DrawOAMCmd
-DrawOAMCmd: @ 0x0801C208
- push {r4, r5, lr}
- movs r5, #0
- ldr r4, _0801C250 @ =gOamCmd
-_0801C20E:
- lsls r1, r5, #5
- ldr r0, _0801C254 @ =gUnk_0200AF34
- adds r3, r1, r0
- ldrb r1, [r3]
- movs r0, #3
- ands r0, r1
- cmp r0, #3
- bne _0801C248
- ldrh r0, [r3, #0xc]
- strh r0, [r4]
- ldrh r0, [r3, #0xe]
- strh r0, [r4, #2]
- ldrb r2, [r3, #1]
- lsls r2, r2, #4
- ldr r0, _0801C258 @ =gUnk_080C8F8C
- adds r2, r2, r0
- ldrh r0, [r2]
- strh r0, [r4, #4]
- ldrh r0, [r2, #2]
- strh r0, [r4, #6]
- ldrb r0, [r3, #0x18]
- lsls r0, r0, #0xc
- ldrh r1, [r3, #0x1a]
- orrs r0, r1
- strh r0, [r4, #8]
- ldrh r0, [r2, #6]
- ldrb r1, [r3, #0x10]
- bl DrawDirect
-_0801C248:
- adds r5, #1
- cmp r5, #0x17
- bls _0801C20E
- pop {r4, r5, pc}
- .align 2, 0
-_0801C250: .4byte gOamCmd
-_0801C254: .4byte gUnk_0200AF34
-_0801C258: .4byte gUnk_080C8F8C
-
- thumb_func_start sub_0801C25C
-sub_0801C25C: @ 0x0801C25C
- push {r4, r5, r6, r7, lr}
- movs r4, #0
- ldr r5, _0801C2E4 @ =gUnk_0200AF34
- adds r6, r5, #0
- subs r6, #0x34
- movs r7, #0xd
- rsbs r7, r7, #0
- ldr r3, _0801C2E8 @ =0x040000D4
-_0801C26C:
- lsls r0, r4, #5
- adds r2, r0, r5
- ldrb r1, [r2]
- movs r0, #3
- ands r0, r1
- cmp r0, #3
- bne _0801C2A8
- lsls r0, r1, #0x1c
- lsrs r0, r0, #0x1e
- cmp r0, #1
- bne _0801C2A8
- adds r0, r7, #0
- ands r0, r1
- movs r1, #8
- orrs r0, r1
- strb r0, [r2]
- ldr r0, [r2, #0x1c]
- str r0, [r3]
- ldrh r0, [r2, #0x1a]
- lsls r0, r0, #5
- ldr r1, _0801C2EC @ =0x06010000
- adds r0, r0, r1
- str r0, [r3, #4]
- ldrb r0, [r2, #0x19]
- lsls r0, r0, #3
- movs r1, #0x84
- lsls r1, r1, #0x18
- orrs r0, r1
- str r0, [r3, #8]
- ldr r0, [r3, #8]
-_0801C2A8:
- adds r4, #1
- cmp r4, #0x17
- ble _0801C26C
- adds r2, r6, #0
- ldrb r3, [r2, #0x13]
- movs r0, #0x13
- ldrsb r0, [r2, r0]
- cmp r0, #0
- bge _0801C2C8
- movs r1, #0x7f
- ands r1, r3
- strb r1, [r2, #0x13]
- movs r0, #0x8d
- lsls r0, r0, #1
- bl sub_0801C2F0
-_0801C2C8:
- ldrb r2, [r6, #0x14]
- movs r0, #0x14
- ldrsb r0, [r6, r0]
- cmp r0, #0
- bge _0801C2E0
- movs r1, #0x7f
- ands r1, r2
- strb r1, [r6, #0x14]
- movs r0, #0x93
- lsls r0, r0, #1
- bl sub_0801C2F0
-_0801C2E0:
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801C2E4: .4byte gUnk_0200AF34
-_0801C2E8: .4byte 0x040000D4
-_0801C2EC: .4byte 0x06010000
-
- thumb_func_start sub_0801C2F0
-sub_0801C2F0: @ 0x0801C2F0
- push {r4, r5, lr}
- adds r4, r0, #0
- adds r0, r1, #0
- lsls r5, r4, #5
- ldr r1, _0801C330 @ =0x06010000
- adds r4, r5, r1
- movs r1, #0xa
- bl Div
- cmp r0, #9
- bls _0801C308
- movs r0, #9
-_0801C308:
- ldr r2, _0801C334 @ =0x040000D4
- lsls r0, r0, #5
- ldr r3, _0801C338 @ =gUnk_085C4620
- adds r0, r0, r3
- str r0, [r2]
- str r4, [r2, #4]
- ldr r4, _0801C33C @ =0x84000008
- str r4, [r2, #8]
- ldr r0, [r2, #8]
- adds r1, #0xa
- lsls r1, r1, #5
- adds r1, r1, r3
- str r1, [r2]
- ldr r1, _0801C340 @ =0x06010020
- adds r0, r5, r1
- str r0, [r2, #4]
- str r4, [r2, #8]
- ldr r0, [r2, #8]
- pop {r4, r5, pc}
- .align 2, 0
-_0801C330: .4byte 0x06010000
-_0801C334: .4byte 0x040000D4
-_0801C338: .4byte gUnk_085C4620
-_0801C33C: .4byte 0x84000008
-_0801C340: .4byte 0x06010020
-
- thumb_func_start DrawUI
-DrawUI: @ 0x0801C344
- push {r4, r5, lr}
- ldr r4, _0801C36C @ =gUnk_0200AF00
- ldrb r1, [r4, #1]
- ldrb r0, [r4]
- bics r0, r1
- movs r5, #0
- strb r0, [r4]
- bl sub_0801C6B0
- bl sub_0801C85C
- bl sub_0801C4B0
- bl sub_0801C99C
- strb r5, [r4]
- bl sub_0801C1D4
- pop {r4, r5, pc}
- .align 2, 0
-_0801C36C: .4byte gUnk_0200AF00
-
- thumb_func_start InitUI
-InitUI: @ 0x0801C370
- push {r4, r5, r6, lr}
- cmp r0, #0
- bne _0801C390
- ldr r0, _0801C388 @ =gSave
- adds r1, r0, #0
- adds r1, #0xaa
- ldrb r1, [r1]
- lsrs r6, r1, #1
- adds r0, #0xc0
- ldrh r4, [r0]
- ldr r5, _0801C38C @ =gUnk_0200AF00
- b _0801C398
- .align 2, 0
-_0801C388: .4byte gSave
-_0801C38C: .4byte gUnk_0200AF00
-_0801C390:
- ldr r0, _0801C470 @ =gUnk_0200AF00
- ldrb r6, [r0, #3]
- ldrh r4, [r0, #0xe]
- adds r5, r0, #0
-_0801C398:
- movs r1, #0xcd
- lsls r1, r1, #2
- adds r0, r5, #0
- bl MemClear
- strb r6, [r5, #3]
- strh r4, [r5, #0xe]
- ldr r0, _0801C474 @ =gSave
- adds r0, #0xab
- ldrb r0, [r0]
- lsrs r0, r0, #1
- strb r0, [r5, #4]
- movs r0, #0xc
- bl LoadPaletteGroup
- movs r0, #0x10
- bl LoadGfxGroup
- ldr r4, _0801C478 @ =gBG0Buffer
- movs r1, #0x80
- lsls r1, r1, #4
- adds r0, r4, #0
- bl MemClear
- ldr r1, _0801C47C @ =gScreen
- str r4, [r1, #0x10]
- ldr r0, _0801C480 @ =0x00001F0C
- strh r0, [r1, #8]
- ldrh r2, [r1]
- movs r3, #0x80
- lsls r3, r3, #1
- adds r0, r3, #0
- orrs r0, r2
- strh r0, [r1]
- ldr r1, _0801C484 @ =gOAMControls
- ldr r2, _0801C488 @ =0x00000427
- adds r0, r1, r2
- movs r2, #1
- strb r2, [r0]
- ldr r3, _0801C48C @ =0x00000426
- adds r0, r1, r3
- strb r2, [r0]
- ldr r0, _0801C490 @ =0x0000042E
- adds r1, r1, r0
- strb r2, [r1]
- movs r0, #0x7f
- strb r0, [r5, #0x13]
- strb r0, [r5, #0x14]
- strb r0, [r5, #8]
- bl sub_0801C6B0
- bl sub_0801C4B0
- bl sub_0801C85C
- bl sub_0801C99C
- movs r0, #0xd0
- strh r0, [r5, #0x16]
- movs r0, #0xb8
- strh r0, [r5, #0x18]
- movs r0, #0xd8
- strh r0, [r5, #0x1a]
- movs r0, #0x1c
- strh r0, [r5, #0x1c]
- strh r0, [r5, #0x1e]
- movs r0, #0xe
- strh r0, [r5, #0x20]
- adds r0, r5, #0
- adds r0, #0x34
- movs r1, #0xc0
- lsls r1, r1, #2
- bl MemClear
- movs r0, #5
- movs r1, #9
- bl sub_0801CA6C
- movs r0, #3
- movs r1, #0
- bl sub_0801CA6C
- movs r0, #4
- movs r1, #0
- bl sub_0801CA6C
- movs r0, #2
- movs r1, #0
- bl sub_0801CA6C
- movs r0, #1
- movs r1, #0
- bl sub_0801CA6C
- movs r0, #0
- movs r1, #0
- bl sub_0801CA6C
- movs r0, #7
- movs r1, #0
- bl sub_0801CA6C
- movs r0, #6
- movs r1, #0
- bl sub_0801CA6C
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0801C470: .4byte gUnk_0200AF00
-_0801C474: .4byte gSave
-_0801C478: .4byte gBG0Buffer
-_0801C47C: .4byte gScreen
-_0801C480: .4byte 0x00001F0C
-_0801C484: .4byte gOAMControls
-_0801C488: .4byte 0x00000427
-_0801C48C: .4byte 0x00000426
-_0801C490: .4byte 0x0000042E
-
- thumb_func_start RefreshUI
-RefreshUI: @ 0x0801C494
- ldr r1, _0801C49C @ =gScreen
- movs r0, #1
- strh r0, [r1, #0xe]
- bx lr
- .align 2, 0
-_0801C49C: .4byte gScreen
-
- thumb_func_start RecoverUI
-RecoverUI: @ 0x0801C4A0
- ldr r1, _0801C4AC @ =gUnk_0200AF00
- movs r0, #0
- strb r0, [r1, #2]
- strb r0, [r1, #0x10]
- strb r0, [r1, #0xa]
- bx lr
- .align 2, 0
-_0801C4AC: .4byte gUnk_0200AF00
-
- thumb_func_start sub_0801C4B0
-sub_0801C4B0: @ 0x0801C4B0
- push {r4, r5, r6, lr}
- ldr r2, _0801C4F0 @ =gUnk_0200AF00
- ldrb r1, [r2, #1]
- movs r0, #0x40
- ands r0, r1
- adds r6, r2, #0
- cmp r0, #0
- beq _0801C4FC
- ldrb r0, [r6, #0xa]
- cmp r0, #0
- bne _0801C4C8
- b _0801C5D0
-_0801C4C8:
- movs r0, #0
- strb r0, [r6, #0xa]
- ldr r3, _0801C4F4 @ =gUnk_02035160
- strh r0, [r3]
- strh r0, [r3, #2]
- strh r0, [r3, #4]
- strh r0, [r3, #6]
- strh r0, [r3, #8]
- adds r4, r3, #0
- adds r4, #0x40
- strh r0, [r4]
- strh r0, [r4, #2]
- strh r0, [r4, #4]
- strh r0, [r4, #6]
- strh r0, [r4, #8]
- ldr r1, _0801C4F8 @ =gScreen
- movs r0, #1
- strh r0, [r1, #0xe]
- b _0801C5D0
- .align 2, 0
-_0801C4F0: .4byte gUnk_0200AF00
-_0801C4F4: .4byte gUnk_02035160
-_0801C4F8: .4byte gScreen
-_0801C4FC:
- ldrb r0, [r6, #0xa]
- cmp r0, #0
- bne _0801C560
- movs r0, #2
- strb r0, [r6, #0xa]
- ldr r3, _0801C54C @ =gUnk_02035160
- adds r4, r3, #0
- adds r4, #0x40
- ldr r1, _0801C550 @ =gWalletSizes
- ldr r2, _0801C554 @ =gSave
- adds r0, r2, #0
- adds r0, #0xa8
- ldrb r0, [r0]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldrh r1, [r0, #2]
- strh r1, [r3]
- adds r0, r1, #1
- strh r0, [r3, #2]
- adds r0, r1, #2
- strh r0, [r4]
- adds r0, r1, #3
- strh r0, [r4, #2]
- ldr r1, _0801C558 @ =0x0000F070
- strh r1, [r3, #4]
- adds r0, r1, #1
- strh r0, [r4, #4]
- adds r0, r1, #2
- strh r0, [r3, #6]
- adds r0, r1, #3
- strh r0, [r4, #6]
- adds r0, r1, #4
- strh r0, [r3, #8]
- adds r0, r1, #5
- strh r0, [r4, #8]
- ldr r1, _0801C55C @ =gScreen
- movs r0, #1
- strh r0, [r1, #0xe]
- movs r4, #1
- b _0801C564
- .align 2, 0
-_0801C54C: .4byte gUnk_02035160
-_0801C550: .4byte gWalletSizes
-_0801C554: .4byte gSave
-_0801C558: .4byte 0x0000F070
-_0801C55C: .4byte gScreen
-_0801C560:
- movs r4, #0
- ldr r2, _0801C580 @ =gSave
-_0801C564:
- adds r5, r6, #0
- adds r0, r2, #0
- adds r0, #0xc0
- ldrh r1, [r5, #0xe]
- adds r3, r1, #0
- ldrh r0, [r0]
- cmp r3, r0
- beq _0801C58A
- cmp r3, r0
- bhs _0801C584
- adds r0, r1, #1
- strh r0, [r5, #0xe]
- b _0801C588
- .align 2, 0
-_0801C580: .4byte gSave
-_0801C584:
- subs r0, r1, #1
- strh r0, [r6, #0xe]
-_0801C588:
- movs r4, #2
-_0801C58A:
- cmp r4, #1
- beq _0801C5A4
- cmp r4, #2
- bne _0801C5CC
- ldr r0, _0801C5D4 @ =gUnk_0200AF00
- ldrb r0, [r0, #0xc]
- movs r1, #3
- ands r0, r1
- cmp r0, #0
- bne _0801C5A4
- movs r0, #0x6f
- bl SoundReq
-_0801C5A4:
- ldr r4, _0801C5D4 @ =gUnk_0200AF00
- ldrh r3, [r4, #0xe]
- movs r2, #0
- ldr r1, _0801C5D8 @ =gWalletSizes
- ldr r0, _0801C5DC @ =gSave
- adds r0, #0xa8
- ldrb r0, [r0]
- lsls r0, r0, #2
- adds r0, r0, r1
- ldrh r0, [r0]
- cmp r0, r3
- bhi _0801C5BE
- movs r2, #1
-_0801C5BE:
- movs r0, #0x70
- adds r1, r3, #0
- movs r3, #3
- bl sub_0801C5E0
- ldrb r0, [r4, #0xc]
- adds r4, r0, #1
-_0801C5CC:
- ldr r0, _0801C5D4 @ =gUnk_0200AF00
- strb r4, [r0, #0xc]
-_0801C5D0:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0801C5D4: .4byte gUnk_0200AF00
-_0801C5D8: .4byte gWalletSizes
-_0801C5DC: .4byte gSave
-
- thumb_func_start sub_0801C5E0
-sub_0801C5E0: @ 0x0801C5E0
- push {r4, r5, r6, r7, lr}
- adds r4, r0, #0
- adds r5, r1, #0
- ldr r7, _0801C650 @ =gUnk_085C4B20
- cmp r2, #0
- bne _0801C5F0
- ldr r0, _0801C654 @ =0xFFFFFD80
- adds r7, r7, r0
-_0801C5F0:
- ldr r0, _0801C658 @ =0x000003FF
- ands r0, r4
- lsls r6, r0, #5
- ldr r0, _0801C65C @ =0x0600C000
- adds r4, r6, r0
- cmp r3, #2
- beq _0801C620
- cmp r3, #3
- bne _0801C63C
- adds r0, r5, #0
- movs r1, #0x64
- bl Div
- adds r5, r1, #0
- ldr r1, _0801C660 @ =0x040000D4
- lsls r0, r0, #6
- adds r0, r7, r0
- str r0, [r1]
- str r4, [r1, #4]
- ldr r0, _0801C664 @ =0x84000010
- str r0, [r1, #8]
- ldr r0, [r1, #8]
- ldr r0, _0801C668 @ =0x0600C040
- adds r4, r6, r0
-_0801C620:
- adds r0, r5, #0
- movs r1, #0xa
- bl Div
- adds r5, r1, #0
- ldr r1, _0801C660 @ =0x040000D4
- lsls r0, r0, #6
- adds r0, r7, r0
- str r0, [r1]
- str r4, [r1, #4]
- ldr r0, _0801C664 @ =0x84000010
- str r0, [r1, #8]
- ldr r0, [r1, #8]
- adds r4, #0x40
-_0801C63C:
- ldr r1, _0801C660 @ =0x040000D4
- lsls r0, r5, #6
- adds r0, r7, r0
- str r0, [r1]
- str r4, [r1, #4]
- ldr r0, _0801C664 @ =0x84000010
- str r0, [r1, #8]
- ldr r0, [r1, #8]
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801C650: .4byte gUnk_085C4B20
-_0801C654: .4byte 0xFFFFFD80
-_0801C658: .4byte 0x000003FF
-_0801C65C: .4byte 0x0600C000
-_0801C660: .4byte 0x040000D4
-_0801C664: .4byte 0x84000010
-_0801C668: .4byte 0x0600C040
-
- thumb_func_start sub_0801C66C
-sub_0801C66C: @ 0x0801C66C
- push {lr}
- ldr r1, _0801C6A4 @ =gUnk_0200AF00
- ldrb r0, [r1, #2]
- cmp r0, #0
- beq _0801C6A2
- movs r0, #0
- strb r0, [r1, #2]
- ldrb r0, [r1, #4]
- movs r2, #1
- cmp r0, #0x28
- bls _0801C684
- movs r2, #2
-_0801C684:
- ldr r0, _0801C6A8 @ =gUnk_02034CF0
- ldr r3, _0801C6AC @ =gScreen
- movs r1, #0
-_0801C68A:
- str r1, [r0]
- str r1, [r0, #4]
- str r1, [r0, #8]
- str r1, [r0, #0xc]
- str r1, [r0, #0x10]
- str r1, [r0, #0x14]
- adds r0, #0x40
- subs r2, #1
- cmp r2, #0
- bgt _0801C68A
- movs r0, #1
- strh r0, [r3, #0xe]
-_0801C6A2:
- pop {pc}
- .align 2, 0
-_0801C6A4: .4byte gUnk_0200AF00
-_0801C6A8: .4byte gUnk_02034CF0
-_0801C6AC: .4byte gScreen
-
- thumb_func_start sub_0801C6B0
-sub_0801C6B0: @ 0x0801C6B0
- push {r4, r5, r6, r7, lr}
- mov r7, r8
- push {r7}
- ldr r2, _0801C6CC @ =gUnk_0200AF00
- ldrb r1, [r2, #1]
- movs r0, #0x10
- ands r0, r1
- cmp r0, #0
- beq _0801C6D0
- bl sub_0801C824
- bl sub_0801C66C
- b _0801C802
- .align 2, 0
-_0801C6CC: .4byte gUnk_0200AF00
-_0801C6D0:
- ldr r5, _0801C6F8 @ =gSave
- adds r0, r5, #0
- adds r0, #0xab
- ldrb r0, [r0]
- lsrs r4, r0, #1
- ldrb r0, [r2, #4]
- cmp r4, r0
- beq _0801C6EA
- strb r4, [r2, #4]
- bl sub_0801C824
- bl sub_0801C66C
-_0801C6EA:
- adds r1, r5, #0
- adds r1, #0xaa
- ldrb r0, [r1]
- cmp r0, #1
- beq _0801C6FC
- lsrs r1, r0, #1
- b _0801C6FE
- .align 2, 0
-_0801C6F8: .4byte gSave
-_0801C6FC:
- movs r1, #1
-_0801C6FE:
- cmp r1, r4
- ble _0801C704
- adds r1, r4, #0
-_0801C704:
- movs r4, #0
- ldr r0, _0801C748 @ =gUnk_0200AF00
- ldrb r2, [r0, #3]
- adds r7, r0, #0
- cmp r1, r2
- beq _0801C718
- movs r4, #1
- cmp r1, r2
- ble _0801C718
- movs r4, #2
-_0801C718:
- cmp r4, #1
- beq _0801C750
- cmp r4, #2
- bne _0801C756
- ldrb r0, [r7, #5]
- adds r1, r0, #1
- strb r1, [r7, #5]
- lsls r0, r0, #0x18
- lsrs r1, r0, #0x18
- movs r0, #1
- ands r0, r1
- cmp r0, #0
- bne _0801C74C
- movs r0, #7
- ands r1, r0
- cmp r1, #0
- bne _0801C740
- movs r0, #0x71
- bl SoundReq
-_0801C740:
- ldrb r0, [r7, #3]
- adds r0, #1
- strb r0, [r7, #3]
- b _0801C75A
- .align 2, 0
-_0801C748: .4byte gUnk_0200AF00
-_0801C74C:
- movs r4, #0
- b _0801C75A
-_0801C750:
- ldrb r0, [r7, #3]
- subs r0, #1
- strb r0, [r7, #3]
-_0801C756:
- movs r0, #0
- strb r0, [r7, #5]
-_0801C75A:
- ldrb r0, [r7, #2]
- cmp r0, #0
- beq _0801C764
- cmp r4, #0
- beq _0801C802
-_0801C764:
- movs r0, #2
- strb r0, [r7, #2]
- ldrb r0, [r7, #3]
- lsrs r3, r0, #2
- cmp r3, #0xa
- ble _0801C77A
- movs r1, #0xa
- mov r8, r1
- adds r6, r3, #0
- subs r6, #0xa
- b _0801C77E
-_0801C77A:
- mov r8, r3
- movs r6, #0
-_0801C77E:
- ldrb r0, [r7, #4]
- lsrs r4, r0, #2
- adds r1, r4, #0
- cmp r4, #0xa
- ble _0801C78A
- movs r4, #0xa
-_0801C78A:
- adds r2, r1, #0
- subs r2, #0xa
- ldr r0, _0801C808 @ =gUnk_080C8F2C
- mov ip, r0
- cmp r2, #0
- ble _0801C7B8
- ldr r5, _0801C80C @ =gUnk_02034D30
- ldr r1, _0801C810 @ =0x0000F010
- adds r0, r1, #0
- strh r0, [r5]
- ldr r1, _0801C814 @ =0x040000D4
- movs r0, #0xa
- subs r0, r0, r6
- lsls r0, r0, #1
- add r0, ip
- str r0, [r1]
- adds r0, r5, #2
- str r0, [r1, #4]
- movs r0, #0x80
- lsls r0, r0, #0x18
- orrs r2, r0
- str r2, [r1, #8]
- ldr r0, [r1, #8]
-_0801C7B8:
- ldr r5, _0801C818 @ =gUnk_02034CF0
- ldr r2, _0801C810 @ =0x0000F010
- adds r0, r2, #0
- strh r0, [r5]
- ldr r1, _0801C814 @ =0x040000D4
- movs r0, #0xa
- mov r2, r8
- subs r0, r0, r2
- lsls r0, r0, #1
- add r0, ip
- str r0, [r1]
- adds r0, r5, #2
- str r0, [r1, #4]
- movs r0, #0x80
- lsls r0, r0, #0x18
- orrs r4, r0
- str r4, [r1, #8]
- ldr r0, [r1, #8]
- ldrb r0, [r7, #3]
- movs r1, #3
- ands r1, r0
- cmp r1, #0
- beq _0801C7FC
- cmp r3, #9
- ble _0801C7EE
- subs r3, #0xa
- adds r5, #0x40
-_0801C7EE:
- lsls r0, r3, #1
- adds r0, r0, r5
- adds r1, #0x11
- ldr r3, _0801C81C @ =0xFFFFF000
- adds r2, r3, #0
- orrs r1, r2
- strh r1, [r0, #2]
-_0801C7FC:
- ldr r1, _0801C820 @ =gScreen
- movs r0, #1
- strh r0, [r1, #0xe]
-_0801C802:
- pop {r3}
- mov r8, r3
- pop {r4, r5, r6, r7, pc}
- .align 2, 0
-_0801C808: .4byte gUnk_080C8F2C
-_0801C80C: .4byte gUnk_02034D30
-_0801C810: .4byte 0x0000F010
-_0801C814: .4byte 0x040000D4
-_0801C818: .4byte gUnk_02034CF0
-_0801C81C: .4byte 0xFFFFF000
-_0801C820: .4byte gScreen
-
- thumb_func_start sub_0801C824
-sub_0801C824: @ 0x0801C824
- push {lr}
- ldr r1, _0801C850 @ =gUnk_0200AF00
- ldrb r0, [r1, #6]
- cmp r0, #0
- beq _0801C84E
- movs r2, #0
- strb r2, [r1, #6]
- ldrb r0, [r1, #4]
- ldr r1, _0801C854 @ =gUnk_02034D30
- cmp r0, #0x28
- bls _0801C83C
- adds r1, #0x40
-_0801C83C:
- str r2, [r1]
- str r2, [r1, #4]
- str r2, [r1, #8]
- str r2, [r1, #0xc]
- str r2, [r1, #0x10]
- str r2, [r1, #0x14]
- ldr r1, _0801C858 @ =gScreen
- movs r0, #1
- strh r0, [r1, #0xe]
-_0801C84E:
- pop {pc}
- .align 2, 0
-_0801C850: .4byte gUnk_0200AF00
-_0801C854: .4byte gUnk_02034D30
-_0801C858: .4byte gScreen
-
- thumb_func_start sub_0801C85C
-sub_0801C85C: @ 0x0801C85C
- push {r4, r5, r6, lr}
- movs r2, #0
- ldr r5, _0801C884 @ =gUnk_0200AF00
- ldrb r1, [r5, #1]
- movs r0, #0x20
- ands r0, r1
- cmp r0, #0
- bne _0801C878
- ldr r0, _0801C888 @ =gPlayerState
- adds r0, #0xa0
- ldrb r1, [r0]
- rsbs r0, r1, #0
- orrs r0, r1
- lsrs r2, r0, #0x1f
-_0801C878:
- cmp r2, #0
- bne _0801C88C
- bl sub_0801C824
- b _0801C984
- .align 2, 0
-_0801C884: .4byte gUnk_0200AF00
-_0801C888: .4byte gPlayerState
-_0801C88C:
- ldrb r0, [r5, #4]
- ldr r4, _0801C92C @ =gUnk_02034D30
- cmp r0, #0x28
- bls _0801C896
- adds r4, #0x40
-_0801C896:
- ldr r0, _0801C930 @ =gPlayerState
- adds r0, #0xa4
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r0, #0x13
- movs r1, #0x14
- bl Div
- adds r1, r0, #0
- cmp r1, #0x28
- bls _0801C8AE
- movs r1, #0x28
-_0801C8AE:
- ldrb r0, [r5, #6]
- cmp r0, #0
- beq _0801C8BA
- ldrb r0, [r5, #7]
- cmp r0, r1
- beq _0801C910
-_0801C8BA:
- movs r6, #1
- strb r6, [r5, #6]
- strb r1, [r5, #7]
- adds r0, r1, #0
- movs r1, #4
- bl Div
- adds r3, r0, #0
- adds r5, r1, #0
- ldr r1, _0801C934 @ =0x0000F016
- adds r0, r1, #0
- strh r0, [r4]
- ldr r1, _0801C938 @ =0x0000F416
- adds r0, r1, #0
- strh r0, [r4, #0x16]
- ldr r2, _0801C93C @ =0x040000D4
- movs r0, #0xa
- subs r0, r0, r3
- lsls r0, r0, #1
- ldr r1, _0801C940 @ =gUnk_080C8F54
- adds r0, r0, r1
- str r0, [r2]
- adds r0, r4, #2
- str r0, [r2, #4]
- ldr r0, _0801C944 @ =0x8000000A
- str r0, [r2, #8]
- ldr r0, [r2, #8]
- cmp r5, #0
- beq _0801C90C
- lsls r2, r3, #1
- adds r2, r2, r4
- adds r0, r5, #0
- adds r0, #0x17
- ldr r3, _0801C948 @ =0x000003FF
- adds r1, r3, #0
- ands r0, r1
- movs r3, #0xf0
- lsls r3, r3, #8
- adds r1, r3, #0
- orrs r0, r1
- strh r0, [r2, #2]
-_0801C90C:
- ldr r0, _0801C94C @ =gScreen
- strh r6, [r0, #0xe]
-_0801C910:
- ldr r0, _0801C930 @ =gPlayerState
- adds r0, #0xa0
- ldrb r0, [r0]
- cmp r0, #5
- bgt _0801C962
- cmp r0, #4
- blt _0801C962
- ldr r2, _0801C950 @ =gUnk_0200AF00
- ldrb r1, [r2, #9]
- adds r4, r2, #0
- cmp r0, #4
- bne _0801C954
- adds r0, r1, #2
- b _0801C956
- .align 2, 0
-_0801C92C: .4byte gUnk_02034D30
-_0801C930: .4byte gPlayerState
-_0801C934: .4byte 0x0000F016
-_0801C938: .4byte 0x0000F416
-_0801C93C: .4byte 0x040000D4
-_0801C940: .4byte gUnk_080C8F54
-_0801C944: .4byte 0x8000000A
-_0801C948: .4byte 0x000003FF
-_0801C94C: .4byte gScreen
-_0801C950: .4byte gUnk_0200AF00
-_0801C954:
- adds r0, r1, #1
-_0801C956:
- strb r0, [r2, #9]
- ldrb r0, [r4, #9]
- lsrs r3, r0, #4
- movs r0, #3
- ands r3, r0
- b _0801C966
-_0801C962:
- movs r3, #0
- ldr r4, _0801C988 @ =gUnk_0200AF00
-_0801C966:
- ldrb r0, [r4, #8]
- cmp r3, r0
- beq _0801C984
- strb r3, [r4, #8]
- ldr r4, _0801C98C @ =0x0600C2C0
- ldr r1, _0801C990 @ =0x040000D4
- ldr r2, _0801C994 @ =gUnk_080C8F7C
- lsls r0, r3, #2
- adds r0, r0, r2
- ldr r0, [r0]
- str r0, [r1]
- str r4, [r1, #4]
- ldr r0, _0801C998 @ =0x84000030
- str r0, [r1, #8]
- ldr r0, [r1, #8]
-_0801C984:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0801C988: .4byte gUnk_0200AF00
-_0801C98C: .4byte 0x0600C2C0
-_0801C990: .4byte 0x040000D4
-_0801C994: .4byte gUnk_080C8F7C
-_0801C998: .4byte 0x84000030
-
- thumb_func_start sub_0801C99C
-sub_0801C99C: @ 0x0801C99C
- push {r4, r5, lr}
- ldr r4, _0801C9E0 @ =gUnk_0200AF00
- ldrb r1, [r4, #1]
- movs r0, #0x80
- ands r0, r1
- cmp r0, #0
- bne _0801C9B2
- bl AreaHasKeys
- cmp r0, #0
- bne _0801C9EC
-_0801C9B2:
- ldrb r0, [r4, #0x10]
- cmp r0, #0
- beq _0801CA50
- movs r0, #0
- strb r0, [r4, #0x10]
- ldr r2, _0801C9E4 @ =gUnk_020350E2
- strh r0, [r2]
- strh r0, [r2, #2]
- strh r0, [r2, #4]
- strh r0, [r2, #6]
- adds r1, r2, #0
- adds r1, #0x40
- strh r0, [r1]
- adds r1, #2
- strh r0, [r1]
- adds r1, #2
- strh r0, [r1]
- adds r1, #2
- strh r0, [r1]
- ldr r1, _0801C9E8 @ =gScreen
- movs r0, #1
- strh r0, [r1, #0xe]
- b _0801CA50
- .align 2, 0
-_0801C9E0: .4byte gUnk_0200AF00
-_0801C9E4: .4byte gUnk_020350E2
-_0801C9E8: .4byte gScreen
-_0801C9EC:
- ldrb r0, [r4, #0x10]
- cmp r0, #0
- bne _0801CA1E
- ldr r2, _0801CA54 @ =gUnk_020350E2
- adds r1, r2, #0
- adds r1, #0x40
- ldr r3, _0801CA58 @ =0x0000F01C
- strh r3, [r2]
- adds r0, r3, #1
- strh r0, [r2, #2]
- adds r0, r3, #2
- strh r0, [r1]
- adds r0, r3, #3
- strh r0, [r1, #2]
- adds r3, #0x5a
- strh r3, [r2, #4]
- adds r0, r3, #1
- strh r0, [r1, #4]
- adds r0, r3, #2
- strh r0, [r2, #6]
- adds r0, r3, #3
- strh r0, [r1, #6]
- ldr r1, _0801CA5C @ =gScreen
- movs r0, #1
- strh r0, [r1, #0xe]
-_0801CA1E:
- ldr r0, _0801CA60 @ =gSave
- ldr r3, _0801CA64 @ =gArea
- ldrb r1, [r3, #3]
- ldr r5, _0801CA68 @ =0x0000045C
- adds r2, r0, r5
- adds r1, r1, r2
- ldrb r0, [r4, #0x12]
- ldrb r1, [r1]
- cmp r0, r1
- bne _0801CA38
- ldrb r0, [r4, #0x10]
- cmp r0, #0
- bne _0801CA50
-_0801CA38:
- movs r0, #2
- strb r0, [r4, #0x10]
- ldrb r0, [r3, #3]
- adds r0, r0, r2
- ldrb r0, [r0]
- strb r0, [r4, #0x12]
- ldrb r1, [r4, #0x12]
- movs r0, #0x76
- movs r2, #0
- movs r3, #2
- bl sub_0801C5E0
-_0801CA50:
- pop {r4, r5, pc}
- .align 2, 0
-_0801CA54: .4byte gUnk_020350E2
-_0801CA58: .4byte 0x0000F01C
-_0801CA5C: .4byte gScreen
-_0801CA60: .4byte gSave
-_0801CA64: .4byte gArea
-_0801CA68: .4byte 0x0000045C
-
- thumb_func_start sub_0801CA6C
-sub_0801CA6C: @ 0x0801CA6C
- push {r4, r5, r6, r7, lr}
- adds r5, r0, #0
- adds r6, r1, #0
- movs r3, #0
- ldr r7, _0801CAA8 @ =gUnk_0200AF34
- movs r0, #1
- mov ip, r0
- ldr r1, _0801CAAC @ =gUnk_080C8F8C
- lsls r0, r5, #4
- adds r4, r0, r1
-_0801CA80:
- lsls r0, r3, #5
- adds r1, r0, r7
- ldrb r2, [r1]
- movs r0, #1
- ands r0, r2
- cmp r0, #0
- bne _0801CAB0
- strb r5, [r1, #1]
- strb r6, [r1, #2]
- movs r0, #0xff
- strb r0, [r1, #0x10]
- mov r0, ip
- orrs r0, r2
- strb r0, [r1]
- ldrh r0, [r4, #4]
- strh r0, [r1, #0x1a]
- ldrb r0, [r4, #0xc]
- strb r0, [r1, #3]
- b _0801CAB6
- .align 2, 0
-_0801CAA8: .4byte gUnk_0200AF34
-_0801CAAC: .4byte gUnk_080C8F8C
-_0801CAB0:
- adds r3, #1
- cmp r3, #0x17
- bls _0801CA80
-_0801CAB6:
- pop {r4, r5, r6, r7, pc}
-
- thumb_func_start sub_0801CAB8
-sub_0801CAB8: @ 0x0801CAB8
- push {lr}
- str r1, [r0, #0x14]
- ldrb r2, [r1, #1]
- strb r2, [r0, #0x11]
- ldrb r2, [r1, #2]
- strb r2, [r0, #0x12]
- ldrb r2, [r1, #3]
- strb r2, [r0, #0x13]
- ldrb r1, [r1]
- bl sub_0801CAFC
- pop {pc}
-
- thumb_func_start sub_0801CAD0
-sub_0801CAD0: @ 0x0801CAD0
- push {lr}
- adds r2, r0, #0
- ldrb r0, [r2, #0x11]
- subs r0, #1
- strb r0, [r2, #0x11]
- lsls r0, r0, #0x18
- cmp r0, #0
- bne _0801CAF8
- ldr r1, [r2, #0x14]
- movs r0, #3
- ldrsb r0, [r1, r0]
- cmp r0, #0
- bge _0801CAF0
- ldrb r0, [r1, #4]
- lsls r0, r0, #2
- subs r1, r1, r0
-_0801CAF0:
- adds r1, #4
- adds r0, r2, #0
- bl sub_0801CAB8
-_0801CAF8:
- pop {pc}
- .align 2, 0
-
- thumb_func_start sub_0801CAFC
-sub_0801CAFC: @ 0x0801CAFC
- push {lr}
- adds r2, r0, #0
- adds r3, r1, #0
- ldrb r0, [r2, #1]
- lsls r0, r0, #4
- ldr r1, _0801CB1C @ =gUnk_080C8F8C
- adds r1, r0, r1
- ldrb r0, [r2, #0x10]
- cmp r3, r0
- beq _0801CB18
- strb r3, [r2, #0x10]
- adds r0, r2, #0
- bl sub_0801CB20
-_0801CB18:
- pop {pc}
- .align 2, 0
-_0801CB1C: .4byte gUnk_080C8F8C
-
- thumb_func_start sub_0801CB20
-sub_0801CB20: @ 0x0801CB20
- push {lr}
- adds r3, r0, #0
- ldrb r0, [r1, #0xe]
- cmp r0, #0
- bne _0801CB76
- ldrh r1, [r1, #6]
- lsls r1, r1, #4
- ldr r0, _0801CB54 @ =gSpritePtrs
- adds r1, r1, r0
- ldrb r0, [r3, #0x10]
- lsls r0, r0, #2
- ldr r2, [r1, #4]
- adds r2, r2, r0
- ldrh r0, [r2, #2]
- lsls r0, r0, #5
- ldr r1, [r1, #8]
- adds r1, r1, r0
- ldrb r2, [r2]
- cmp r2, #0
- bne _0801CB58
- ldrb r1, [r3]
- movs r0, #0xd
- rsbs r0, r0, #0
- ands r0, r1
- strb r0, [r3]
- b _0801CB74
- .align 2, 0
-_0801CB54: .4byte gSpritePtrs
-_0801CB58:
- ldrb r0, [r3, #0x19]
- cmp r0, r2
- bne _0801CB64
- ldr r0, [r3, #0x1c]
- cmp r0, r1
- beq _0801CB74
-_0801CB64:
- str r1, [r3, #0x1c]
- ldrb r0, [r3]
- movs r1, #0xd
- rsbs r1, r1, #0
- ands r1, r0
- movs r0, #4
- orrs r1, r0
- strb r1, [r3]
-_0801CB74:
- strb r2, [r3, #0x19]
-_0801CB76:
- pop {pc}
-
- thumb_func_start sub_0801CB78
-sub_0801CB78: @ 0x0801CB78
- push {lr}
- ldr r2, _0801CB8C @ =gUnk_080C903C
- ldrb r1, [r0, #4]
- lsls r1, r1, #2
- adds r1, r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {pc}
- .align 2, 0
-_0801CB8C: .4byte gUnk_080C903C
-
- thumb_func_start sub_0801CB90
-sub_0801CB90: @ 0x0801CB90
- push {lr}
- ldr r3, _0801CBC4 @ =gUnk_0200AF00
- ldrb r1, [r0, #1]
- lsls r1, r1, #1
- adds r2, r3, #0
- adds r2, #0x16
- adds r1, r1, r2
- ldrh r1, [r1]
- strh r1, [r0, #0xc]
- ldrb r1, [r0, #1]
- lsls r1, r1, #1
- adds r3, #0x1c
- adds r1, r1, r3
- ldrh r1, [r1]
- subs r1, #0x20
- strh r1, [r0, #0xe]
- movs r1, #1
- strb r1, [r0, #4]
- ldrb r1, [r0]
- movs r2, #2
- orrs r1, r2
- strb r1, [r0]
- ldrb r1, [r0, #1]
- bl sub_0801CAFC
- pop {pc}
- .align 2, 0
-_0801CBC4: .4byte gUnk_0200AF00
-
- thumb_func_start sub_0801CBC8
-sub_0801CBC8: @ 0x0801CBC8
- push {r4, r5, r6, lr}
- adds r5, r0, #0
- ldrb r0, [r5, #2]
- movs r6, #8
- cmp r0, #0
- bne _0801CC10
- movs r6, #4
- cmp r0, #0
- bne _0801CC10
- ldr r3, _0801CC08 @ =gUnk_0200AF00
- ldrb r0, [r3, #1]
- ldrb r2, [r5, #1]
- asrs r0, r2
- movs r1, #1
- ands r0, r1
- cmp r0, #0
- bne _0801CBF6
- ldr r0, _0801CC0C @ =gMessage
- ldrb r1, [r0]
- movs r0, #0x7f
- ands r0, r1
- cmp r0, #0
- beq _0801CC10
-_0801CBF6:
- lsls r0, r2, #1
- adds r1, r3, #0
- adds r1, #0x1c
- adds r0, r0, r1
- movs r1, #0
- ldrsh r0, [r0, r1]
- adds r1, r0, #0
- subs r1, #0x28
- b _0801CC1E
- .align 2, 0
-_0801CC08: .4byte gUnk_0200AF00
-_0801CC0C: .4byte gMessage
-_0801CC10:
- ldr r1, _0801CC7C @ =gUnk_0200AF00
- ldrb r0, [r5, #1]
- lsls r0, r0, #1
- adds r1, #0x1c
- adds r0, r0, r1
- movs r2, #0
- ldrsh r1, [r0, r2]
-_0801CC1E:
- movs r2, #0xe
- ldrsh r0, [r5, r2]
- subs r4, r1, r0
- adds r1, r4, #0
- cmp r4, #0
- bge _0801CC2C
- rsbs r4, r4, #0
-_0801CC2C:
- cmp r6, r4
- bgt _0801CC32
- adds r4, r6, #0
-_0801CC32:
- adds r0, r1, #0
- bl sub_08000E44
- muls r4, r0, r4
- cmp r4, #0
- beq _0801CC44
- ldrh r0, [r5, #0xe]
- adds r0, r0, r4
- strh r0, [r5, #0xe]
-_0801CC44:
- ldr r0, _0801CC7C @ =gUnk_0200AF00
- ldrb r1, [r5, #1]
- lsls r1, r1, #1
- adds r0, #0x16
- adds r1, r1, r0
- movs r0, #0
- ldrsh r1, [r1, r0]
- movs r2, #0xc
- ldrsh r0, [r5, r2]
- subs r4, r1, r0
- adds r1, r4, #0
- cmp r4, #0
- bge _0801CC60
- rsbs r4, r4, #0
-_0801CC60:
- cmp r6, r4
- bgt _0801CC66
- adds r4, r6, #0
-_0801CC66:
- adds r0, r1, #0
- bl sub_08000E44
- muls r4, r0, r4
- cmp r4, #0
- beq _0801CC78
- ldrh r0, [r5, #0xc]
- adds r0, r0, r4
- strh r0, [r5, #0xc]
-_0801CC78:
- pop {r4, r5, r6, pc}
- .align 2, 0
-_0801CC7C: .4byte gUnk_0200AF00
-
- thumb_func_start sub_0801CC80
-sub_0801CC80: @ 0x0801CC80
- push {r4, r5, lr}
- ldrb r1, [r0, #1]
- movs r0, #3
- eors r1, r0
- rsbs r0, r1, #0
- orrs r0, r1
- lsrs r0, r0, #0x1f
- ldr r5, _0801CCAC @ =gSave
- adds r1, r5, #0
- adds r1, #0xb4
- adds r0, r0, r1
- ldrb r4, [r0]
- adds r0, r4, #0
- bl ItemIsBottle
- cmp r0, #0
- beq _0801CCA8
- adds r0, r5, r4
- adds r0, #0x9a
- ldrb r4, [r0]
-_0801CCA8:
- adds r0, r4, #0
- pop {r4, r5, pc}
- .align 2, 0
-_0801CCAC: .4byte gSave
-
- thumb_func_start sub_0801CCB0
-sub_0801CCB0: @ 0x0801CCB0
- push {r4, r5, r6, lr}
- adds r4, r0, #0
- ldrb r1, [r4]
- movs r0, #3
- rsbs r0, r0, #0
- ands r0, r1
- strb r0, [r4]
- adds r0, r4, #0
- bl sub_0801CC80
- adds r1, r0, #0
- cmp r1, #0
- beq _0801CD90
- ldrb r0, [r4, #8]
- cmp r0, r1
- beq _0801CCE0
- strb r1, [r4, #8]
- ldr r0, _0801CD1C @ =gSpriteAnimations_322
- lsls r1, r1, #2
- adds r1, r1, r0
- ldr r1, [r1]
- adds r0, r4, #0
- bl sub_0801CAB8
-_0801CCE0:
- ldrb r0, [r4, #1]
- movs r1, #3
- eors r0, r1
- rsbs r1, r0, #0
- orrs r1, r0
- lsrs r6, r1, #0x1f
- ldr r3, _0801CD20 @ =gUnk_0200AF13
- cmp r6, #0
- beq _0801CCF4
- adds r3, #1
-_0801CCF4:
- ldrb r0, [r4, #8]
- cmp r0, #7
- blt _0801CD60
- cmp r0, #8
- ble _0801CD28
- cmp r0, #0xa
- bgt _0801CD60
- ldr r1, _0801CD24 @ =gSave
- adds r0, r1, #0
- adds r0, #0xad
- ldrb r2, [r0]
- ldrb r0, [r3]
- adds r5, r1, #0
- cmp r0, r2
- beq _0801CD4C
- adds r0, r2, #0
- adds r0, #0x80
- strb r0, [r3]
- b _0801CD4C
- .align 2, 0
-_0801CD1C: .4byte gSpriteAnimations_322
-_0801CD20: .4byte gUnk_0200AF13
-_0801CD24: .4byte gSave
-_0801CD28:
- ldr r5, _0801CD44 @ =gSave
- adds r0, r5, #0
- adds r0, #0xac
- ldrb r2, [r0]
- ldrb r0, [r3]
- cmp r0, r2
- beq _0801CD3C
- adds r0, r2, #0
- adds r0, #0x80
- strb r0, [r3]
-_0801CD3C:
- ldr r1, _0801CD48 @ =gBombBagSizes
- adds r0, r5, #0
- adds r0, #0xae
- b _0801CD52
- .align 2, 0
-_0801CD44: .4byte gSave
-_0801CD48: .4byte gBombBagSizes
-_0801CD4C:
- ldr r1, _0801CD5C @ =gQuiverSizes
- adds r0, r5, #0
- adds r0, #0xaf
-_0801CD52:
- ldrb r0, [r0]
- adds r0, r0, r1
- ldrb r0, [r0]
- b _0801CD64
- .align 2, 0
-_0801CD5C: .4byte gQuiverSizes
-_0801CD60:
- movs r0, #1
- movs r2, #0
-_0801CD64:
- movs r1, #3
- cmp r0, r2
- bhi _0801CD6C
- movs r1, #4
-_0801CD6C:
- strb r1, [r4, #0x18]
- adds r0, r6, #0
- bl sub_0801CE24
- adds r1, r0, #0
- cmp r1, #0
- beq _0801CD90
- ldrh r0, [r1, #0xc]
- strh r0, [r4, #0xc]
- ldrh r0, [r1, #0xe]
- strh r0, [r4, #0xe]
- ldrb r0, [r4]
- movs r1, #2
- orrs r0, r1
- strb r0, [r4]
- adds r0, r4, #0
- bl sub_0801CAD0
-_0801CD90:
- pop {r4, r5, r6, pc}
- .align 2, 0
-
- thumb_func_start sub_0801CD94
-sub_0801CD94: @ 0x0801CD94
- push {r4, lr}
- adds r4, r0, #0
- ldrb r0, [r4, #2]
- ldr r1, _0801CDC0 @ =gUnk_0200AF00
- cmp r0, #9
- bne _0801CDD4
- adds r0, r1, #0
- adds r0, #0x2f
- ldrb r2, [r0]
- cmp r2, #0
- bne _0801CDCE
- ldr r0, _0801CDC4 @ =gArea
- ldrb r0, [r0, #0x18]
- cmp r0, #2
- beq _0801CDC8
- cmp r0, #3
- beq _0801CDCC
- adds r0, r1, #0
- adds r0, #0x2c
- ldrb r2, [r0]
- b _0801CDCE
- .align 2, 0
-_0801CDC0: .4byte gUnk_0200AF00
-_0801CDC4: .4byte gArea
-_0801CDC8:
- movs r2, #0xb
- b _0801CDCE
-_0801CDCC:
- movs r2, #0xa
-_0801CDCE:
- adds r0, r1, #0
- adds r0, #0x32
- strb r2, [r0]
-_0801CDD4:
- adds r0, r1, #0
- adds r0, #0x30
- ldrb r1, [r4, #3]
- adds r0, r0, r1
- ldrb r2, [r0]
- ldrb r1, [r4]
- movs r0, #3
- rsbs r0, r0, #0
- ands r0, r1
- strb r0, [r4]
- cmp r2, #0
- beq _0801CE1E
- ldr r1, _0801CE20 @ =gUnk_080C9044
- movs r0, #0x80
- lsls r0, r0, #0x12
- ldrb r0, [r0, #7]
- adds r0, r0, r1
- ldrb r0, [r0]
- adds r2, r2, r0
- adds r0, r4, #0
- adds r1, r2, #0
- bl sub_0801CAFC
- ldrb r0, [r4, #3]
- bl sub_0801CE24
- adds r1, r0, #0
- cmp r1, #0
- beq _0801CE1E
- ldrh r0, [r1, #0xc]
- strh r0, [r4, #0xc]
- ldrh r0, [r1, #0xe]
- strh r0, [r4, #0xe]
- ldrb r0, [r4]
- movs r1, #2
- orrs r0, r1
- strb r0, [r4]
-_0801CE1E:
- pop {r4, pc}
- .align 2, 0
-_0801CE20: .4byte gUnk_080C9044
-
- thumb_func_start sub_0801CE24
-sub_0801CE24: @ 0x0801CE24
- push {r4, r5, r6, lr}
- adds r5, r0, #0
- movs r4, #0
- movs r6, #1
- ldr r3, _0801CE44 @ =gUnk_0200AF34
- adds r2, r3, #0
-_0801CE30:
- ldrb r1, [r2]
- adds r0, r6, #0
- ands r0, r1
- cmp r0, #0
- beq _0801CE48
- ldrb r0, [r2, #1]
- cmp r5, r0
- bne _0801CE48
- adds r0, r3, #0
- b _0801CE54
- .align 2, 0
-_0801CE44: .4byte gUnk_0200AF34
-_0801CE48:
- adds r2, #0x20
- adds r3, #0x20
- adds r4, #1
- cmp r4, #0x17
- bls _0801CE30
- movs r0, #0
-_0801CE54:
- pop {r4, r5, r6, pc}
- .align 2, 0
-
- thumb_func_start sub_0801CE58
-sub_0801CE58: @ 0x0801CE58
- push {r4, lr}
- adds r3, r0, #0
- ldrb r0, [r3]
- movs r4, #3
- rsbs r4, r4, #0
- ands r4, r0
- strb r4, [r3]
- ldr r2, _0801CEB8 @ =gUnk_0200AF00
- ldrb r1, [r2, #1]
- movs r0, #0x10
- ands r0, r1
- cmp r0, #0
- bne _0801CEB4
- ldr r0, _0801CEBC @ =gMessage
- ldrb r1, [r0]
- movs r0, #0x7f
- ands r0, r1
- cmp r0, #0
- bne _0801CEB4
- ldrb r2, [r2, #3]
- cmp r2, #0
- beq _0801CEB4
- movs r0, #2
- adds r1, r4, #0
- orrs r1, r0
- strb r1, [r3]
- adds r0, r2, #3
- lsrs r0, r0, #2
- lsls r0, r0, #3
- adds r1, r0, #3
- movs r4, #0xc
- cmp r2, #0x28
- bls _0801CE9E
- movs r4, #0x14
- subs r1, #0x50
-_0801CE9E:
- strh r1, [r3, #0xc]
- strh r4, [r3, #0xe]
- movs r1, #3
- ands r1, r2
- cmp r1, #0
- bne _0801CEAC
- movs r1, #4
-_0801CEAC:
- adds r1, #0x71
- adds r0, r3, #0
- bl sub_0801CAFC
-_0801CEB4:
- pop {r4, pc}
- .align 2, 0
-_0801CEB8: .4byte gUnk_0200AF00
-_0801CEBC: .4byte gMessage
-
diff --git a/assets/assets.json b/assets/assets.json
index 788d7924..09cb8862 100644
--- a/assets/assets.json
+++ b/assets/assets.json
@@ -20988,7 +20988,7 @@
"size": 40
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_EU.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_EU.bin",
"variants": [
"EU"
],
@@ -20998,7 +20998,7 @@
"size": 8
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_1_USA-JP-DEMO_USA-DEMO_JP.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_1_USA-JP-DEMO_USA-DEMO_JP.bin",
"variants": [
"USA",
"JP",
@@ -21009,7 +21009,7 @@
"size": 8
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_2_EU.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_2_EU.bin",
"variants": [
"EU"
],
@@ -21019,7 +21019,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_3_USA-JP-DEMO_USA-DEMO_JP.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_3_USA-JP-DEMO_USA-DEMO_JP.bin",
"variants": [
"USA",
"JP",
@@ -21030,7 +21030,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_4_EU.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_4_EU.bin",
"variants": [
"EU"
],
@@ -21040,7 +21040,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_5_USA-JP-DEMO_USA-DEMO_JP.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_5_USA-JP-DEMO_USA-DEMO_JP.bin",
"variants": [
"USA",
"JP",
@@ -21051,7 +21051,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_6_EU.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_6_EU.bin",
"variants": [
"EU"
],
@@ -21061,7 +21061,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_7_USA-JP-DEMO_USA-DEMO_JP.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_7_USA-JP-DEMO_USA-DEMO_JP.bin",
"variants": [
"USA",
"JP",
@@ -21072,7 +21072,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_8_EU.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_8_EU.bin",
"variants": [
"EU"
],
@@ -21082,7 +21082,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_9_USA-JP-DEMO_USA-DEMO_JP.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_9_USA-JP-DEMO_USA-DEMO_JP.bin",
"variants": [
"USA",
"JP",
@@ -21093,7 +21093,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_10_EU.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_10_EU.bin",
"variants": [
"EU"
],
@@ -21103,7 +21103,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_11_USA-JP-DEMO_USA-DEMO_JP.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_11_USA-JP-DEMO_USA-DEMO_JP.bin",
"variants": [
"USA",
"JP",
@@ -21114,7 +21114,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_12_EU.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_12_EU.bin",
"variants": [
"EU"
],
@@ -21124,7 +21124,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_13_USA-JP-DEMO_USA-DEMO_JP.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_13_USA-JP-DEMO_USA-DEMO_JP.bin",
"variants": [
"USA",
"JP",
@@ -21135,7 +21135,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_14_EU.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_14_EU.bin",
"variants": [
"EU"
],
@@ -21145,7 +21145,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_15_USA-JP-DEMO_USA-DEMO_JP.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_15_USA-JP-DEMO_USA-DEMO_JP.bin",
"variants": [
"USA",
"JP",
@@ -21156,7 +21156,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_16_EU.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_16_EU.bin",
"variants": [
"EU"
],
@@ -21166,7 +21166,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_17_USA-JP-DEMO_USA-DEMO_JP.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_17_USA-JP-DEMO_USA-DEMO_JP.bin",
"variants": [
"USA",
"JP",
@@ -21177,7 +21177,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_18_EU.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_18_EU.bin",
"variants": [
"EU"
],
@@ -21187,7 +21187,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_19_USA-JP-DEMO_USA-DEMO_JP.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_19_USA-JP-DEMO_USA-DEMO_JP.bin",
"variants": [
"USA",
"JP",
@@ -21198,7 +21198,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_20_EU.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_20_EU.bin",
"variants": [
"EU"
],
@@ -21208,7 +21208,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_21_USA-JP-DEMO_USA-DEMO_JP.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_21_USA-JP-DEMO_USA-DEMO_JP.bin",
"variants": [
"USA",
"JP",
@@ -21219,7 +21219,7 @@
"size": 12
},
{
- "path": "data_080B7B74/gUnk_080C8F8C_22.bin",
+ "path": "data_080B7B74/gUIElementDefinitions_22.bin",
"start": 823352,
"size": 4
},
diff --git a/data/const/object/treeHidingPortal.s b/data/const/object/treeHidingPortal.s
deleted file mode 100644
index 8ad175aa..00000000
--- a/data/const/object/treeHidingPortal.s
+++ /dev/null
@@ -1,10 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2
-
-
-
-
-
diff --git a/data/data_080B7B74.s b/data/data_080B7B74.s
index fe27fb40..ae0f1c3c 100644
--- a/data/data_080B7B74.s
+++ b/data/data_080B7B74.s
@@ -6,14 +6,8 @@
gCollisionMtx:: @ 080B7B74
.incbin "data_080B7B74/gCollisionMtx.bin"
-
-gUnk_080B802E:: @ 080B802E
.incbin "data_080B7B74/gUnk_080B802E.bin"
-
-gUnk_080BA2C0:: @ 080BA2C0
.incbin "data_080B7B74/gUnk_080BA2C0.bin"
-
-gUnk_080BB2A0:: @ 080BB2A0
.ifdef EU
.incbin "data_080B7B74/gUnk_080B7B74_1_EU.bin"
.else
@@ -39,13 +33,15 @@ gUnk_080BB2A0:: @ 080BB2A0
.endif
.incbin "data_080B7B74/gUnk_080B7B74_9.bin"
+@ ui.c const
+
gUnk_080C8F2C:: @ 080C8F2C
.incbin "data_080B7B74/gUnk_080C8F2C.bin"
gUnk_080C8F54:: @ 080C8F54
.incbin "data_080B7B74/gUnk_080C8F54.bin"
-@ TODO this data is accessed using DMA in sub_0801C85C
+@ TODO this data is accessed using DMA in DrawChargeBar
gUnk_080C8F7C:: @ 080C8F7C
.4byte gUnk_data0_085C4DA0
.4byte gUnk_data1_085C4E60
@@ -53,97 +49,97 @@ gUnk_080C8F7C:: @ 080C8F7C
.4byte gUnk_data3_085C4FE0
-gUnk_080C8F8C:: @ 080C8F8C
+gUIElementDefinitions:: @ 080C8F8C
.ifdef EU
@ TODO only small differences
- .incbin "data_080B7B74/gUnk_080C8F8C_EU.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_EU.bin"
.else
- .incbin "data_080B7B74/gUnk_080C8F8C_1_USA-JP-DEMO_USA-DEMO_JP.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_1_USA-JP-DEMO_USA-DEMO_JP.bin"
.endif
- .4byte sub_0801CB78
+ .4byte ButtonUIElement
.ifdef EU
@ TODO only small differences
- .incbin "data_080B7B74/gUnk_080C8F8C_2_EU.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_2_EU.bin"
.else
- .incbin "data_080B7B74/gUnk_080C8F8C_3_USA-JP-DEMO_USA-DEMO_JP.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_3_USA-JP-DEMO_USA-DEMO_JP.bin"
.endif
- .4byte sub_0801CB78
+ .4byte ButtonUIElement
.ifdef EU
@ TODO only small differences
- .incbin "data_080B7B74/gUnk_080C8F8C_4_EU.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_4_EU.bin"
.else
- .incbin "data_080B7B74/gUnk_080C8F8C_5_USA-JP-DEMO_USA-DEMO_JP.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_5_USA-JP-DEMO_USA-DEMO_JP.bin"
.endif
- .4byte sub_0801CB78
+ .4byte ButtonUIElement
.ifdef EU
@ TODO only small differences
- .incbin "data_080B7B74/gUnk_080C8F8C_6_EU.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_6_EU.bin"
.else
- .incbin "data_080B7B74/gUnk_080C8F8C_7_USA-JP-DEMO_USA-DEMO_JP.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_7_USA-JP-DEMO_USA-DEMO_JP.bin"
.endif
- .4byte sub_0801CCB0
+ .4byte ItemUIElement
.ifdef EU
@ TODO only small differences
- .incbin "data_080B7B74/gUnk_080C8F8C_8_EU.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_8_EU.bin"
.else
- .incbin "data_080B7B74/gUnk_080C8F8C_9_USA-JP-DEMO_USA-DEMO_JP.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_9_USA-JP-DEMO_USA-DEMO_JP.bin"
.endif
- .4byte sub_0801CCB0
+ .4byte ItemUIElement
.ifdef EU
@ TODO only small differences
- .incbin "data_080B7B74/gUnk_080C8F8C_10_EU.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_10_EU.bin"
.else
- .incbin "data_080B7B74/gUnk_080C8F8C_11_USA-JP-DEMO_USA-DEMO_JP.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_11_USA-JP-DEMO_USA-DEMO_JP.bin"
.endif
- .4byte sub_0801CD94
+ .4byte TextUIElement
.ifdef EU
@ TODO only small differences
- .incbin "data_080B7B74/gUnk_080C8F8C_12_EU.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_12_EU.bin"
.else
- .incbin "data_080B7B74/gUnk_080C8F8C_13_USA-JP-DEMO_USA-DEMO_JP.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_13_USA-JP-DEMO_USA-DEMO_JP.bin"
.endif
- .4byte sub_0801CE58
+ .4byte HeartUIElement
.ifdef EU
@ TODO only small differences
- .incbin "data_080B7B74/gUnk_080C8F8C_14_EU.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_14_EU.bin"
.else
- .incbin "data_080B7B74/gUnk_080C8F8C_15_USA-JP-DEMO_USA-DEMO_JP.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_15_USA-JP-DEMO_USA-DEMO_JP.bin"
.endif
- .4byte EzloNag
+ .4byte EzloNagUIElement
.ifdef EU
@ TODO only small differences
- .incbin "data_080B7B74/gUnk_080C8F8C_16_EU.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_16_EU.bin"
.else
- .incbin "data_080B7B74/gUnk_080C8F8C_17_USA-JP-DEMO_USA-DEMO_JP.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_17_USA-JP-DEMO_USA-DEMO_JP.bin"
.endif
- .4byte EzloNag
+ .4byte EzloNagUIElement
.ifdef EU
@ TODO only small differences
- .incbin "data_080B7B74/gUnk_080C8F8C_18_EU.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_18_EU.bin"
.else
- .incbin "data_080B7B74/gUnk_080C8F8C_19_USA-JP-DEMO_USA-DEMO_JP.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_19_USA-JP-DEMO_USA-DEMO_JP.bin"
.endif
- .4byte sub_0801CD94
+ .4byte TextUIElement
.ifdef EU
@ TODO only small differences
- .incbin "data_080B7B74/gUnk_080C8F8C_20_EU.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_20_EU.bin"
.else
- .incbin "data_080B7B74/gUnk_080C8F8C_21_USA-JP-DEMO_USA-DEMO_JP.bin"
+ .incbin "data_080B7B74/gUIElementDefinitions_21_USA-JP-DEMO_USA-DEMO_JP.bin"
.endif
- .4byte sub_0801CD94
- .incbin "data_080B7B74/gUnk_080C8F8C_22.bin"
+ .4byte TextUIElement
+ .incbin "data_080B7B74/gUIElementDefinitions_22.bin"
-gUnk_080C903C:: @ 080C903C
- .4byte sub_0801CB90
- .4byte sub_0801CBC8
+ButtonUIElement_Actions:: @ 080C903C
+ .4byte ButtonUIElement_Action0
+ .4byte ButtonUIElement_Action1
gUnk_080C9044:: @ 080C9044
.incbin "data_080B7B74/gUnk_080C9044.bin"
-gUnk_080C904C:: @ 080C904C
- .4byte sub_0801CED8
- .4byte sub_0801CF18
- .4byte sub_0801CF60
+EzloNagUIElement_Actions:: @ 080C904C
+ .4byte EzloNagUIElement_Action0
+ .4byte EzloNagUIElement_Action1
+ .4byte EzloNagUIElement_Action2
gUnk_080C9058:: @ 080C9058
.incbin "data_080B7B74/gUnk_080C9058.bin"
diff --git a/include/functions.h b/include/functions.h
index 2ba07a82..b4e79f4d 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -28,9 +28,9 @@ extern Entity* CreatePlayerBomb(ItemBehavior*, u32);
extern u32 CreateRandomItemDrop(Entity*, u32);
extern void CreateSparkle(Entity*);
extern void DoPlayerAction(Entity*);
-extern void DrawDirect(u32, u32); // trampoline to sub_080B27F4
+extern void DrawDirect(u32, u32);
extern void DrawEntities(void);
-extern void DrawOAMCmd(void);
+extern void DrawUIElements(void);
extern void EnemyFunctionHandlerAfterCollision(Entity*, void (*const[])());
extern bool32 EntityWithinDistance(Entity*, s32, s32, s32);
extern void FlushSprites(void);
@@ -115,7 +115,7 @@ extern void sub_080171F0(void);
extern u32 sub_0801766C(Entity*);
extern void sub_0801AF18(const u8*, u32, u32);
extern void sub_0801AFE4(void);
-extern void sub_0801C1D4(void);
+extern void UpdateUIElements(void);
extern void sub_0801C25C(void);
extern void sub_0801E104(void);
extern void sub_08027870(Entity*);
diff --git a/include/structures.h b/include/structures.h
index b87b9672..12d15690 100644
--- a/include/structures.h
+++ b/include/structures.h
@@ -45,14 +45,87 @@ typedef struct {
} struct_020354C0;
extern struct_020354C0 gUnk_020354C0[0x20];
+#define MAX_UI_ELEMENTS 24
+
+typedef enum {
+ UI_ELEMENT_BUTTON_A,
+ UI_ELEMENT_BUTTON_B,
+ UI_ELEMENT_BUTTON_R,
+ UI_ELEMENT_ITEM_A,
+ UI_ELEMENT_ITEM_B,
+ UI_ELEMENT_TEXT_R,
+ UI_ELEMENT_HEART,
+ UI_ELEMENT_EZLONAGSTART,
+ UI_ELEMENT_EZLONAGACTIVE,
+ UI_ELEMENT_TEXT_A,
+ UI_ELEMENT_TEXT_B
+} UIElementType;
+
+/**
+ * @brief Floating UI element
+ */
+typedef struct {
+ u8 used : 1;
+ u8 unk_0_1 : 1;
+ u8 unk_0_2 : 2; // Load data into VRAM? 0: do not load, 1: ready to load 2: loaded
+ u8 unk_0_4 : 4;
+ u8 type; /**< @see UIElementType */
+ u8 type2; // Subtype
+ u8 buttonElementId; /**< Id of the button UI element this text is attached to */
+ u8 action;
+ u8 unk_5;
+ u8 unk_6;
+ u8 unk_7;
+ u8 unk_8;
+ u8 unk_9[3];
+ u16 x;
+ u16 y;
+ u8 frameIndex;
+ u8 duration;
+ u8 spriteSettings;
+ u8 frameSettings;
+ Frame* framePtr;
+ u8 unk_18;
+ u8 numTiles;
+ u16 unk_1a; // TODO oam id? VRAM target (element->unk_1a * 0x20 + 0x6010000)
+ u32* firstTile;
+} UIElement;
+
typedef struct {
- u8 filler0[0x1A];
- u16 rButtonX;
- u8 filler1C[0x4];
- u16 rButtonY;
+ u8 unk_0;
+ u8 unk_1;
+ u8 unk_2;
+ u8 health;
+ u8 maxHealth;
+ u8 unk_5;
+ u8 unk_6;
+ u8 unk_7;
+ u8 unk_8;
+ u8 unk_9;
+ u8 unk_a;
+ u8 unk_b;
+ u8 unk_c;
+ u8 unk_d;
+ u16 rupees;
+ u8 unk_10;
+ u8 unk_11;
+ u8 unk_12;
+ s8 unk_13;
+ s8 unk_14;
+ u8 unk_15;
+ u16 buttonX[3]; /**< X coordinates for the button UI elements */
+ u16 buttonY[3]; /**< Y coordinates for the button UI elements */
u8 filler22[0x2];
u8 ezloNagFuncIndex;
- u8 filler25[0x30F];
+ u8 filler25[7];
+ u8 unk_2c;
+ u8 unk_2d;
+ u8 unk_2e;
+ u8 unk_2f;
+ u8 unk_30[2];
+ u8 unk_32;
+ u8 unk_33;
+ UIElement elements[MAX_UI_ELEMENTS];
} struct_0200AF00;
extern struct_0200AF00 gUnk_0200AF00;
diff --git a/linker.ld b/linker.ld
index db53912b..ba05d901 100644
--- a/linker.ld
+++ b/linker.ld
@@ -244,10 +244,10 @@ SECTIONS {
. = 0x00005FBC; ram_sub_080B2248 = .;
. = 0x00005FF0; ram_sub_080B227C = .;
. = 0x000060F0; ram_CalcCollisionDirection = .;
- . = 0x00006164; ram_sub_080B23F0 = .;
+ . = 0x00006164; ram_DrawEntities = .;
#if defined(EU) || defined(DEMO_JP)
- . = 0x000065AC; ram_sub_080B280C = .;
- . = 0x000065C8; ram_sub_080B2828 = .;
+ . = 0x000065AC; ram_DrawDirect = .;
+ . = 0x000065C8; ram_sub_080ADA04 = .;
. = 0x0000689C; ram_sub_080B2088 = .;
. = 0x000068F0; ram_sub_080B20DC = .;
. = 0x00006954; ram_sub_080B2140 = .;
@@ -257,8 +257,8 @@ SECTIONS {
. = 0x00006B24; ram_0x80b2be8 = .; /* 0x80b2be8 */
. = 0x00006C14; gUnk_03006C14 = .;
#else
- . = 0x00006580; ram_sub_080B280C = .;
- . = 0x0000659C; ram_sub_080B2828 = .;
+ . = 0x00006580; ram_DrawDirect = .;
+ . = 0x0000659C; ram_sub_080ADA04 = .;
. = 0x000067E4; ram_gUnk_080B2A70 = .;
. = 0x000068CC; ram_0x80b2b58 = .; /* TODO 0x80b2b58 in unusedLabel_080B2AA8*/
. = 0x0000694C; ram_0x80b2bd8 = .; /* 0x80b2bd8 */
@@ -314,7 +314,6 @@ SECTIONS {
src/playerItem/playerItemC.o(.text);
src/playerItem/playerItemBottle.o(.text);
src/playerItem/playerItemCellOverwriteSet.o(.text);
- asm/ui.o(.text);
src/ui.o(.text);
src/color.o(.text);
src/common.o(.text);
diff --git a/src/affine.c b/src/affine.c
index 723c5e90..f0e2549b 100644
--- a/src/affine.c
+++ b/src/affine.c
@@ -6,9 +6,9 @@
extern u32 gFrameObjLists[];
-extern void ram_sub_080B23F0(void);
-extern void ram_sub_080B2828(OAMCommand*, void*);
-extern void ram_sub_080B280C(OAMCommand*, u32, u32);
+extern void ram_DrawEntities(void);
+extern void ram_sub_080ADA04(OAMCommand*, void*);
+extern void ram_DrawDirect(OAMCommand*, u32, u32);
// regalloc
NONMATCH("asm/non_matching/vram/sub_080AD8F0.inc", void* sub_080AD8F0(u32 sprite, u32 frame)) {
@@ -59,16 +59,17 @@ void DrawEntities(void) {
gOAMControls._4 = gRoomControls.aff_x + gRoomControls.scroll_x;
gOAMControls._6 = gRoomControls.aff_y + gRoomControls.scroll_y;
gOAMControls.field_0x1++;
- fn = &ram_sub_080B23F0;
+ fn = &ram_DrawEntities;
fn();
}
+// TODO second parameter is a frame obj entry from gFrameObjLists
void sub_080ADA04(OAMCommand* cmd, void* dst) {
- void (*fn)(OAMCommand*, void*) = ram_sub_080B2828;
+ void (*fn)(OAMCommand*, void*) = ram_sub_080ADA04;
fn(cmd, dst);
}
-void DrawDirect(u32 a1, u32 a2) {
- void (*fn)(OAMCommand*, u32, u32) = ram_sub_080B280C;
- fn(&gOamCmd, a1, a2);
+void DrawDirect(u32 spriteIndex, u32 frameIndex) {
+ void (*fn)(OAMCommand*, u32, u32) = ram_DrawDirect;
+ fn(&gOamCmd, spriteIndex, frameIndex);
}
diff --git a/src/fileselect.c b/src/fileselect.c
index 5545e3f7..93355380 100644
--- a/src/fileselect.c
+++ b/src/fileselect.c
@@ -185,8 +185,8 @@ void FileSelectTask(void) {
gMapDataBottomSpecial.isTransitioning = FALSE;
UpdateEntities();
sub_0805066C();
- sub_0801C1D4();
- DrawOAMCmd();
+ UpdateUIElements();
+ DrawUIElements();
DrawEntities();
CopyOAM();
if (gMapDataBottomSpecial.unk3 != gSaveHeader->language) {
@@ -346,13 +346,13 @@ void sub_08050790(void) {
}
static void HideButtonR(void) {
- gUnk_0200AF00.rButtonX = 0x140;
- gUnk_0200AF00.rButtonY = 0x24;
+ gUnk_0200AF00.buttonX[2] = 0x140;
+ gUnk_0200AF00.buttonY[2] = 0x24;
}
static void ShowButtonR(void) {
- gUnk_0200AF00.rButtonX = 0xD0;
- gUnk_0200AF00.rButtonY = 0x24;
+ gUnk_0200AF00.buttonX[2] = 0xD0;
+ gUnk_0200AF00.buttonY[2] = 0x24;
}
static void HandleFileSelect(void) {
diff --git a/src/game.c b/src/game.c
index c4ff4253..be7e224b 100644
--- a/src/game.c
+++ b/src/game.c
@@ -113,7 +113,7 @@ extern void UpdateScroll(void);
extern void UpdateBgAnim(void);
extern void CleanUpGFXSlots(void);
extern void sub_080ADE24(void);
-extern void InitUI(u32);
+extern void InitUI(bool32);
extern void sub_0801AE44(u32);
extern void GenerateAreaHint(void);
extern void ForceSetPlayerState(u32);
@@ -350,7 +350,7 @@ static void GameMain_InitRoom(void) {
gRoomTransition.field_0x4[1] = 0;
MessageInitialize();
InitRoom();
- InitUI(0);
+ InitUI(FALSE);
InitializeEntities();
#ifndef EU
sub_0801855C();
@@ -366,7 +366,7 @@ static void GameMain_ChangeRoom(void) {
DrawUI();
UpdateManagers();
FlushSprites();
- DrawOAMCmd();
+ DrawUIElements();
UpdateCarriedObject();
DrawEntities();
CopyOAM();
@@ -443,7 +443,7 @@ static void GameMain_Update(void) {
sub_08052C3C();
DrawUI();
UpdateManagers();
- DrawOAMCmd();
+ DrawUIElements();
UpdateCarriedObject();
DrawEntities();
CheckRoomExit();
@@ -476,7 +476,7 @@ static void GameMain_BarrelUpdate(void) {
DrawUI();
UpdateManagers();
FlushSprites();
- DrawOAMCmd();
+ DrawUIElements();
UpdateCarriedObject();
DrawEntities();
CheckRoomExit();
@@ -488,7 +488,7 @@ static void GameMain_BarrelUpdate(void) {
static void GameMain_ChangeArea(void) {
FlushSprites();
- DrawOAMCmd();
+ DrawUIElements();
DrawEntities();
gMain.pad = 1;
CopyOAM();
@@ -1151,7 +1151,7 @@ void RestoreGameTask(u32 a1) {
CleanUpGFXSlots();
#endif
sub_080ADE24();
- InitUI(1);
+ InitUI(TRUE);
sub_0801AE44(a1);
MemCopy(gUnk_02024090, gPaletteBuffer, 1024);
gUsedPalettes = 0xffffffff;
@@ -1302,7 +1302,7 @@ bool32 CanDispEzloMessage(void) {
s32 tmp = PL_STATE_WALK;
if (!(gInput.heldKeys & SELECT_BUTTON) || gPlayerState.controlMode != CONTROL_ENABLED || gUnk_02034490.unk0 ||
- gUnk_0200AF00.filler0[1])
+ gUnk_0200AF00.unk_1)
return 0;
if ((gPlayerState.flags & (PL_NO_CAP | 0x110)) || (gPlayerState.framestate_last > tmp) || gPlayerState.item ||
@@ -2291,8 +2291,8 @@ void ForceEquipItem(u32 itemID, u32 itemSlot) {
}
gSave.stats.itemButtons[itemSlot] = itemID;
gSave.stats.itemButtons[otherItemIndex] = otherItem;
- gUnk_0200AF00.filler0[0x13] = 0x7f;
- gUnk_0200AF00.filler0[0x14] = 0x7f;
+ gUnk_0200AF00.unk_13 = 0x7f;
+ gUnk_0200AF00.unk_14 = 0x7f;
}
}
diff --git a/src/interrupts.c b/src/interrupts.c
index e92e1ac6..5115c45a 100644
--- a/src/interrupts.c
+++ b/src/interrupts.c
@@ -227,9 +227,9 @@ void PlayerUpdate(Entity* this) {
void HandlePlayerLife(Entity* this) {
u32 temp;
- gUnk_0200AF00.filler25[10] = 0;
- gUnk_0200AF00.filler25[8] = 0;
- gUnk_0200AF00.filler25[9] = 0;
+ gUnk_0200AF00.unk_2f = 0;
+ gUnk_0200AF00.unk_2d = 0;
+ gUnk_0200AF00.unk_2e = 0;
if ((gPlayerEntity.bitfield & 0x80) && (gPlayerEntity.iframes > 0))
SoundReq(SFX_86);
@@ -257,7 +257,7 @@ void HandlePlayerLife(Entity* this) {
return;
#ifdef EU
- if ((gUnk_0200AF00.filler0[1] == 0) && gRoomTransition.frameCount % 90 == 0) {
+ if ((gUnk_0200AF00.unk_1 == 0) && gRoomTransition.frameCount % 90 == 0) {
temp = gSave.stats.maxHealth / 4;
if (temp > 24)
temp = 24;
@@ -278,7 +278,7 @@ void HandlePlayerLife(Entity* this) {
if (gSave.stats.health <= temp) {
gRoomVars.unk2 = 1;
- if ((gUnk_0200AF00.filler0[1] == 0) && gRoomTransition.frameCount % 90 == 0) {
+ if ((gUnk_0200AF00.unk_1 == 0) && gRoomTransition.frameCount % 90 == 0) {
EnqueueSFX(SFX_LOW_HEALTH);
}
}
@@ -325,7 +325,7 @@ void sub_080171F0(void) {
sub_080028E0(&gPlayerEntity);
if (gPlayerState.flags & PL_CLONING)
- gUnk_0200AF00.filler25[10] = 1;
+ gUnk_0200AF00.unk_2f = 1;
sub_08078180();
gPlayerState.field_0x7 &= ~0x80;
diff --git a/src/menu/figurine_menu.c b/src/menu/figurine_menu.c
index c545c316..9ac5b27f 100644
--- a/src/menu/figurine_menu.c
+++ b/src/menu/figurine_menu.c
@@ -84,8 +84,8 @@ void Subtask_FigurineMenu(void) {
figurineMenu1_Types[gMenu.menuType]();
}
UpdateEntities();
- sub_0801C1D4();
- DrawOAMCmd();
+ UpdateUIElements();
+ DrawUIElements();
DrawEntities();
FigurineMenu_080A4978();
CopyOAM();
@@ -598,7 +598,7 @@ void sub_080A4DB8(u32 param_1) {
MemClear(&gBG0Buffer, 0x800);
MemClear(&gBG1Buffer, 0x800);
MemClear(&gBG2Buffer, 0x800);
- MemClear(gUnk_0200AF00.filler25 + 0xf, 0x300);
+ MemClear(gUnk_0200AF00.elements, sizeof(gUnk_0200AF00.elements));
MemClear(&gFigurineMenu, sizeof(gFigurineMenu));
gFigurineMenu.unk2e = 0xffff;
gMenu.field_0x3 = gUnk_02034490.unk2[param_1];
diff --git a/src/menu/kinstone_menu.c b/src/menu/kinstone_menu.c
index 9870e9fe..45850f4d 100644
--- a/src/menu/kinstone_menu.c
+++ b/src/menu/kinstone_menu.c
@@ -85,8 +85,8 @@ void Subtask_KinstoneMenu(void) {
kinstoneMenuTypes[gMenu.menuType]();
sub_080A3B74();
KinstoneMenu_080A4054();
- sub_0801C1D4();
- DrawOAMCmd();
+ UpdateUIElements();
+ DrawUIElements();
UpdateEntities();
DrawEntities();
CopyOAM();
diff --git a/src/menu/pause_menu.c b/src/menu/pause_menu.c
index 88e573b2..4bd0a4fc 100644
--- a/src/menu/pause_menu.c
+++ b/src/menu/pause_menu.c
@@ -38,8 +38,8 @@ void Subtask_PauseMenu(void) {
FlushSprites();
pauseMenu_Variants[gUnk_02034490.unk11]();
sub_080A5128();
- sub_0801C1D4();
- DrawOAMCmd();
+ UpdateUIElements();
+ DrawUIElements();
if (gUnk_02034490.unk11 != 4) {
gUnk_08128A38[gUnk_02034490.unk1].func();
}
diff --git a/src/object/crenelBeanSprout.c b/src/object/crenelBeanSprout.c
index 39af67c9..13652224 100644
--- a/src/object/crenelBeanSprout.c
+++ b/src/object/crenelBeanSprout.c
@@ -172,9 +172,9 @@ void CrenelBeanSprout_Action1(CrenelBeanSproutEntity* this) {
this->unk_70 = ((super->x.HALF.HI + (s8)gUnk_08123184[tmp]) & -0x10) | 8;
this->unk_72 = ((super->y.HALF.HI + (s8)gUnk_08123184[(tmp) + 1]) & -0x10) | 8;
if (sub_080B1AB4(this->unk_70, this->unk_72, super->collisionLayer) == 0x19) {
- gUnk_0200AF00.filler25[10] = 3;
+ gUnk_0200AF00.unk_2f = 3;
} else {
- gUnk_0200AF00.filler25[10] = 0;
+ gUnk_0200AF00.unk_2f = 0;
}
PositionRelative(&gPlayerEntity, super, 0, 0x10000);
if (sub_080B1AA8(super) == 0x19) {
@@ -184,7 +184,7 @@ void CrenelBeanSprout_Action1(CrenelBeanSproutEntity* this) {
if ((gPlayerState.field_0x92 & 0xc0) == 0) {
return;
}
- if (gUnk_0200AF00.filler25[10] != 3) {
+ if (gUnk_0200AF00.unk_2f != 3) {
return;
}
gPlayerState.heldObject = 0;
diff --git a/src/object/itemForSale.c b/src/object/itemForSale.c
index a89ec4d4..85f6326d 100644
--- a/src/object/itemForSale.c
+++ b/src/object/itemForSale.c
@@ -85,7 +85,7 @@ void ItemForSale_Init(ItemForSaleEntity* this) {
void ItemForSale_Action1(ItemForSaleEntity* this) {
if (super->subAction != 0) {
super->action = 2;
- gUnk_0200AF00.filler25[10] = 2;
+ gUnk_0200AF00.unk_2f = 2;
} else {
if (super->type == 0x36) {
if (super->interactType != 0) {
@@ -102,7 +102,7 @@ void ItemForSale_Action1(ItemForSaleEntity* this) {
ResetPlayer();
gPlayerState.heldObject = 4;
gNewPlayerEntity.unk_74 = super;
- gUnk_0200AF00.filler25[10] = 2;
+ gUnk_0200AF00.unk_2f = 2;
MessageClose();
}
}
@@ -112,14 +112,14 @@ void ItemForSale_Action1(ItemForSaleEntity* this) {
void ItemForSale_Action2(ItemForSaleEntity* this) {
void* ptr;
- gUnk_0200AF00.filler25[10] = 2;
+ gUnk_0200AF00.unk_2f = 2;
super->spriteSettings.draw = gPlayerEntity.spriteSettings.draw;
if ((gPlayerState.heldObject == 0) || (super != gNewPlayerEntity.unk_74)) {
sub_080819B4(this);
} else {
ptr = sub_080784E4();
if (((*(int*)(ptr + 8) == 0) ||
- ((*(u8*)(ptr + 1) != 1 || (gUnk_0200AF00.filler25[10] = 7, (gPlayerState.field_0x92 & 0x88) == 0)))) &&
+ ((*(u8*)(ptr + 1) != 1 || (gUnk_0200AF00.unk_2f = 7, (gPlayerState.field_0x92 & 0x88) == 0)))) &&
((gPlayerState.field_0x92 & 0x98) != 0)) {
sub_080819B4(this);
}
@@ -141,8 +141,8 @@ void sub_080819B4(ItemForSaleEntity* this) {
gNewPlayerEntity.unk_74 = 0;
ptr = &gUnk_0200AF00;
gRoomVars.shopItemType = 0;
- ptr->filler25[7] = 0;
- ptr->filler25[10] = 0;
+ ptr->unk_2c = 0;
+ ptr->unk_2f = 0;
gRoomVars.shopItemType2 = 0;
super->x.HALF.HI = this->unk_80 + gRoomControls.origin_x;
super->y.HALF.HI = this->unk_82 + gRoomControls.origin_y;
diff --git a/src/player.c b/src/player.c
index 252c178c..f209e891 100644
--- a/src/player.c
+++ b/src/player.c
@@ -1862,7 +1862,7 @@ static void PlayerPull(Entity* this) {
gPlayerState.framestate = PL_STATE_PULL;
sPlayerPullStates[this->subAction](this);
- gUnk_0200AF00.filler25[9] = 8;
+ gUnk_0200AF00.unk_2e = 8;
}
static void sub_08072214(Entity* this) {
@@ -2802,7 +2802,7 @@ void sub_08073584(Entity* this) {
return;
}
- gUnk_0200AF00.filler25[10] = 1;
+ gUnk_0200AF00.unk_2f = 1;
if (sub_0807A2F8(0)) {
this->subAction++;
this->direction = 4 * (this->animationState & 6);
diff --git a/src/playerUtils.c b/src/playerUtils.c
index 9ba882cb..b68fef08 100644
--- a/src/playerUtils.c
+++ b/src/playerUtils.c
@@ -143,7 +143,7 @@ NONMATCH("asm/non_matching/playerUtils/sub_080777A0.inc", bool32 sub_080777A0(vo
RequestPriorityDuration(&gPlayerEntity, 0xb4);
return TRUE;
}
- } else if ((((gUnk_0200AF00.filler25[7] == 0xc) && (gPlayerState.field_0x1c == 0)) &&
+ } else if ((((gUnk_0200AF00.unk_2c == 0xc) && (gPlayerState.field_0x1c == 0)) &&
(gPlayerState.floor_type != 0x11)) &&
((((gPlayerState.field_0x90 & 0xf00) != 0 &&
((gPlayerState.flags & (PL_BURNING | PL_ROLLING)) == 0)) &&
diff --git a/src/script.c b/src/script.c
index 03701249..f08b600e 100644
--- a/src/script.c
+++ b/src/script.c
@@ -448,13 +448,13 @@ void sub_0807DF28(void) {
}
void sub_0807DF38(void) {
- gUnk_0200AF00.filler0[1] = 0xff;
+ gUnk_0200AF00.unk_1 = 0xff;
gUnk_02034490.unk0 = 0xff;
}
void sub_0807DF50(void) {
gUnk_02034490.unk0 = 0;
- gUnk_0200AF00.filler0[1] = 0;
+ gUnk_0200AF00.unk_1 = 0;
RecoverUI(0);
ResetPlayerAnimationAndAction();
sub_08079184();
diff --git a/src/subtask2.c b/src/subtask2.c
index 39b710bb..2ac69033 100644
--- a/src/subtask2.c
+++ b/src/subtask2.c
@@ -401,7 +401,7 @@ void sub_080A74F4(void) {
UpdateEntities();
UpdateManagers();
DrawUI();
- DrawOAMCmd();
+ DrawUIElements();
UpdateCarriedObject();
DrawEntities();
CopyOAM();
diff --git a/src/ui.c b/src/ui.c
index addcacd2..8927154d 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -1,77 +1,475 @@
#include "global.h"
#include "sound.h"
#include "message.h"
+#include "functions.h"
+#include "screen.h"
+#include "common.h"
+#include "save.h"
+#include "player.h"
+#include "area.h"
+#include "game.h"
+
+extern void sub_0805ECEC(u32, u32, u32, u32);
+extern bool32 ItemIsBottle(u32);
typedef struct {
- s8 unk0;
- u8 unk1;
- u8 unk2;
- u8 unk3;
- u8 unk4;
- u8 unk5;
- u8 unk6;
- u8 unk7;
- u8 unk8;
- u8 unk9;
- u8 unkA;
- u8 unkB;
- u16 unkC;
- u16 unkE;
- u16 unk10;
- u8 unk12;
- u8 unk13;
-} Element;
+ u16 unk_0;
+ u16 unk_2;
+ u16 unk_4;
+ u16 unk_6;
+ u16 unk_8;
+} substruct_160;
-extern void sub_0805ECEC(u32, u32, u32, u32);
-extern void sub_0801CAD0(Element*);
+typedef struct {
+ substruct_160 unk_0;
+ u8 unk_9[54];
+ substruct_160 unk_40;
+} struct_02035160;
+extern struct_02035160 gUnk_02035160;
+
+typedef struct {
+ u32 unk_0;
+ u32 unk_4;
+ u32 unk_8;
+ u32 unk_c;
+ u32 unk_10;
+ u32 unk_14;
+ u8 unk_18[40];
+} struct_02034CF0;
-extern void (*const gUnk_080C904C[])(Element*);
+extern struct_02034CF0 gUnk_02034CF0[];
+typedef struct {
+ struct_02034CF0 unk_0;
+ struct_02034CF0 unk_40;
+} struct_02034D30;
+
+extern struct_02034D30 gUnk_02034D30;
+
+typedef struct {
+ u16 unk_0;
+ u16 unk_2;
+ u16 unk_4;
+ u16 unk_6;
+ u8 pad[56];
+} substruct_0E2;
+
+typedef struct {
+ substruct_0E2 unk_0[2];
+} struct_020350E2;
+
+extern struct_020350E2 gUnk_020350E2;
+
+typedef struct {
+ u16 unk_0; // -> gOamCmd._4
+ u16 unk_2; // -> gOamCmd._6
+ u16 unk_4; // -> element->unk_1a
+ u16 spriteIndex;
+ void (*updateFunction)(UIElement*);
+ u8 buttonElementId;
+ u8 unk_d;
+ u8 unk_e;
+ u8 unk_f;
+} UIElementDefinition;
+
+extern UIElementDefinition gUIElementDefinitions[];
+extern void (*const ButtonUIElement_Actions[])(UIElement*);
+extern const u8 gUnk_080C9044[];
+extern void (*const EzloNagUIElement_Actions[])(UIElement*);
extern u16 gUnk_080C9058[];
+extern Frame gUnk_080C9094[];
+
+void sub_0801C2F0(u32, u32);
+void DrawHearts(void);
+void DrawChargeBar(void);
+void DrawRupees(void);
+void DrawKeys(void);
+void CreateUIElement(u32, u32);
+void sub_0801C5E0(u32, u32, u32, u32);
+void sub_0801CAFC(UIElement*, u32);
+void sub_0801CB20(UIElement*, UIElementDefinition*);
+UIElement* FindUIElement(u32);
+void sub_0801CAD0(UIElement*);
+void sub_0801CAB8(UIElement*, Frame*);
-void EzloNag(Element* arg0) {
- gUnk_080C904C[arg0->unk4](arg0);
+void UpdateUIElements(void) {
+ u32 index;
+ UIElement* element;
+ const UIElementDefinition* definition;
+ for (index = 0; index < MAX_UI_ELEMENTS; index++) {
+ element = &gUnk_0200AF00.elements[index];
+ if (element->used != 0) {
+ definition = &gUIElementDefinitions[element->type];
+ definition->updateFunction(element);
+ }
+ }
}
-extern u32 gUnk_080C9094;
-extern void sub_0801CAB8(Element*, u32*);
+void DrawUIElements(void) {
+ u32 index;
+ UIElement* element;
+ UIElementDefinition* definition;
+ index = 0;
+ for (index = 0; index < MAX_UI_ELEMENTS; index++) {
+ element = &gUnk_0200AF00.elements[index];
+ if (element->used == 1 && element->unk_0_1 == 1) {
+ gOamCmd.x = element->x;
+ gOamCmd.y = element->y;
+ definition = &gUIElementDefinitions[element->type];
+ gOamCmd._4 = definition->unk_0;
+ gOamCmd._6 = definition->unk_2;
+ gOamCmd._8 = element->unk_18 << 0xc | element->unk_1a;
+ DrawDirect(definition->spriteIndex, element->frameIndex);
+ }
+ }
+}
-NONMATCH("asm/non_matching/sub_0801CED8.inc", void sub_0801CED8(Element* arg0)) {
- if (gUnk_0200AF00.ezloNagFuncIndex == 1) {
- gUnk_0200AF00.ezloNagFuncIndex = 2;
- arg0->unkC = 0x10;
- arg0->unkE = 0x90;
- arg0->unk6 = 0;
- arg0->unk1 = 7;
- arg0->unk4 = 1;
- arg0->unk0 |= 2;
- sub_0801CAB8(arg0, &gUnk_080C9094);
+NONMATCH("asm/non_matching/ui/sub_0801C25C.inc", void sub_0801C25C(void)) {
+ u32 uVar1;
+ s32 index;
+ u8 tmp;
+ UIElement* element;
+
+ for (index = 0; index < MAX_UI_ELEMENTS; index++) {
+ element = &gUnk_0200AF00.elements[index];
+ if (((element->used) == 1) && ((element->unk_0_1) == 1)) {
+ // TODO wrong bitfield access here
+ if (element->unk_0_2 == 1) {
+ element->unk_0_2 = 2;
+ DmaSet(3, element->firstTile, element->unk_1a * 0x20 + 0x6010000, element->numTiles << 3 | 0x84000000);
+ }
+ }
+ }
+ if (gUnk_0200AF00.unk_13 < 0) {
+ tmp = gUnk_0200AF00.unk_13 & 0x7f;
+ gUnk_0200AF00.unk_13 = tmp;
+ sub_0801C2F0(0x11a, tmp);
+ }
+ if (gUnk_0200AF00.unk_14 < 0) {
+ tmp = gUnk_0200AF00.unk_14 & 0x7f;
+ gUnk_0200AF00.unk_14 = tmp;
+ sub_0801C2F0(0x126, tmp);
}
}
END_NONMATCH
-void sub_0801CF18(Element* arg0) {
- u32 temp;
+ASM_FUNC("asm/non_matching/ui/sub_0801C2F0.inc", void sub_0801C2F0(u32 a, u32 b))
+
+void DrawUI(void) {
+ gUnk_0200AF00.unk_0 &= ~gUnk_0200AF00.unk_1;
+ DrawHearts();
+ DrawChargeBar();
+ DrawRupees();
+ DrawKeys();
+ gUnk_0200AF00.unk_0 = 0;
+ UpdateUIElements();
+}
+
+void InitUI(bool32 keepHealthAndRupees) {
+ u32 health;
+ u32 rupees;
+
+ if (!keepHealthAndRupees) {
+ health = gSave.stats.health >> 1;
+ rupees = gSave.stats.rupees;
+ } else {
+ health = gUnk_0200AF00.health;
+ rupees = gUnk_0200AF00.rupees;
+ }
+ MemClear(&gUnk_0200AF00, sizeof(struct_0200AF00));
+ gUnk_0200AF00.health = health;
+ gUnk_0200AF00.rupees = rupees;
+ gUnk_0200AF00.maxHealth = gSave.stats.maxHealth >> 1;
+ LoadPaletteGroup(0xc);
+ LoadGfxGroup(0x10);
+ MemClear(&gBG0Buffer, 0x800);
+ gScreen.bg0.tilemap = &gBG0Buffer;
+ gScreen.bg0.control = 0x1f0c;
+ gScreen.lcd.displayControl |= 0x100;
+ gOAMControls.unk[0].unk7 = 1;
+ gOAMControls.unk[0].unk6 = 1;
+ gOAMControls.unk[1].unk6 = 1;
+ gUnk_0200AF00.unk_13 = 0x7f;
+ gUnk_0200AF00.unk_14 = 0x7f;
+ gUnk_0200AF00.unk_8 = 0x7f;
+ DrawHearts();
+ DrawRupees();
+ DrawChargeBar();
+ DrawKeys();
+ gUnk_0200AF00.buttonX[0] = 0xd0;
+ gUnk_0200AF00.buttonX[1] = 0xb8;
+ gUnk_0200AF00.buttonX[2] = 0xd8;
+ gUnk_0200AF00.buttonY[0] = 0x1c;
+ gUnk_0200AF00.buttonY[1] = 0x1c;
+ gUnk_0200AF00.buttonY[2] = 0xe;
+ // TODO why is this array cleared again? Is it filled by the function calls in the mean time?
+ MemClear(gUnk_0200AF00.elements, sizeof(gUnk_0200AF00.elements));
+ CreateUIElement(UI_ELEMENT_TEXT_R, 9);
+ CreateUIElement(UI_ELEMENT_ITEM_A, 0);
+ CreateUIElement(UI_ELEMENT_ITEM_B, 0);
+ CreateUIElement(UI_ELEMENT_BUTTON_R, 0);
+ CreateUIElement(UI_ELEMENT_BUTTON_B, 0);
+ CreateUIElement(UI_ELEMENT_BUTTON_A, 0);
+ CreateUIElement(UI_ELEMENT_EZLONAGSTART, 0);
+ CreateUIElement(UI_ELEMENT_HEART, 0);
+}
+
+void RefreshUI(void) {
+ gScreen.bg0.updated = 1;
+}
+
+void RecoverUI(u32 bottomPt, u32 topPt) {
+ gUnk_0200AF00.unk_2 = 0;
+ gUnk_0200AF00.unk_10 = 0;
+ gUnk_0200AF00.unk_a = 0;
+}
+
+ASM_FUNC("asm/non_matching/ui/DrawRupees.inc", void DrawRupees(void))
+
+// Draw icon with text for rupees or keys
+ASM_FUNC("asm/non_matching/ui/sub_0801C5E0.inc",
+ void sub_0801C5E0(u32 iconVramIndex, u32 count, bool32 isTextYellow, u32 d))
- temp = gUnk_080C9058[arg0->unk6++];
- sub_0805ECEC(0, temp, temp, 0);
- if (temp == 0) {
- arg0->unk4 = 2;
- arg0->unk1 = 8;
+void sub_0801C66C(void) {
+ struct_02034CF0* ptr;
+ s32 index;
+
+ if (gUnk_0200AF00.unk_2 != 0) {
+ gUnk_0200AF00.unk_2 = 0;
+ if (gUnk_0200AF00.maxHealth > 0x28) {
+ index = 2;
+ } else {
+ index = 1;
+ }
+ ptr = gUnk_02034CF0;
+ do {
+ ptr->unk_0 = 0;
+ ptr->unk_4 = 0;
+ ptr->unk_8 = 0;
+ ptr->unk_c = 0;
+ ptr->unk_10 = 0;
+ ptr->unk_14 = 0;
+ ptr++;
+ index--;
+ } while (index > 0);
+ gScreen.bg0.updated = 1;
+ }
+}
+
+ASM_FUNC("asm/non_matching/ui/DrawHearts.inc", void DrawHearts())
+
+void sub_0801C824(void) {
+ struct_02034CF0* ptr;
+
+ if (gUnk_0200AF00.unk_6 != 0) {
+ gUnk_0200AF00.unk_6 = 0;
+ if (gUnk_0200AF00.maxHealth > 4 * 10) {
+ ptr = &gUnk_02034D30.unk_40; // Show second row of hearts
+ } else {
+ ptr = &gUnk_02034D30.unk_0;
+ }
+ ptr->unk_0 = 0;
+ ptr->unk_4 = 0;
+ ptr->unk_8 = 0;
+ ptr->unk_c = 0;
+ ptr->unk_10 = 0;
+ ptr->unk_14 = 0;
+ gScreen.bg0.updated = 1;
+ }
+}
+
+ASM_FUNC("asm/non_matching/ui/DrawChargeBar.inc", void DrawChargeBar())
+
+ASM_FUNC("asm/non_matching/ui/DrawKeys.inc", void DrawKeys(void))
+
+ASM_FUNC("asm/non_matching/ui/CreateUIElement.inc", void CreateUIElement(u32 type, u32 type2))
+
+void sub_0801CAB8(UIElement* element, Frame* frame) {
+ element->framePtr = frame;
+ element->duration = frame->duration;
+ element->spriteSettings = frame->spriteSettings.raw;
+ element->frameSettings = frame->frameSettings.raw;
+ sub_0801CAFC(element, frame->index);
+}
+
+void sub_0801CAD0(UIElement* element) {
+ if (--element->duration == 0) {
+ Frame* frame = element->framePtr;
+ if ((s8)frame->frameSettings.raw < 0) {
+ frame -= frame[1].index;
+ }
+ sub_0801CAB8(element, frame + 1);
+ }
+}
+
+void sub_0801CAFC(UIElement* element, u32 frameIndex) {
+ UIElementDefinition* definition = &gUIElementDefinitions[element->type];
+ if (frameIndex != element->frameIndex) {
+ element->frameIndex = frameIndex;
+ sub_0801CB20(element, definition);
+ }
+}
+
+void sub_0801CB20(UIElement* element, UIElementDefinition* definition) {
+ if (definition->unk_e == 0) {
+ SpritePtr* ptr = &gSpritePtrs[definition->spriteIndex];
+ SpriteFrame* frame = &ptr->frames[element->frameIndex];
+ u32* firstTile = (u32*)(ptr->ptr + frame->firstTileIndex * 0x20);
+ u8 numTiles = frame->numTiles;
+ if (numTiles == 0) {
+ element->unk_0_2 = 0;
+ } else {
+ if ((element->numTiles != numTiles) || (element->firstTile != firstTile)) {
+ element->firstTile = firstTile;
+ element->unk_0_2 = 1;
+ }
+ }
+ element->numTiles = numTiles;
+ }
+}
+
+void ButtonUIElement(UIElement* element) {
+ ButtonUIElement_Actions[element->action](element);
+}
+
+void ButtonUIElement_Action0(UIElement* element) {
+ element->x = gUnk_0200AF00.buttonX[element->type];
+ element->y = gUnk_0200AF00.buttonY[element->type] - 0x20;
+ element->action = 1;
+ element->unk_0_1 = 1;
+ sub_0801CAFC(element, element->type);
+}
+
+ASM_FUNC("asm/non_matching/ui/ButtonUIElement_Action1.inc", void ButtonUIElement_Action1())
+
+u32 sub_0801CC80(UIElement* element) {
+ u8 type = element->type;
+ u32 buttonId = (type ^ 3) != 0;
+ u32 itemId = gSave.stats.itemButtons[buttonId];
+ if (ItemIsBottle(itemId)) {
+ itemId = gSave.saved_status.field_0x24[itemId - 6];
+ }
+ return itemId;
+}
+
+ASM_FUNC("asm/non_matching/ui/ItemUIElement.inc", void ItemUIElement())
+
+NONMATCH("asm/non_matching/ui/TextUIElement.inc", void TextUIElement(UIElement* element)) {
+ UIElement* buttonUIElement;
+ u32 tmp;
+ extern struct_0200AF00* ptr;
+ u32 tmp1;
+ UIElement* ptr2;
+
+ if (element->type2 == 9) {
+ if (gUnk_0200AF00.unk_2f == 0) {
+ switch (gArea.field_0x18) {
+ case 2:
+ tmp1 = 0xb;
+ break;
+ case 3:
+ tmp1 = 0xa;
+ break;
+ default:
+ tmp1 = gUnk_0200AF00.unk_2c;
+ break;
+ }
+ gUnk_0200AF00.unk_32 = tmp1;
+ }
+ }
+ tmp = gUnk_0200AF00.unk_30[element->buttonElementId];
+ element->unk_0_1 = 0;
+ if (tmp != 0) {
+ sub_0801CAFC(element, tmp + gUnk_080C9044[((SaveHeader*)0x2000000)->language]);
+ buttonUIElement = FindUIElement(element->buttonElementId);
+ if (buttonUIElement != NULL) {
+ element->x = buttonUIElement->x;
+ element->y = buttonUIElement->y;
+ element->unk_0_1 = 1;
+ }
+ }
+}
+END_NONMATCH
+
+UIElement* FindUIElement(u32 type) {
+ UIElement* element;
+ u32 index;
+ for (index = 0; index < MAX_UI_ELEMENTS; index++) {
+ element = &gUnk_0200AF00.elements[index];
+ if (element->used != 0 && type == element->type) {
+ return element;
+ }
+ }
+ return NULL;
+}
+
+void HeartUIElement(UIElement* element) {
+ s32 tmp;
+ u32 x;
+ u16 y;
+ u32 health;
+ u32 frameIndex;
+ element->unk_0_1 = 0;
+ if (((gUnk_0200AF00.unk_1 & 0x10) == 0) && ((gMessage.doTextBox & 0x7f) == 0)) {
+ health = gUnk_0200AF00.health;
+ if (health != 0) {
+ element->unk_0_1 = 1;
+ // Calculate the position for this heart.
+ tmp = ((health + 3) >> 2) * 8;
+ x = tmp + 3;
+ y = 0xc;
+ if (health > 0x28) {
+ y = 0x14;
+ x = tmp - 0x4d;
+ }
+ element->x = x;
+ element->y = y;
+ if ((health & 3) == 0) {
+ frameIndex = 4; // Full heart
+ } else {
+ frameIndex = health & 3; // Quarters
+ }
+ sub_0801CAFC(element, frameIndex + 0x71);
+ }
+ }
+}
+
+void EzloNagUIElement(UIElement* element) {
+ EzloNagUIElement_Actions[element->action](element);
+}
+
+void EzloNagUIElement_Action0(UIElement* element) {
+ if (gUnk_0200AF00.ezloNagFuncIndex == 1) {
+ gUnk_0200AF00.ezloNagFuncIndex = 2;
+ element->x = 0x10;
+ element->y = 0x90;
+ element->unk_6 = 0;
+ element->type = UI_ELEMENT_EZLONAGSTART;
+ element->action = 1;
+ element->unk_0_1 = 1;
+ sub_0801CAB8(element, gUnk_080C9094);
+ }
+}
+
+void EzloNagUIElement_Action1(UIElement* element) {
+ u32 tmp = gUnk_080C9058[element->unk_6++];
+ sub_0805ECEC(0, tmp, tmp, 0);
+ if (tmp == 0) {
+ element->action = 2;
+ element->type = UI_ELEMENT_EZLONAGACTIVE;
gUnk_0200AF00.ezloNagFuncIndex = 3;
SoundReq(SFX_EZLO_UI);
}
}
-void sub_0801CF60(Element* arg0) {
-
- if ((gUnk_0200AF00.ezloNagFuncIndex >= 5) || (gMessage.doTextBox & 0x7f)) {
- arg0->unk4 = 0;
- arg0->unk0 &= -3;
+void EzloNagUIElement_Action2(UIElement* element) {
+ if (gUnk_0200AF00.ezloNagFuncIndex >= 5 || (gMessage.doTextBox & 0x7f)) {
+ element->action = 0;
+ element->unk_0_1 = 0;
return;
}
- sub_0801CAD0(arg0);
- if (arg0->unk13 == 1) {
+ sub_0801CAD0(element);
+ if (element->frameSettings == 1) {
gUnk_0200AF00.ezloNagFuncIndex = 4;
}
}