diff --git a/asm/non_matching/ui/DrawKeys.inc b/asm/non_matching/ui/DrawKeys.inc deleted file mode 100644 index 6d483a4f..00000000 --- a/asm/non_matching/ui/DrawKeys.inc +++ /dev/null @@ -1,101 +0,0 @@ - .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 deleted file mode 100644 index e7807cc3..00000000 --- a/asm/non_matching/ui/DrawRupees.inc +++ /dev/null @@ -1,152 +0,0 @@ - .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 deleted file mode 100644 index ea1eee27..00000000 --- a/asm/non_matching/ui/ItemUIElement.inc +++ /dev/null @@ -1,117 +0,0 @@ - .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/sub_0801C2F0.inc b/asm/non_matching/ui/sub_0801C2F0.inc deleted file mode 100644 index 95c9e633..00000000 --- a/asm/non_matching/ui/sub_0801C2F0.inc +++ /dev/null @@ -1,39 +0,0 @@ - .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 deleted file mode 100644 index 8d77d87c..00000000 --- a/asm/non_matching/ui/sub_0801C5E0.inc +++ /dev/null @@ -1,66 +0,0 @@ - .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/assets/gfx.json b/assets/gfx.json index 06453894..28e65cdb 100644 --- a/assets/gfx.json +++ b/assets/gfx.json @@ -13367,13 +13367,13 @@ "type": "unknown" }, { - "path": "gfx/gGfx_89_5.4bpp", + "path": "gfx/RupeeKeyDigitsYellow.4bpp", "start": 6047904, "size": 640, "type": "gfx" }, { - "path": "assets/gUnk_085C4B20.bin", + "path": "assets/RupeeKeyDigits.bin", "start": 6048544, "size": 640, "type": "unknown" diff --git a/data/gfx/gfx_and_palettes.s b/data/gfx/gfx_and_palettes.s index 3d7e159a..44e3aa61 100644 --- a/data/gfx/gfx_and_palettes.s +++ b/data/gfx/gfx_and_palettes.s @@ -4453,11 +4453,11 @@ gGfx_88_3:: .incbin "gfx/gGfx_88_3.4bpp" gUnk_085C4620:: .incbin "assets/gUnk_085C4620.bin" -gGfx_89_5:: - .incbin "gfx/gGfx_89_5.4bpp" +RupeeKeyDigitsYellow:: + .incbin "gfx/RupeeKeyDigitsYellow.4bpp" @ gfx_unknown_18 -gUnk_085C4B20:: - .incbin "assets/gUnk_085C4B20.bin" +RupeeKeyDigits:: + .incbin "assets/RupeeKeyDigits.bin" gUnk_data0_085C4DA0:: .incbin "assets/gUnk_data0_085C4DA0.bin" gUnk_data1_085C4E60:: diff --git a/data/gfx/gfx_groups.s b/data/gfx/gfx_groups.s index f6668652..47e5f3e6 100644 --- a/data/gfx/gfx_groups.s +++ b/data/gfx/gfx_groups.s @@ -436,7 +436,7 @@ gGfxGroup_89:: gfx_raw src=offset_gGfx_89_2, unknown=0x7, dest=0x6008000, size=0xe00 gfx_raw src=offset_gGfx_89_3, unknown=0x7, dest=0x6010000, size=0x2000 gfx_raw src=offset_gGfx_89_4, unknown=0x7, dest=0x6013000, size=0x640 - gfx_raw src=offset_gGfx_89_5, unknown=0x7, dest=0x6013c00, size=0x280 + gfx_raw src=offset_RupeeKeyDigitsYellow, unknown=0x7, dest=0x6013c00, size=0x280 gfx_raw src=offset_gGfx_89_6, unknown=0x7, dest=0x6014000, size=0x8c0, terminator=1 gGfxGroup_90:: diff --git a/src/ui.c b/src/ui.c index eb4407d8..e72b7ea0 100644 --- a/src/ui.c +++ b/src/ui.c @@ -22,7 +22,7 @@ typedef struct { typedef struct { substruct_160 unk_0; - u8 unk_9[54]; + u8 unk_9[50]; substruct_160 unk_40; } struct_02035160; extern struct_02035160 gUnk_02035160; @@ -60,6 +60,9 @@ typedef struct { extern struct_020350E2 gUnk_020350E2; +extern u32 gUnk_085C4620[]; +extern Frame* gSpriteAnimations_322[]; + typedef struct { u16 unk_0; // -> gOamCmd._4 u16 unk_2; // -> gOamCmd._6 @@ -78,14 +81,15 @@ extern const u8 gUnk_080C9044[]; extern void (*const EzloNagUIElement_Actions[])(UIElement*); extern u16 gUnk_080C9058[]; extern Frame gUnk_080C9094[]; +extern u8 RupeeKeyDigits[]; -void sub_0801C2F0(u32, u32); +u32 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); +u32 DrawDigits(u32, u32, u32, u32); void sub_0801CAFC(UIElement*, u32); void sub_0801CB20(UIElement*, UIElementDefinition*); UIElement* FindUIElement(u32); @@ -152,7 +156,30 @@ void sub_0801C25C(void) { } } -ASM_FUNC("asm/non_matching/ui/sub_0801C2F0.inc", void sub_0801C2F0(u32 a, u32 b)) +u32 sub_0801C2F0(u32 param_1, u32 param_2) { + u32 uVar1; + register u32 rem asm("r1"); + vu32* ptr; + param_1 = param_1 * 0x20 + 0x6010000; + + uVar1 = Div(param_2, 10); + if (uVar1 > 9) { + uVar1 = 9; + } + ptr = ®_DMA3SAD; + ptr[0] = (u32)(gUnk_085C4620 + uVar1 * 8); + // DMA3DAD + ptr[1] = param_1; + // DMA3CNT + ptr[2] = 0x84000008; + ptr[2]; + ptr[0] = (u32)(gUnk_085C4620 + (rem + 10) * 8); + // DMA3DAD + ptr[1] = param_1 + 0x20; + // DMA3CNT + ptr[2] = 0x84000008; + return ptr[2]; +} void DrawUI(void) { gUnk_0200AF00.unk_0 &= ~gUnk_0200AF00.unk_1; @@ -223,11 +250,129 @@ void RecoverUI(u32 bottomPt, u32 topPt) { gUnk_0200AF00.unk_a = 0; } -ASM_FUNC("asm/non_matching/ui/DrawRupees.inc", void DrawRupees(void)) +void DrawRupees(void) { + u32 cVar1; + u32 temp; + u32 temp2; + substruct_160* ptr; + substruct_160* ptr2; + const u16* ptr3; + struct_02035160* ptr4; + + if ((gUnk_0200AF00.unk_1 & 0x40) != 0) { + if (gUnk_0200AF00.unk_a != 0) { + gUnk_0200AF00.unk_a = 0; + ptr4 = &gUnk_02035160; + ptr = &ptr4->unk_0; + ptr->unk_0 = 0; + ptr->unk_2 = 0; + ptr->unk_4 = 0; + ptr->unk_6 = 0; + ptr->unk_8 = 0; + ptr2 = &ptr4->unk_40; + ptr2->unk_0 = 0; + ptr2->unk_2 = 0; + ptr2->unk_4 = 0; + ptr2->unk_6 = 0; + ptr2->unk_8 = 0; + gScreen.bg0.updated = 1; + } + } else { + if (gUnk_0200AF00.unk_a == 0) { + gUnk_0200AF00.unk_a = 2; + ptr4 = &gUnk_02035160; + ptr2 = &ptr4->unk_40; + ptr3 = gWalletSizes; + ptr4->unk_0.unk_0 = temp2 = *(ptr3 + (u32)gSave.stats.walletType * 2 + 1); + ptr4->unk_0.unk_2 = temp2 + 1; + ptr2->unk_0 = temp2 + 2; + ptr2->unk_2 = temp2 + 3; + temp2 = 0xf070; + ptr4->unk_0.unk_4 = temp2; + ptr2->unk_4 = temp2 + 1; + ptr4->unk_0.unk_6 = temp2 + 2; + ptr2->unk_6 = temp2 + 3; + ptr4->unk_0.unk_8 = temp2 + 4; + ptr2->unk_8 = temp2 + 5; + gScreen.bg0.updated = 1; + cVar1 = 1; + } else { + cVar1 = 0; + } + + if (gUnk_0200AF00.rupees != gSave.stats.rupees) { + if (gUnk_0200AF00.rupees < gSave.stats.rupees) { + gUnk_0200AF00.rupees++; + } else { + gUnk_0200AF00.rupees--; + } + cVar1 = 2; + } + switch (cVar1) { + case 2: + temp = gUnk_0200AF00.unk_c; + temp &= 3; + if ((temp) == 0) { + SoundReq(SFX_RUPEE_GET); + } + case 1: + DrawDigits(0x70, gUnk_0200AF00.rupees, + gWalletSizes[(u32)gSave.stats.walletType * 2] <= gUnk_0200AF00.rupees, 3); + cVar1 = gUnk_0200AF00.unk_c + 1; + default: + gUnk_0200AF00.unk_c = cVar1; + break; + } + } +} // 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)) +u32 DrawDigits(u32 iconVramIndex, u32 count, u32 isTextYellow, u32 digits) { + int iVar2; + int iVar3; + u8* puVar4; + u32 digit; + vu32* ptr; + vu32* ptr2; + register u32 r1 asm("r1"); + + puVar4 = RupeeKeyDigits; + if (isTextYellow == 0) { + puVar4 -= 0x280; + } + iVar3 = (iconVramIndex & 0x3ff) * 0x20; + iVar2 = iVar3 + 0x600c000; + switch (digits) { + case 3: + digit = Div(count, 100); + count = r1; + ptr = ®_DMA3SAD; + ptr[0] = (int)puVar4 + (int)(digit)*0x40; + // DMA3DAD + ptr[1] = iVar2; + // DMA3CNT + ptr[2] = 0x84000010; + ptr[2]; + iVar2 = iVar3 + 0x600c040; + case 2: + digit = Div(count, 10); + count = r1; + ptr = ®_DMA3SAD; + ptr[0] = (int)puVar4 + (int)(digit)*0x40; + // DMA3DAD + ptr[1] = iVar2; + // DMA3CNT + ptr[2] = 0x84000010; + ptr[2]; + iVar2 += 0x40; + } + + ptr2 = ®_DMA3SAD; + ptr2[0] = (int)puVar4 + count * 0x40; + ptr2[1] = iVar2; + ptr2[2] = 0x84000010; + return ptr2[2]; +} void sub_0801C66C(void) { struct_02034CF0* ptr; @@ -279,7 +424,49 @@ void sub_0801C824(void) { ASM_FUNC("asm/non_matching/ui/DrawChargeBar.inc", void DrawChargeBar()) -ASM_FUNC("asm/non_matching/ui/DrawKeys.inc", void DrawKeys(void)) +void DrawKeys(void) { + s32 iVar1; + substruct_0E2* ptr1; + substruct_0E2* ptr2; + u32 temp; + + if (!(((gUnk_0200AF00.unk_1 & 0x80) == 0) && (AreaHasKeys()))) { + if (gUnk_0200AF00.unk_10 != 0) { + gUnk_0200AF00.unk_10 = 0; + ptr1 = &gUnk_020350E2.unk_0[0]; + ptr1->unk_0 = 0; + ptr1->unk_2 = 0; + ptr1->unk_4 = 0; + ptr1->unk_6 = 0; + gUnk_020350E2.unk_0[1].unk_0 = 0; + gUnk_020350E2.unk_0[1].unk_2 = 0; + gUnk_020350E2.unk_0[1].unk_4 = 0; + gUnk_020350E2.unk_0[1].unk_6 = 0; + gScreen.bg0.updated = 1; + } + } else { + if (gUnk_0200AF00.unk_10 == 0) { + ptr1 = &gUnk_020350E2.unk_0[0]; + ptr2 = &gUnk_020350E2.unk_0[1]; + temp = 0xf01c; + ptr1->unk_0 = temp; + ptr1->unk_2 = temp + 1; + ptr2->unk_0 = temp + 2; + ptr2->unk_2 = temp + 3; + temp = 0xf076; + ptr1->unk_4 = temp; + ptr2->unk_4 = temp + 1; + ptr1->unk_6 = temp + 2; + ptr2->unk_6 = temp + 3; + gScreen.bg0.updated = 1; + } + if ((gUnk_0200AF00.unk_12 != gSave.unk45C[gArea.dungeon_idx]) || (gUnk_0200AF00.unk_10 == 0)) { + gUnk_0200AF00.unk_10 = 2; + gUnk_0200AF00.unk_12 = gSave.unk45C[gArea.dungeon_idx]; + DrawDigits(0x76, gUnk_0200AF00.unk_12, 0, 2); + } + } +} ASM_FUNC("asm/non_matching/ui/CreateUIElement.inc", void CreateUIElement(u32 type, u32 type2)) @@ -351,7 +538,74 @@ u32 sub_0801CC80(UIElement* element) { return itemId; } -ASM_FUNC("asm/non_matching/ui/ItemUIElement.inc", void ItemUIElement()) +void ItemUIElement(UIElement* element) { + u32 itemMaxNumber; + u32 itemId; + u8* puVar3; + UIElement* element2; + u32 uVar5; + u32 playerItemCount; + u8* psVar8; + u32 uiElementType; + + element->unk_0_1 = 0; + itemId = sub_0801CC80(element); + if (itemId == 0) { + return; + } + + if (element->unk_8 != itemId) { + element->unk_8 = itemId; + sub_0801CAB8(element, gSpriteAnimations_322[itemId]); + } + + if (element->type ^ 3) { + uiElementType = 1; + } else { + uiElementType = 0; + } + + psVar8 = &gUnk_0200AF00.unk_13; + if (uiElementType != 0) { + psVar8 = &gUnk_0200AF00.unk_14; + } + + switch ((s32)element->unk_8) { + case 7: + case 8: + playerItemCount = gSave.stats.bombCount; + if (*psVar8 != playerItemCount) { + *psVar8 = playerItemCount + 0x80; + } + itemMaxNumber = gBombBagSizes[gSave.stats.bombBagType]; + break; + case 9: + case 10: + playerItemCount = gSave.stats.arrowCount; + if (*psVar8 != playerItemCount) { + *psVar8 = playerItemCount + 0x80; + } + itemMaxNumber = gQuiverSizes[gSave.stats.quiverType]; + break; + default: + itemMaxNumber = 1; + playerItemCount = 0; + break; + } + + uVar5 = 3; + if (itemMaxNumber <= playerItemCount) { + uVar5 = 4; + } + element->unk_18 = uVar5; + element2 = FindUIElement(uiElementType); + if (element2 != 0) { + element->x = element2->x; + element->y = element2->y; + element->unk_0_1 = 1; + sub_0801CAD0(element); + } +} void TextUIElement(UIElement* element) { UIElement* buttonUIElement;