clean ui.c a bit

This commit is contained in:
Henny022p 2023-01-04 23:13:52 +01:00
parent e38301fc17
commit 42a8d94e8f
1 changed files with 78 additions and 84 deletions

162
src/ui.c
View File

@ -10,7 +10,6 @@
#include "game.h" #include "game.h"
extern void sub_0805ECEC(u32, u32, u32, u32); extern void sub_0805ECEC(u32, u32, u32, u32);
extern bool32 ItemIsBottle(u32);
extern u32 sub_08000E44(u32); extern u32 sub_08000E44(u32);
extern const u16 gUnk_080C8F2C[]; extern const u16 gUnk_080C8F2C[];
@ -45,13 +44,13 @@ void DrawChargeBar(void);
void DrawRupees(void); void DrawRupees(void);
void DrawKeys(void); void DrawKeys(void);
void CreateUIElement(u32, u32); void CreateUIElement(u32, u32);
void DrawDigits(u32, u32, u32, u32); void RenderDigits(u32, u32, u32, u32);
void sub_0801CAFC(UIElement*, u32); void sub_0801CAFC(UIElement*, u32);
void sub_0801CB20(UIElement*, UIElementDefinition*); void sub_0801CB20(UIElement*, UIElementDefinition*);
UIElement* FindUIElement(u32); UIElement* FindUIElement(u32);
void sub_0801CAD0(UIElement*); void sub_0801CAD0(UIElement*);
void sub_0801CAB8(UIElement*, Frame*); void sub_0801CAB8(UIElement*, Frame*);
void sub_0801C824(void); void EraseChargeBar(void);
void UpdateUIElements(void) { void UpdateUIElements(void) {
u32 index; u32 index;
@ -70,7 +69,7 @@ void DrawUIElements(void) {
u32 index; u32 index;
UIElement* element; UIElement* element;
UIElementDefinition* definition; UIElementDefinition* definition;
index = 0;
for (index = 0; index < MAX_UI_ELEMENTS; index++) { for (index = 0; index < MAX_UI_ELEMENTS; index++) {
element = &gUnk_0200AF00.elements[index]; element = &gUnk_0200AF00.elements[index];
if (element->used == 1 && element->unk_0_1 == 1) { if (element->used == 1 && element->unk_0_1 == 1) {
@ -86,7 +85,6 @@ void DrawUIElements(void) {
} }
void sub_0801C25C(void) { void sub_0801C25C(void) {
u32 uVar1;
s32 index; s32 index;
u8 tmp; u8 tmp;
UIElement* element; UIElement* element;
@ -116,7 +114,6 @@ void sub_0801C25C(void) {
void sub_0801C2F0(u32 param_1, u32 param_2) { void sub_0801C2F0(u32 param_1, u32 param_2) {
u32 uVar1; u32 uVar1;
register u32 rem asm("r1"); register u32 rem asm("r1");
vu32* ptr;
param_1 = param_1 * 0x20 + 0x6010000; param_1 = param_1 * 0x20 + 0x6010000;
uVar1 = Div(param_2, 10); uVar1 = Div(param_2, 10);
@ -201,42 +198,42 @@ void DrawRupees(void) {
u32 cVar1; u32 cVar1;
u32 temp; u32 temp;
u32 temp2; u32 temp2;
u16* ptr; u16* row1;
u16* ptr2; u16* row2;
if ((gUnk_0200AF00.unk_1 & 0x40) != 0) { if ((gUnk_0200AF00.unk_1 & 0x40) != 0) {
if (gUnk_0200AF00.unk_a != 0) { if (gUnk_0200AF00.unk_a != 0) {
gUnk_0200AF00.unk_a = 0; gUnk_0200AF00.unk_a = 0;
ptr = &gBG0Buffer[0x258]; row1 = &gBG0Buffer[0x258];
ptr[0] = 0; row1[0] = 0;
ptr[1] = 0; row1[1] = 0;
ptr[2] = 0; row1[2] = 0;
ptr[3] = 0; row1[3] = 0;
ptr[4] = 0; row1[4] = 0;
ptr2 = &gBG0Buffer[0x278]; row2 = &gBG0Buffer[0x278];
ptr2[0] = 0; row2[0] = 0;
ptr2[1] = 0; row2[1] = 0;
ptr2[2] = 0; row2[2] = 0;
ptr2[3] = 0; row2[3] = 0;
ptr2[4] = 0; row2[4] = 0;
gScreen.bg0.updated = 1; gScreen.bg0.updated = 1;
} }
} else { } else {
if (gUnk_0200AF00.unk_a == 0) { if (gUnk_0200AF00.unk_a == 0) {
gUnk_0200AF00.unk_a = 2; gUnk_0200AF00.unk_a = 2;
ptr = &gBG0Buffer[0x258]; row1 = &gBG0Buffer[0x258];
ptr2 = &gBG0Buffer[0x278]; row2 = &gBG0Buffer[0x278];
ptr[0] = temp2 = gWalletSizes[gSave.stats.walletType].iconStartTile; row1[0] = temp2 = gWalletSizes[gSave.stats.walletType].iconStartTile;
ptr[1] = temp2 + 1; row1[1] = temp2 + 1;
ptr2[0] = temp2 + 2; row2[0] = temp2 + 2;
ptr2[1] = temp2 + 3; row2[1] = temp2 + 3;
temp2 = 0xf070; temp2 = 0xf070;
ptr[2] = temp2; row1[2] = temp2;
ptr2[2] = temp2 + 1; row2[2] = temp2 + 1;
ptr[3] = temp2 + 2; row1[3] = temp2 + 2;
ptr2[3] = temp2 + 3; row2[3] = temp2 + 3;
ptr[4] = temp2 + 4; row1[4] = temp2 + 4;
ptr2[4] = temp2 + 5; row2[4] = temp2 + 5;
gScreen.bg0.updated = 1; gScreen.bg0.updated = 1;
cVar1 = 1; cVar1 = 1;
} else { } else {
@ -259,8 +256,8 @@ void DrawRupees(void) {
SoundReq(SFX_RUPEE_GET); SoundReq(SFX_RUPEE_GET);
} }
case 1: case 1:
DrawDigits(0x70, gUnk_0200AF00.rupees, RenderDigits(0x70, gUnk_0200AF00.rupees,
gWalletSizes[(u32)gSave.stats.walletType].size <= gUnk_0200AF00.rupees, 3); gWalletSizes[(u32)gSave.stats.walletType].size <= gUnk_0200AF00.rupees, 3);
cVar1 = gUnk_0200AF00.unk_c + 1; cVar1 = gUnk_0200AF00.unk_c + 1;
default: default:
gUnk_0200AF00.unk_c = cVar1; gUnk_0200AF00.unk_c = cVar1;
@ -269,8 +266,7 @@ void DrawRupees(void) {
} }
} }
// Draw icon with text for rupees or keys void RenderDigits(u32 iconVramIndex, u32 count, u32 isTextYellow, u32 digits) {
void DrawDigits(u32 iconVramIndex, u32 count, u32 isTextYellow, u32 digits) {
int iVar2; int iVar2;
int iVar3; int iVar3;
u8* puVar4; u8* puVar4;
@ -290,7 +286,7 @@ void DrawDigits(u32 iconVramIndex, u32 count, u32 isTextYellow, u32 digits) {
digit = Div(count, 100); digit = Div(count, 100);
count = r1; count = r1;
DmaCopy32(3, puVar4 + digit * 0x40, iVar2, 0x10 * 4); DmaCopy32(3, puVar4 + digit * 0x40, iVar2, 0x10 * 4);
iVar2 = iVar3 + 0x600c040; iVar2 += 0x40;
case 2: case 2:
digit = Div(count, 10); digit = Div(count, 10);
count = r1; count = r1;
@ -301,13 +297,13 @@ void DrawDigits(u32 iconVramIndex, u32 count, u32 isTextYellow, u32 digits) {
DmaCopy32(3, puVar4 + count * 0x40, iVar2, 0x10 * 4); DmaCopy32(3, puVar4 + count * 0x40, iVar2, 0x10 * 4);
} }
void sub_0801C66C(void) { void EraseHearts(void) {
u32* ptr; u32* ptr;
s32 index; s32 index;
if (gUnk_0200AF00.unk_2 != 0) { if (gUnk_0200AF00.unk_2 != 0) {
gUnk_0200AF00.unk_2 = 0; gUnk_0200AF00.unk_2 = 0;
if (gUnk_0200AF00.maxHealth > 0x28) { if (gUnk_0200AF00.maxHealth > 10 * 4) {
index = 2; index = 2;
} else { } else {
index = 1; index = 1;
@ -334,18 +330,18 @@ void DrawHearts(void) {
u32 uVar6; u32 uVar6;
s32 maxHealth; s32 maxHealth;
s32 tmp1; s32 tmp1;
u16* ptr2; u16* ptr;
if ((gUnk_0200AF00.unk_1 & 0x10) != 0) { if ((gUnk_0200AF00.unk_1 & 0x10) != 0) {
sub_0801C824(); EraseChargeBar();
sub_0801C66C(); EraseHearts();
return; return;
} }
maxHealth = gSave.stats.maxHealth / 2; maxHealth = gSave.stats.maxHealth / 2;
if (maxHealth != gUnk_0200AF00.maxHealth) { if (maxHealth != gUnk_0200AF00.maxHealth) {
gUnk_0200AF00.maxHealth = maxHealth; gUnk_0200AF00.maxHealth = maxHealth;
sub_0801C824(); EraseChargeBar();
sub_0801C66C(); EraseHearts();
} }
if (gSave.stats.health != 1) { if (gSave.stats.health != 1) {
health = gSave.stats.health / 2; health = gSave.stats.health / 2;
@ -400,33 +396,33 @@ void DrawHearts(void) {
} }
if (uVar1 - 10 > 0) { if (uVar1 - 10 > 0) {
ptr2 = &gBG0Buffer[0x40]; ptr = &gBG0Buffer[0x40];
*ptr2 = 0xf010; *ptr = 0xf010;
DmaSet(3, gUnk_080C8F2C + (10 - uVar6), ptr2 + 1, (uVar1 - 10) | 0x80000000); DmaSet(3, gUnk_080C8F2C + (10 - uVar6), ptr + 1, (uVar1 - 10) | 0x80000000);
} }
ptr2 = &gBG0Buffer[0x20]; ptr = &gBG0Buffer[0x20];
*ptr2 = 0xf010; *ptr = 0xf010;
DmaSet(3, gUnk_080C8F2C + (10 - tmp1), ptr2 + 1, maxHealth | 0x80000000); DmaSet(3, gUnk_080C8F2C + (10 - tmp1), ptr + 1, maxHealth | 0x80000000);
if ((gUnk_0200AF00.health & 3) != 0) { if ((gUnk_0200AF00.health & 3) != 0) {
if (9 < uVar2) { if (9 < uVar2) {
uVar2 -= 10; uVar2 -= 10;
ptr2 += 0x20; ptr += 0x20;
} }
ptr2[uVar2 + 1] = ((gUnk_0200AF00.health & 3) + 0x11) | 0xf000; ptr[uVar2 + 1] = ((gUnk_0200AF00.health & 3) + 0x11) | 0xf000;
} }
gScreen.bg0.updated = 1; gScreen.bg0.updated = 1;
} }
} }
void sub_0801C824(void) { void EraseChargeBar(void) {
u32* ptr; u32* ptr;
if (gUnk_0200AF00.unk_6 != 0) { if (gUnk_0200AF00.unk_6 != 0) {
gUnk_0200AF00.unk_6 = 0; gUnk_0200AF00.unk_6 = 0;
if (gUnk_0200AF00.maxHealth > 10 * 4) { if (gUnk_0200AF00.maxHealth > 10 * 4) {
ptr = (u32*)&gBG0Buffer[0x60]; // Show second row of hearts ptr = (u32*)&gBG0Buffer[0x60];
} else { } else {
ptr = (u32*)&gBG0Buffer[0x40]; ptr = (u32*)&gBG0Buffer[0x40];
} }
@ -454,9 +450,13 @@ void DrawChargeBar(void) {
} }
if (!tmp1) if (!tmp1)
return sub_0801C824(); return EraseChargeBar();
ptr1 = (gUnk_0200AF00.maxHealth > 10 * 4) ? &gBG0Buffer[0x60] : &gBG0Buffer[0x40]; if (gUnk_0200AF00.maxHealth > 10 * 4) {
ptr1 = &gBG0Buffer[0x60];
} else {
ptr1 = &gBG0Buffer[0x40];
}
tmp2 = Div(gPlayerState.chargeState.chargeTimer + 19, 20); tmp2 = Div(gPlayerState.chargeState.chargeTimer + 19, 20);
if (tmp2 > 40) { if (tmp2 > 40) {
@ -495,52 +495,50 @@ void DrawChargeBar(void) {
} }
void DrawKeys(void) { void DrawKeys(void) {
s32 iVar1; u16* row1;
u16* ptr1; u16* row2;
u16* ptr2;
u32 temp; u32 temp;
if (!(((gUnk_0200AF00.unk_1 & 0x80) == 0) && (AreaHasKeys()))) { if (!(((gUnk_0200AF00.unk_1 & 0x80) == 0) && (AreaHasKeys()))) {
if (gUnk_0200AF00.unk_10 != 0) { if (gUnk_0200AF00.unk_10 != 0) {
gUnk_0200AF00.unk_10 = 0; gUnk_0200AF00.unk_10 = 0;
ptr1 = &gBG0Buffer[0x219]; row1 = &gBG0Buffer[0x219];
ptr1[0] = 0; row1[0] = 0;
ptr1[1] = 0; row1[1] = 0;
ptr1[2] = 0; row1[2] = 0;
ptr1[3] = 0; row1[3] = 0;
ptr1[0x20] = 0; row1[0x20] = 0;
ptr1[0x21] = 0; row1[0x21] = 0;
ptr1[0x22] = 0; row1[0x22] = 0;
ptr1[0x23] = 0; row1[0x23] = 0;
gScreen.bg0.updated = 1; gScreen.bg0.updated = 1;
} }
} else { } else {
if (gUnk_0200AF00.unk_10 == 0) { if (gUnk_0200AF00.unk_10 == 0) {
ptr1 = &gBG0Buffer[0x219]; row1 = &gBG0Buffer[0x219];
ptr2 = &gBG0Buffer[0x239]; row2 = &gBG0Buffer[0x239];
temp = 0xf01c; temp = 0xf01c;
ptr1[0] = temp; row1[0] = temp;
ptr1[1] = temp + 1; row1[1] = temp + 1;
ptr2[0] = temp + 2; row2[0] = temp + 2;
ptr2[1] = temp + 3; row2[1] = temp + 3;
temp = 0xf076; temp = 0xf076;
ptr1[2] = temp; row1[2] = temp;
ptr2[2] = temp + 1; row2[2] = temp + 1;
ptr1[3] = temp + 2; row1[3] = temp + 2;
ptr2[3] = temp + 3; row2[3] = temp + 3;
gScreen.bg0.updated = 1; gScreen.bg0.updated = 1;
} }
if ((gUnk_0200AF00.dungeonKeys != gSave.dungeonKeys[gArea.dungeon_idx]) || (gUnk_0200AF00.unk_10 == 0)) { if ((gUnk_0200AF00.dungeonKeys != gSave.dungeonKeys[gArea.dungeon_idx]) || (gUnk_0200AF00.unk_10 == 0)) {
gUnk_0200AF00.unk_10 = 2; gUnk_0200AF00.unk_10 = 2;
gUnk_0200AF00.dungeonKeys = gSave.dungeonKeys[gArea.dungeon_idx]; gUnk_0200AF00.dungeonKeys = gSave.dungeonKeys[gArea.dungeon_idx];
DrawDigits(0x76, gUnk_0200AF00.dungeonKeys, 0, 2); RenderDigits(0x76, gUnk_0200AF00.dungeonKeys, 0, 2);
} }
} }
} }
void CreateUIElement(u32 type, u32 type2) { void CreateUIElement(u32 type, u32 type2) {
u32 index; u32 index;
UIElement* new_var;
UIElement* element; UIElement* element;
for (index = 0; index < MAX_UI_ELEMENTS; index++) { for (index = 0; index < MAX_UI_ELEMENTS; index++) {
@ -674,7 +672,6 @@ u32 sub_0801CC80(UIElement* element) {
void ItemUIElement(UIElement* element) { void ItemUIElement(UIElement* element) {
u32 itemMaxNumber; u32 itemMaxNumber;
u32 itemId; u32 itemId;
u8* puVar3;
UIElement* element2; UIElement* element2;
u32 uVar5; u32 uVar5;
u32 playerItemCount; u32 playerItemCount;
@ -743,9 +740,6 @@ void ItemUIElement(UIElement* element) {
void TextUIElement(UIElement* element) { void TextUIElement(UIElement* element) {
UIElement* buttonUIElement; UIElement* buttonUIElement;
u32 tmp; u32 tmp;
extern struct_0200AF00* ptr;
u32 tmp1;
UIElement* ptr2;
if (element->type2 == 9) { if (element->type2 == 9) {
tmp = gUnk_0200AF00.unk_2f; tmp = gUnk_0200AF00.unk_2f;