From 41ea9ab943d8be91d9e296d23cd1f2dd48d37d9d Mon Sep 17 00:00:00 2001 From: octorock <79596758+octorock@users.noreply.github.com> Date: Sat, 5 Mar 2022 19:24:39 +0100 Subject: [PATCH] Decompile some UI --- asm/intr.s | 66 +- asm/non_matching/sub_0801CED8.inc | 33 - asm/non_matching/subtask2/sub_080A70AC.inc | 2 +- .../ui/ButtonUIElement_Action1.inc | 99 + asm/non_matching/ui/CreateUIElement.inc | 41 + asm/non_matching/ui/DrawChargeBar.inc | 155 ++ asm/non_matching/ui/DrawHearts.inc | 196 ++ asm/non_matching/ui/DrawKeys.inc | 101 + asm/non_matching/ui/DrawRupees.inc | 152 ++ asm/non_matching/ui/ItemUIElement.inc | 117 ++ asm/non_matching/ui/TextUIElement.inc | 75 + asm/non_matching/ui/sub_0801C25C.inc | 75 + asm/non_matching/ui/sub_0801C2F0.inc | 39 + asm/non_matching/ui/sub_0801C5E0.inc | 66 + asm/ui.s | 1708 ----------------- assets/assets.json | 46 +- data/const/object/treeHidingPortal.s | 10 - data/data_080B7B74.s | 94 +- include/functions.h | 6 +- include/structures.h | 83 +- linker.ld | 11 +- src/affine.c | 17 +- src/fileselect.c | 12 +- src/game.c | 20 +- src/interrupts.c | 12 +- src/menu/figurine_menu.c | 6 +- src/menu/kinstone_menu.c | 4 +- src/menu/pause_menu.c | 4 +- src/object/crenelBeanSprout.c | 6 +- src/object/itemForSale.c | 12 +- src/player.c | 4 +- src/playerUtils.c | 2 +- src/script.c | 4 +- src/subtask2.c | 2 +- src/ui.c | 498 ++++- 35 files changed, 1806 insertions(+), 1972 deletions(-) delete mode 100644 asm/non_matching/sub_0801CED8.inc create mode 100644 asm/non_matching/ui/ButtonUIElement_Action1.inc create mode 100644 asm/non_matching/ui/CreateUIElement.inc create mode 100644 asm/non_matching/ui/DrawChargeBar.inc create mode 100644 asm/non_matching/ui/DrawHearts.inc create mode 100644 asm/non_matching/ui/DrawKeys.inc create mode 100644 asm/non_matching/ui/DrawRupees.inc create mode 100644 asm/non_matching/ui/ItemUIElement.inc create mode 100644 asm/non_matching/ui/TextUIElement.inc create mode 100644 asm/non_matching/ui/sub_0801C25C.inc create mode 100644 asm/non_matching/ui/sub_0801C2F0.inc create mode 100644 asm/non_matching/ui/sub_0801C5E0.inc delete mode 100644 asm/ui.s delete mode 100644 data/const/object/treeHidingPortal.s 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 filler0[0x1A]; - u16 rButtonX; - u8 filler1C[0x4]; - u16 rButtonY; + 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 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" - -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; +#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 void sub_0801CAD0(Element*); +extern bool32 ItemIsBottle(u32); -extern void (*const gUnk_080C904C[])(Element*); +typedef struct { + u16 unk_0; + u16 unk_2; + u16 unk_4; + u16 unk_6; + u16 unk_8; +} substruct_160; +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 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 EzloNag(Element* arg0) { - gUnk_080C904C[arg0->unk4](arg0); +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 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)) - temp = gUnk_080C9058[arg0->unk6++]; - sub_0805ECEC(0, temp, temp, 0); - if (temp == 0) { - arg0->unk4 = 2; - arg0->unk1 = 8; +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)) + +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; } }