diff --git a/include/hud.h b/include/hud.h index 16776daf..7d924f83 100644 --- a/include/hud.h +++ b/include/hud.h @@ -11,10 +11,11 @@ typedef struct UnkStruct_func_80095350 { /* 0xB6 */ s16 unkB6; } UnkStruct_func_80095350; -void func_80084E78(Gfx**, void*, void*, s32, s32, f32, f32, f32, f32, f32, f32); +void func_80084E78(Gfx** gfxP, void* arg1, void* arg2, u32 arg3, u32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, + f32 arg9, f32 argA); void func_80085944(void); -void func_80086CC8(void); -void func_80086DCC(void); +void func_80086CC8(void); +void func_80086DCC(void); void func_80087B5C(void); void func_80089994(s32 arg0); void func_8008A4DC(void); @@ -24,18 +25,18 @@ void func_8008B2F0(void); void func_8008B734(void); void func_8008B9E8(void); void func_8008BAE4(void); -void func_8008CBE4(void); -void func_8008D250(void); -void func_8008D31C(void); -void func_8008D4F0(f32, f32); -void func_8008D7F4(void); -void func_8008D984(void); +void func_8008CBE4(void); +void func_8008D250(void); +void func_8008D31C(void); +void func_8008D4F0(f32, f32); +void func_8008D7F4(void); +void func_8008D984(void); void func_8008DC34(void); void func_8008E5E8(void); s32 func_80090E8C(Object_2F4* arg0); s32 func_800910C0(Object_2F4* arg0); void func_8009C320(Gfx**, void*, void*, s32, s32, f32, f32, f32, f32); -void func_8009D0BC(Gfx**, void*, void*, u32, u32, f32, f32, f32, f32); +void func_8009D0BC(Gfx**, void*, void*, u32, u32, f32, f32, f32, f32); void func_8009E1E8(Gfx**, u16*, s32, s32, f32, f32, f32, f32); // Weird addresses, assets maybe? diff --git a/include/structs.h b/include/structs.h index d8f87fbd..568ee682 100644 --- a/include/structs.h +++ b/include/structs.h @@ -135,7 +135,7 @@ typedef struct UnkStruct_D_80178280 { /* 0x138 */ f32 unk_138; /* 0x13C */ char pad13C[0x8C]; /* 0x1C8 */ s32 unk_1C8; - /* 0x1CC */ char pad1CC[0x4]; + /* 0x1CC */ s32 unk_1CC; /* 0x1D0 */ s32 unk_1D0; /* 0x1D4 */ char pad1D4[0x3C]; /* 0x210 */ s32 unk_210; diff --git a/include/variables.h b/include/variables.h index d6761c6f..a9f514fb 100644 --- a/include/variables.h +++ b/include/variables.h @@ -513,6 +513,8 @@ extern Gfx D_200F080[]; extern Gfx D_200F910[]; extern Gfx D_20101A0[]; +extern u8 D_3000000[]; +extern u16 D_3000080[]; extern u16 D_3000BC0[]; extern u8 D_300D350[]; extern u16 D_300D398[]; @@ -542,6 +544,7 @@ extern u8 D_500A500[]; extern u8 D_500A5F0[]; extern u8 D_500A6E0[]; extern u8 D_500A7D0[]; +extern Gfx D_500B600[]; extern ObjectInit* D_6010088[]; extern ObjectInit* D_602B148[]; @@ -549,6 +552,8 @@ extern ObjectInit* D_602F18C[]; extern ObjectInit* D_C0356A4[]; extern Gfx D_6004570[]; +extern u8 D_6001B80[]; +extern u8 D_60020D0[]; extern Gfx D_D0098B0[]; extern Gfx D_F014180[]; diff --git a/src/main/sf_hud.c b/src/main/sf_hud.c index c8f20b33..a98961f9 100644 --- a/src/main/sf_hud.c +++ b/src/main/sf_hud.c @@ -1,10 +1,124 @@ #include "hud.h" +#ifdef IMPORT_DATA_PENDING +void func_80084930(f32 arg0, f32 arg1, s32 arg2) { + u8* D_800D1A58[] = { + D_3000000, + D_3000000, + D_3000000, + }; + u16* D_800D1A64[] = { + D_3000080, + D_3000080, + D_3000080, + }; + UnkStruct_D_80178280* temp; + s32 var_t0; + s32 var_v0; + s32 i; + + func_800B8DD0(&gMasterDisp, 0x4E); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); + + temp = D_80178280; + var_t0 = 0; + + switch (temp->unk_1CC) { + case 0: + var_t0 = 0; + break; + case 1: + var_t0 = 1; + break; + case 2: + var_t0 = 2; + break; + } + + func_8009C320(&gMasterDisp, D_800D1A58[var_t0], D_800D1A64[var_t0], 16, 16, arg0, arg1 - 2.0f, 1.0f, 1.0f); + func_8009C320(&gMasterDisp, D_1011ED0, D_1011F08, 16, 7, arg0 + 16.0f, arg1 + 7.0f, 1.0f, 1.0f); + + if (arg2 >= 0) { + arg0 += 11.0f; + arg1 -= 1.0f; + + func_800B8DD0(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); + + var_v0 = 10; + + if (arg2 < 0) { + arg2 = 0; + } + + if (arg2 > 99) { + arg2 = 99; + } + + for (var_v0 = 10, i = 1; arg2 >= var_v0; i++) { + var_v0 *= 10; + } + + arg0 += 16.0f + 8 * (2 - i); + func_800869A0(arg0, arg1, arg2, 1.0f, 1, 99); + } +} +#else #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80084930.s") +#endif +#ifdef IMPORT_DATA_PENDING +void func_80084B94(s32 arg0) { + s32 i; + Vec3f D_800D1A70[] = { + { 191.0f, -129.0f, -600.0f }, + { 0.0f, -129.0f, -600.0f }, + { -191.0f, -129.0f, -600.0f }, + }; + + func_800B8DD0(&gMasterDisp, 0x24); + if (arg0 == 0) { + for (i = 1; i < 4; i++) { + if (((D_801778B0[i] != 0) || (D_80178280->unk_1C8 != 7)) && (D_801778B0[i] <= 0) && (D_801778B0[i] != -2)) { + Matrix_Push(&D_8013B3C0); + Matrix_Translate(D_8013B3C0, D_800D1A70[i - 1].x, D_800D1A70[i - 1].y, D_800D1A70[i - 1].z, 1); + Matrix_Scale(D_8013B3C0, 0.68f, 0.68f, 1.0f, 1); + Matrix_RotateZ(D_8013B3C0, 0.7853982f, 1); + Matrix_SetGfxMtx(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_500B600); + Matrix_RotateZ(D_8013B3C0, 4.712389f, 1); + Matrix_SetGfxMtx(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_500B600); + Matrix_Pop(&D_8013B3C0); + } + } + } else { + Matrix_Push(&D_8013B3C0); + Matrix_Translate(D_8013B3C0, -234.0f, -167.0f, -600.0f, 1); + Matrix_RotateZ(D_8013B3C0, 0.7853982f, 1); + Matrix_Scale(D_8013B3C0, 0.68f, 0.68f, 1.0f, 1); + Matrix_SetGfxMtx(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_500B600); + Matrix_RotateZ(D_8013B3C0, 4.712389f, 1); + Matrix_SetGfxMtx(&gMasterDisp); + gSPDisplayList(gMasterDisp++, D_500B600); + Matrix_Pop(&D_8013B3C0); + } +} +#else #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80084B94.s") +#endif -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80084E78.s") +void func_80084E78(Gfx** gfxP, void* arg1, void* arg2, u32 arg3, u32 arg4, f32 arg5, f32 arg6, f32 arg7, f32 arg8, + f32 arg9, f32 argA) { + gDPPipeSync((*gfxP)++); + gDPLoadTLUT((*gfxP)++, 0x100, 0x100, arg2); + gDPLoadTextureBlock((*gfxP)++, arg1, G_IM_FMT_CI, G_IM_SIZ_8b, arg3, arg4, 0, G_TX_NOMIRROR, G_TX_NOMIRROR, + G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); + gSPTextureRectangle((*gfxP)++, (arg5 * 4.0f), (arg6 * 4.0f), ((arg5 + (arg9 * arg7)) * 4.0f), + ((arg6 + (argA * arg8)) * 4.0f), G_TX_RENDERTILE, 0 * 0x20, 0 * 0x20, (s32) (1 / arg7 * 0x400), + (s32) (1 / arg8 * 0x400)); +} void func_800853A4(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { func_8009D0BC(&gMasterDisp, &D_1013170, &D_1013570, 24, 17, arg0, arg1, arg2, arg3); @@ -160,7 +274,45 @@ s32 func_800863C8(void) { return var_v1; } +#ifdef IMPORT_DATA_PENDING +void func_80086444(void) { + s32 i = 9; + s32 j; + + u8* D_800D1C9C[] = { D_6001B80, D_60020D0 }; + s32 D_800D1CA4[] = { 128, 104 }; + s32 D_800D1CAC[] = { 19, 19 }; + f32 D_800D1CB4[] = { 96.0f, 112.0f }; + f32 D_800D1CBC[] = { 89.0f, 89.0f }; + f32 D_800D1CC4[] = { 2.0f, 5.0f }; + f32 D_800D1CCC[] = { 1.6f, 1.6f }; + + switch (D_80178234) { + case 19: + i = 1; + break; + + case 6: + i = 0; + break; + + default: + break; + } + + if (i != 9) { + func_800B8DD0(&gMasterDisp, 0x4C); + gDPSetPrimColor(gMasterDisp++, 0, 0, 255, 255, 255, 255); + + for (j = 0; j < 19; j++) { + func_8009D994(&gMasterDisp, D_800D1C9C[i] + (D_800D1CA4[i] * j), D_800D1CA4[i], 1, D_800D1CB4[i], + D_800D1CBC[i] + j - 28.0f, 1.0f, 1.0f); + } + } +} +#else #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80086444.s") +#endif #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80086664.s")