From fd742f93be7e04a7cd2565300ab7ea34db1ff05e Mon Sep 17 00:00:00 2001 From: Alejandro Asenjo Nitti <96613413+sonicdcer@users.noreply.github.com> Date: Mon, 23 Oct 2023 13:01:29 -0300 Subject: [PATCH] sf_hud functions + code organization (#8) * decompile func_80086C08 * decompile func_80086CC8 * format * decompile func_80088784 * preserve macros * better match func_80005708 * format * *arg0 * decompile func_80089670 * decompile func_80089710 * decompile func_800897B0 * decompile func_80089850 * decompile func_800898F0 * decompile func_80089994 * decompile func_80089AF4 * decompile func_80089B94 * decompile func_80089C38 * decompile func_80089D28 * space * format * decompile func_80089E98 * correction * declare segmented addresses in func_80088784 * segmented addresses in undefined_syms * correction * Gfx type * *arg0 + 1 in func_80005708 * roll back s32 -> Gfx * fix * array of Gfx pointers * decompile func_8008AD94 * decompile func_8008AD94 * decompile func_8008B1B0 * decompile func_8008B2F0 * create structs.h * reordering * format * decompile func_8008B5B0 * decompile func_8008B9E8 * decompile func_8008BAE4 * decompile func_8008C390 * fixes * fixes * fix warnings * move protos to functions header * move variables to variables.h * roll back segmented config in header --- include/functions.h | 65 +++- include/global.h | 3 +- include/hud.h | 21 +- include/sf64math.h | 2 +- include/structs.h | 26 ++ include/variables.h | 171 +++++++++ linker_scripts/us/undefined_syms.ld | 39 ++ src/main/5A20.c | 1 - src/main/6280.c | 10 +- src/main/sf_hud.c | 538 +++++++++++++++++++++++++-- src/overlays/segment_DF4260/DFEE30.c | 2 +- src/overlays/segment_DF4260/DFEE30.h | 6 - src/overlays/segment_EBFBE0/EBFCA0.c | 147 -------- tools/permuter_settings.toml | 4 + 14 files changed, 837 insertions(+), 198 deletions(-) create mode 100644 include/structs.h diff --git a/include/functions.h b/include/functions.h index a3dbec09..f6477d09 100644 --- a/include/functions.h +++ b/include/functions.h @@ -1,12 +1,67 @@ #ifndef FUNCTIONS_H #define FUNCTIONS_H -void func_80005C34(s32, f32, f32, f32, s32); +f32 func_80005100(f32 arg0, f32 arg1); +void func_80005680(Matrix*, Matrix*); +void func_80005708(Matrix ** mtx); +void func_80005740(Matrix** mtx); +void func_80005B00(Matrix*, f32, f32, f32, u8); +void func_80005C34(Matrix*, f32, f32, f32, s32); void func_80006EB8(Gfx **); -s32 func_8008BCBC(s32 /*arg0*/); -void func_8009D994(Gfx*, void*, u32, u32, f32, f32, f32, f32); +void func_80006F20(void); + +void func_800182F4(s32); +void func_80019218(u32, f32*, u8, f32*, f32*, s8*); +void func_8001A838(u32 arg0); +void func_8001AF40(s32 arg0); +void func_8001DC6C(s32, s32); + +void func_80084688(s32, s32); +void func_80086664(f32, f32); +s32 func_8008B774(void); +s32 func_8008BCBC(s32 arg0); + +void func_8009BC2C(f32*, f32, f32, f32, f32); +void func_8009D994(Gfx**, void*, u32, u32, f32, f32, f32, f32); void func_8009FEA0(s32, s32, s32); -void func_800A1200(s32, s32, f32, f32, s32*); -void func_800B8DD0(Gfx **, s32); +void func_800A1200(s32, s32, f32, f32, char*); +void func_800A5D6C(void); +void func_800B8DD0(Gfx **, s16); +void func_800BB5D0(void); +void func_800B6F50(f32, f32, f32, f32, f32, f32); + +void func_801877F0_EBFEB0(void); +s32 func_80187ABC_EC017C(void); +void func_80187B00_EC01C0(void); +void func_80187E28_EC04E8(void); +void func_801888E8_EC0FA8(void); +void func_8018994C_EC200C(void); +void func_8018A644_EC2D04(void); +void func_8018ACEC_EC33AC(void); +void func_8018B5C4_EC3C84(void); +void func_8018C644_EC4D04(void); +void func_80190E64_EC9524(void); +void func_8019111C_EC97DC(void); +void func_80187CA8_EC0368(void); +void func_80188010_EC06D0(void); +void func_80189208_EC18C8(void); +void func_8018A2F8_EC29B8(void); +void func_8018A990_EC3050(void); +void func_8018B038_EC36F8(void); +void func_8018C114_EC47D4(void); +void func_8018CB90_EC5250(void); +void func_8018F680_EC7D40(void); +void func_8018F77C_EC7E3C(void); +void func_8018F85C_EC7F1C(void); +void func_8018F8E4_EC7FA4(void); +void func_8018FC14_EC82D4(void); +void func_8018FD08_EC83C8(void); +void func_8018FF74_EC8634(void); +void func_801906A0_EC8D60(void); +void func_80190C9C_EC935C(void); +void func_801918FC_EC9FBC(void); +void func_8018D2B8_EC5978(s32); +void func_8018EA78_EC7138(s32); +void func_80191674_EC9D34(f32, f32, f32, f32*, f32*, f32*); #endif diff --git a/include/global.h b/include/global.h index a53ea5ba..b62c335c 100644 --- a/include/global.h +++ b/include/global.h @@ -5,9 +5,8 @@ #include "PR/mbi.h" #include "functions.h" #include "variables.h" +#include "structs.h" #include "macros.h" #include "sf64math.h" -extern Gfx* D_80137E64; - #endif // GLOBAL_H diff --git a/include/hud.h b/include/hud.h index 6c4b8f94..b09babe1 100644 --- a/include/hud.h +++ b/include/hud.h @@ -13,16 +13,17 @@ typedef struct UnkStruct_func_80095350 { void func_800612B8(void*, u16, void*); void func_800613C4(void*); -void func_80084E78(s32*, s32*, s32*, s32, s32, f32, f32, f32, f32, f32, f32); +void func_80084E78(Gfx**, s32*, s32*, s32, s32, f32, f32, f32, f32, f32, f32); void func_80085944(void); void func_80086CC8(void); void func_80086DCC(void); void func_80087B5C(void); +void func_80089994(s32 arg0); void func_8008A4DC(void); void func_8008B044(void); void func_8008B1B0(void); void func_8008B2F0(void); -void func_8008B5B0(f32, f32); +void func_8008B5B0(f32 arg0, f32 arg1); void func_8008B734(void); void func_8008B9E8(void); void func_8008BAE4(void); @@ -37,10 +38,9 @@ void func_8008E5E8(void); void func_8008E620(void); void func_80090E8C(void); void func_800910C0(void); -void func_8009C320(Gfx*, s32*, s32*, s32, s32, f32, f32, f32, f32); -void func_8009D0BC(Gfx*, void*, void*, u32, u32, f32, f32, f32, f32); -void func_8009D994(Gfx*, void*, u32, u32, f32, f32, f32, f32); -void func_8009E1E8(Gfx*, s32*, s32, s32, f32, f32, f32, f32); +void func_8009C320(Gfx**, s32*, s32*, s32, s32, f32, f32, f32, f32); +void func_8009D0BC(Gfx**, void*, void*, u32, u32, f32, f32, f32, f32); +void func_8009E1E8(Gfx**, s32*, s32, s32, f32, f32, f32, f32); // Weird addresses, assets maybe? extern s32 D_1000E80; @@ -58,17 +58,22 @@ extern s32 D_1011CA0; extern s32 D_1011D70; extern s32 D_1011D90; extern s32 D_1011E60; -extern s32 D_1013170; -extern s32 D_1013570; +extern s32 D_1013170[]; +extern s32 D_1013570[]; extern s32 D_1013580; extern s32 D_1013700; +extern s32 D_20031B0[]; +extern s32 D_2010A30[]; extern s32 D_3000B20; extern s32 D_30013E0; extern s32 D_80161690; +extern s32 D_80161718; +extern s32 D_8016171C; extern s32 D_801617E8[]; extern s32 D_801617FC; extern s32 D_80161A98; +extern s32 D_80177838; extern s32 D_80177854; extern s32 D_80177880; extern s32 D_801778B0[]; diff --git a/include/sf64math.h b/include/sf64math.h index ecff4f33..eb8f02f8 100644 --- a/include/sf64math.h +++ b/include/sf64math.h @@ -19,4 +19,4 @@ typedef struct { /* 0x8 */ f32 z; } Vec3f; // size = 0xC -#endif \ No newline at end of file +#endif diff --git a/include/structs.h b/include/structs.h new file mode 100644 index 00000000..799a50e8 --- /dev/null +++ b/include/structs.h @@ -0,0 +1,26 @@ +#ifndef STRUCTS_H +#define STRUCTS_H + +#include "global.h" +#include "sf64math.h" + +typedef struct UnkStruct_D_801B8350 { + /* 0x00 */ Vec3f unk0; + /* 0x0C */ char pad_0C[0x4C]; + /* 0x54 */ s32 unk54; + /* 0x58 */ s32 unk58; +} UnkStruct_D_801B8350; + +typedef struct UnkStruct_D_80178280 { + /* 0x000 */ char pad_0[0x07C]; + /* 0x07C */ f32 unk07C; + /* 0x080 */ char pad_80[0x148]; + /* 0x1C8 */ s32 unk1C8; + /* 0x1CC */ char pad_1CC[0x98]; + /* 0x264 */ s32 unk264; + /* 0x268 */ char pad_268[0x4]; + /* 0x26C */ s32 unk26C; + /* 0x270 */ char pad_270[0x270]; +} UnkStruct_D_80178280; // size = 0x4E0 + +#endif diff --git a/include/variables.h b/include/variables.h index e95d5995..91963a84 100644 --- a/include/variables.h +++ b/include/variables.h @@ -1,7 +1,178 @@ #ifndef VARIABLES_H #define VARIABLES_H +#include "structs.h" +extern f32 D_800C5D34; +extern s8 D_800C5D3C; +extern s32 D_800CFF90; +extern Gfx D_800D1A40[]; +extern s32 D_800D1EB4; +extern s32 D_800D1EB8; +extern s32 D_800D1EBC; +extern s32 D_800D2870; +extern u8 D_800DD8B0[]; +extern s32 D_800DD8B4; + +extern Gfx* D_80137E64; +extern u8 D_80137E78; + +extern s32 D_80161690; +extern s32 D_80161730; +extern s32 D_80161788; +extern s32 D_8016178C; +extern s32 D_80161790; +extern s32 D_80161794; +extern s32 D_80161798; +extern f32 D_8016179C; +extern f32 D_801617A0; +extern f32 D_801617A4; +extern f32 D_801617A8; +extern f32 D_801617AC; +extern s32 D_801617B0; +extern s16 D_80161A34; +extern s16 D_80161A36; +extern u8 D_80161A90[]; + +extern UnkStruct_D_80178280* D_80178280; +extern s32 D_80177834; +extern s32 D_8017783C; +extern s32 D_80177898; +extern s32 D_801778A0; +extern s32 D_801778A8; +extern s32 D_801778E8; +extern f32 D_80177978; +extern f32 D_80177980; +extern f32 D_80177988; +extern f32 D_801779A0; +extern f32 D_801779B8; +extern f32 D_801779C0; +extern s32 D_80177AE0; +extern s32 D_80177AF8; +extern u8 D_80177C98; +extern f32 D_80177D68; +extern s32 D_80177DB0; +extern s32 D_8017829C; +extern s32 D_801782A4; +extern s32 D_80178320; +extern s32 D_80178328; +extern s32 D_80178330; +extern s32 D_80178340; +extern s32 D_80178348; +extern s32 D_80178350; +extern s32 D_80178354; +extern s32 D_80178410; +extern f32 D_80178420; +extern f32 D_80178424; +extern f32 D_8017842C; +extern s32 D_80178548; +extern s32 D_8017854C; +extern s32 D_80178550; +extern s32 D_80178554; +extern s32 D_80178558; +extern s32 D_8017855C; + +extern f32 D_801B7BC8; +extern f32 D_801B7BCC; +extern s32 D_801B8220[]; +extern u8 D_801B8248[][4]; +extern s32 D_801B827C; +extern s32 D_801B8280; +extern s32 D_801B8284; +extern s32 D_801B8288; +extern s32 D_801B82A8; +extern s32 D_801B82AC; +extern s32 D_801B82BC; +extern s32 D_801B82C0; +extern s32 D_801B82C4; +extern f32 D_801B82E0; +extern f32 D_801B82E4; +extern f32 D_801B82E8; +extern s32 D_801B82F8; +extern s32 D_801B82FC; +extern s32 D_801B8300; +extern f32 D_801B8304; +extern f32 D_801B8308; +extern f32 D_801B830C; +extern s32 D_801B8310; +extern s32 D_801B8314; +extern s32 D_801B8318; +extern s32 D_801B831C; +extern s32 D_801B8320; +extern s32 D_801B8324; +extern f32 D_801B833C; +extern s32 D_801B8344; +extern s32 D_801B8348; +extern s32 D_801B86A4; +extern f32 D_801B86C8; +extern f32 D_801B86CC; +extern f32 D_801B86D0; +extern f32 D_801B86D4; +extern f32 D_801B86D8; +extern f32 D_801B86DC; +extern s32 D_801B9040; +extern f32 D_801B905C; +extern f32 D_801B9060; +extern f32 D_801B9064; + +extern Matrix* D_8013B3C0; +extern f32 D_800C5D28[]; + +extern s32 D_801ADA44_EE6104[]; +extern s32 D_801ADA84_EE6144[]; +extern s32 D_801ADA94_EE6154; + +extern Gfx D_1015510[]; +extern Gfx D_1024230[]; +extern Gfx D_1024830[]; +extern Gfx D_102A8A0[]; +extern Gfx D_1024AC0[]; + + +extern Gfx D_2000000[]; +extern Gfx D_2000890[]; +extern Gfx D_2001090[]; +extern Gfx D_2001120[]; +extern Gfx D_20019B0[]; +extern Gfx D_2002120[]; +extern Gfx D_2002240[]; +extern Gfx D_2002AD0[]; +extern Gfx D_2003360[]; +extern Gfx D_2003BF0[]; +extern Gfx D_2004240[]; +extern Gfx D_2004480[]; +extern Gfx D_2004D10[]; +extern Gfx D_20052D0[]; +extern Gfx D_20055A0[]; +extern Gfx D_2005E30[]; +extern Gfx D_2006360[]; +extern Gfx D_20066C0[]; +extern Gfx D_20073F0[]; +extern Gfx D_2008480[]; +extern Gfx D_2009510[]; +extern Gfx D_200A5A0[]; +extern Gfx D_200B630[]; +extern Gfx D_200C6C0[]; +extern Gfx D_200E7F0[]; +extern Gfx D_200F080[]; +extern Gfx D_200F910[]; +extern Gfx D_20101A0[]; + +extern u8 D_5000000[]; +extern u8 D_5000080[]; +extern u8 D_5000100[]; +extern u8 D_5000180[]; +extern u8 D_5000200[]; +extern u8 D_5000280[]; +extern u8 D_5000300[]; +extern u8 D_5000380[]; +extern u8 D_5000400[]; +extern u8 D_5000480[]; +extern s32 D_50077B0; + +extern Gfx D_6004570[]; +extern Gfx D_D0098B0[]; +extern Gfx D_F014180[]; #endif // VARIABLES_H diff --git a/linker_scripts/us/undefined_syms.ld b/linker_scripts/us/undefined_syms.ld index e69de29b..0e4fd647 100644 --- a/linker_scripts/us/undefined_syms.ld +++ b/linker_scripts/us/undefined_syms.ld @@ -0,0 +1,39 @@ +D_2000000 = 0x02000000; +D_2000890 = 0x02000890; +D_2001090 = 0x02001090; +D_2001120 = 0x02001120; +D_20019B0 = 0x020019B0; +D_2002120 = 0x02002120; +D_2002240 = 0x02002240; +D_2002AD0 = 0x02002AD0; +D_2003360 = 0x02003360; +D_2003BF0 = 0x02003BF0; +D_2004240 = 0x02004240; +D_2004480 = 0x02004480; +D_2004D10 = 0x02004D10; +D_20052D0 = 0x020052D0; +D_20055A0 = 0x020055A0; +D_2005E30 = 0x02005E30; +D_2006360 = 0x02006360; +D_20066C0 = 0x020066C0; +D_20073F0 = 0x020073F0; +D_2008480 = 0x02008480; +D_2009510 = 0x02009510; +D_200A5A0 = 0x0200A5A0; +D_200B630 = 0x0200B630; +D_200C6C0 = 0x0200C6C0; +D_200E7F0 = 0x0200E7F0; +D_200F080 = 0x0200F080; +D_200F910 = 0x0200F910; +D_20101A0 = 0x020101A0; + +D_5000000 = 0x05000000; +D_5000080 = 0x05000080; +D_5000100 = 0x05000100; +D_5000180 = 0x05000180; +D_5000200 = 0x05000200; +D_5000280 = 0x05000280; +D_5000300 = 0x05000300; +D_5000380 = 0x05000380; +D_5000400 = 0x05000400; +D_5000480 = 0x05000480; \ No newline at end of file diff --git a/src/main/5A20.c b/src/main/5A20.c index ceea235e..d0a0577b 100644 --- a/src/main/5A20.c +++ b/src/main/5A20.c @@ -7,7 +7,6 @@ extern s32 D_8013B3AC; extern s32 D_8013B3B0; extern s32 D_8013B3B4; -extern void func_80005680(s32, s32); extern f32 func_8001FBE8(f32); extern u64 osGetTime(void); diff --git a/src/main/6280.c b/src/main/6280.c index 07600f34..2438213c 100644 --- a/src/main/6280.c +++ b/src/main/6280.c @@ -3,13 +3,13 @@ // https://decomp.me/scratch/8H8k4 100% #pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80005680.s") -void func_80005708(s32* arg0) { - func_80005680(*arg0 + 64, *arg0); - *arg0 += 0x40; +void func_80005708(Matrix** mtx) { + func_80005680(*mtx + 1, *mtx); + *mtx += 1; } -void func_80005740(s32* arg0) { - *arg0 -= 64; +void func_80005740(Matrix** mtx) { + *mtx -= 1; } #pragma GLOBAL_ASM("asm/us/nonmatchings/main/6280/func_80005754.s") diff --git a/src/main/sf_hud.c b/src/main/sf_hud.c index 016d4090..8b477317 100644 --- a/src/main/sf_hud.c +++ b/src/main/sf_hud.c @@ -1,8 +1,5 @@ #include "hud.h" -extern s32 D_8013B3C0; -extern Gfx D_F014180[]; - #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80084930.s") #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80084B94.s") @@ -131,9 +128,40 @@ s32 func_800863C8(void) { #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_800869A0.s") -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80086C08.s") +void func_80086C08(f32 arg0, f32 arg1, f32 arg2, f32 arg3) { + func_800B8DD0(&D_80137E64, 0x4E); + gDPSetPrimColor(D_80137E64++, 0, 0, 60, 60, 128, 96); + gDPSetAlphaDither(D_80137E64++, G_AD_DISABLE); + func_8009D0BC(&D_80137E64, D_1013170, D_1013570, 24, 17, arg0, arg1, arg2, arg3); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80086CC8.s") +void func_80086CC8(void) { + char pad; + f32 sp18; + f32 temp; + + if ((D_80177854 != 0x64) && (D_80177838 != 0)) { + D_80177838 -= 1; + } + + if (D_80177838 == 1) { + D_80161718 = 30; + D_8016171C = 0; + } + + temp = 108.0f; + sp18 = 81.0f; + + if (D_80177838 != 0) { + func_80086C08(temp - 4.5f - 32.0f, sp18 - 24.0f - 4.0f, 7.4f, 3.9f); + + if (D_80178234 != 10) { + func_80086C08(122.0f, 122.0f, 2.9f, 1.2f); + } + + func_80086664(temp, sp18 - 24.0f); + } +} #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80086DCC.s") @@ -177,31 +205,247 @@ void func_8008865C(void) { #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_800886B8.s") +#ifdef IMPORT_DATA_PENDING +void func_80088784(s32 arg0) { + Gfx* D_800D1D4C[] = { + D_200B630, D_200A5A0, D_2009510, D_2008480, D_20073F0, D_2006360, D_200C6C0, D_20052D0, D_2004240, + D_20031B0, D_2002120, D_2001090, D_2000000, D_2010A30, D_20101A0, D_200F910, D_200F080, D_200E7F0, + }; + Gfx* D_800D1D94[] = { + D_20066C0, D_2005E30, D_20055A0, D_2004D10, D_2004480, D_2003BF0, D_2003360, + D_2002AD0, D_2002240, D_20019B0, D_2001120, D_2000890, D_2000000, + }; + s32 D_800D1DC8[] = { + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 200, 150, 100, 50, + }; + + if (arg0 != 0) { + arg0--; + func_800B8DD0(&D_80137E64, 0x24); + gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, D_800D1DC8[arg0]); + func_80005708(&D_8013B3C0); + func_80005B00(D_8013B3C0, 3.9f, -3.3f, -100.0f, 0); + func_80005C34(D_8013B3C0, 0.37f, 0.37f, 0.37f, 1); + func_80006EB8(&D_80137E64); + + if (D_80177C98 == 0) { + gSPDisplayList(D_80137E64++, D_800D1D4C[arg0]); + } else { + gSPDisplayList(D_80137E64++, D_800D1D94[arg0]); + } + + func_80005740(&D_8013B3C0); + } +} +#else #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80088784.s") +#endif #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80088970.s") -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80089670.s") +void func_80089670(void) { + func_800B8DD0(&D_80137E64, 0x3E); + gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_80005C34(D_8013B3C0, 18.64f, 21.04f, 1.0f, 1); + func_80006EB8(&D_80137E64); + gSPDisplayList(D_80137E64++, D_1024AC0); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80089710.s") +void func_80089710(void) { + func_800B8DD0(&D_80137E64, 0x3E); + gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_80005C34(D_8013B3C0, 11.0f, 11.0f, 1.0f, 1); + func_80006EB8(&D_80137E64); + gSPDisplayList(D_80137E64++, D_1024AC0); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_800897B0.s") +void func_800897B0(void) { + func_800B8DD0(&D_80137E64, 0x3E); + gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_80005C34(D_8013B3C0, 130.0f, 130.0f, 1.0f, 1); + func_80006EB8(&D_80137E64); + gSPDisplayList(D_80137E64++, D_1024830); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80089850.s") +void func_80089850(void) { + func_800B8DD0(&D_80137E64, 0x3E); + gDPSetPrimColor(D_80137E64++, 0, 0, 0, 0, 0, 255); + func_80005C34(D_8013B3C0, 125.0f, 125.0f, 1.0f, 1); + func_80006EB8(&D_80137E64); + gSPDisplayList(D_80137E64++, D_102A8A0); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_800898F0.s") +void func_800898F0(void) { + func_800B8DD0(&D_80137E64, 1); + gDPSetPrimColor(D_80137E64++, 0, 0, 255, 208, 80, 255); + func_80005C34(D_8013B3C0, 30.0f, 30.0f, 1.0f, 1); + func_80006EB8(&D_80137E64); + gSPDisplayList(D_80137E64++, D_6004570); +} +#ifdef IMPORT_DATA_PENDING +void func_80089994(s32 arg0) { + s32 D_800D1E14[][4] = { + { 177, 242, 12, 255 }, { 89, 121, 6, 128 }, { 90, 90, 255, 255 }, { 45, 45, 128, 128 }, + { 0, 179, 67, 255 }, { 0, 90, 34, 128 }, { 255, 30, 0, 255 }, { 128, 15, 0, 128 }, + }; + f32 var_fv1; + f32 var_fv2; + + if (D_801778A8 != 1) { + var_fv1 = 38.0f; + var_fv2 = 38.0f; + } else { + var_fv1 = 54.0f; + var_fv2 = 54.0f; + } + + func_800B8DD0(&D_80137E64, 0x3E); + gDPSetPrimColor(D_80137E64++, 0, 0, D_800D1E14[arg0][0], D_800D1E14[arg0][1], D_800D1E14[arg0][2], + D_800D1E14[arg0][3]); + func_80005C34(D_8013B3C0, var_fv1, var_fv2, 1.0f, 1); + func_80006EB8(&D_80137E64); + gSPDisplayList(D_80137E64++, D_1015510); +} +#else #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80089994.s") +#endif -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80089AF4.s") +void func_80089AF4(void) { + func_800B8DD0(&D_80137E64, 0x3E); + gDPSetPrimColor(D_80137E64++, 0, 0, 0, 0, 0, 255); + func_80005C34(D_8013B3C0, 54.0f, 54.0f, 1.0f, 1); + func_80006EB8(&D_80137E64); + gSPDisplayList(D_80137E64++, D_F014180); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80089B94.s") +void func_80089B94(void) { + func_800B8DD0(&D_80137E64, 0x3E); + gDPSetPrimColor(D_80137E64++, 0, 0, 255, 92, 92, 255); + func_80005C34(D_8013B3C0, 54.0f, 54.0f, 1.0f, 1); + func_80006EB8(&D_80137E64); + gSPDisplayList(D_80137E64++, D_D0098B0); +} -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80089C38.s") +void func_80089C38(void) { + s32 alpha; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80089D28.s") + func_800B8DD0(&D_80137E64, 0xC); -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_80089E98.s") + alpha = D_80177DB0 % 21; + + if (alpha > 10) { + alpha = 20 - alpha; + } + + alpha *= 255.0f / 10.0f; + gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, alpha); + func_80005C34(D_8013B3C0, 15.0f, 15.0f, 1.0f, 1); + func_80006EB8(&D_80137E64); + gSPDisplayList(D_80137E64++, D_1024230); +} + +void func_80089D28(void) { + s32 gb; + + func_800B8DD0(&D_80137E64, 1); + + gb = D_80177DB0 % 21; + + if (gb > 10) { + gb = 20 - gb; + } + + gb *= 25.5f; + + if ((gb == 10) || (gb == 0)) { + // clang-format off + //! FAKE: Probably a MACRO + if (1) {func_80019218(0x4900001c, D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C);} + // clang-format on + } + + gDPSetPrimColor(D_80137E64++, 0, 0, 255, gb, gb, 255); + func_80005B00(D_8013B3C0, 0.0f, -185.92001f, 0, 1); + func_80005C34(D_8013B3C0, 3.55f, 0.13f, 1.0f, 1); + func_80006EB8(&D_80137E64); + gSPDisplayList(D_80137E64++, D_1024230); +} + +void func_80089E98(s32 arg0) { + s32 var_a1; + s32 var_a1_2; + + switch (arg0) { + case 0: + case 1: + case 2: + case 3: + var_a1_2 = var_a1 = arg0; + if (D_801778A8 != 1) { + if (arg0 == 1) { + var_a1 = 3; + } + if (arg0 == 3) { + var_a1 = 1; + } + + if (D_80178280[arg0].unk1C8 == 13) { + break; + } + } + if ((var_a1_2 == D_801778A0) && (D_80177DB0 & 2)) { + var_a1 = (var_a1 * 2) + 1; + } else { + var_a1 = var_a1 * 2; + } + func_80089994(var_a1); + break; + + case 4: + case 5: + case 6: + case 7: + func_80089AF4(); + break; + + case 8: + func_80089B94(); + break; + + case 100: + func_800898F0(); + break; + + case 101: + func_80089850(); + break; + + case 102: + func_800897B0(); + break; + + case 103: + if (D_801778E8 == 1) { + func_80089670(); + break; + } + func_80089C38(); + break; + + case 200: + case 201: + func_80089670(); + break; + + case 999: + break; + + default: + func_80089710(); + break; + } +} #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008A07C.s") @@ -211,11 +455,116 @@ void func_8008865C(void) { #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008AC54.s") -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008AD94.s") +void func_8008AD94(void) { + if (D_80177834 == 7) { + func_800B8DD0(&D_80137E64, 0x4C); + gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 0, 255); -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008B044.s") + switch ((s32) D_80177D68) { + case 0: + func_800A1200(73, 173, 1.0f, 1.0f, "FOX"); + break; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008B1B0.s") + case 10: + func_800A1200(73, 173, 1.0f, 1.0f, "FALCO"); + break; + + case 20: + func_800A1200(73, 173, 1.0f, 1.0f, "SLIPPY"); + break; + + case 30: + func_800A1200(73, 173, 1.0f, 1.0f, "PEPPY"); + break; + + case 200: + case 240: + func_800A1200(73, 173, 1.0f, 1.0f, "WOLF"); + break; + + case 220: + case 260: + func_800A1200(73, 173, 1.0f, 1.0f, "LEON"); + break; + + case 210: + case 250: + func_800A1200(73, 173, 1.0f, 1.0f, "PIGMA"); + break; + + case 230: + case 270: + func_800A1200(73, 173, 1.0f, 1.0f, "ANDREW"); + break; + + case 170: + func_800A1200(73, 173, 1.0f, 1.0f, "BILL"); + break; + + case 40: + func_800A1200(73, 173, 1.0f, 1.0f, "KATT"); + break; + } + } +} + +void func_8008B044(void) { + switch (D_80161798) { + case 0: + if (D_80161690 == 0) { + return; + } + + func_80019218(0x49002018, D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); + + if (D_800CFF90 != 0) { + func_8001AF40(1); + } + D_80161794 = 0; + D_80161798 = 1; + + case 1: + if (D_80161690 != 0) { + D_80161790++; + if (D_80161790 >= 7) { + if (D_80161794 & 1) { + func_80019218(0x49002018, D_800C5D28, 4, &D_800C5D34, &D_800C5D34, &D_800C5D3C); + } + D_80161790 = 0; + D_80161794++; + } + D_80161690--; + } else { + D_800CFF90 = 0; + D_80161790 = 0; + D_80161798 = 0; + func_8001A838(0x49002018); + } + break; + } +} + +void func_8008B1B0(void) { + f32 temp = 142.0f; + f32 temp2 = 18.0f; + + func_800B8DD0(&D_80137E64, 0x4E); + gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + + switch (D_80161790 / 2) { + case 3: + func_8008556C(temp + 31.0f, temp2); + case 2: + func_80085514(temp + 24.0f, temp2); + case 1: + func_800854BC(temp + 18.0f, temp2); + case 0: + func_80085464(temp, temp2); + break; + default: + break; + } +} void func_8008B2A4(void) { if (D_80177854 != 100) { @@ -226,9 +575,78 @@ void func_8008B2A4(void) { } } -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008B2F0.s") +void func_8008B2F0(void) { + f32 var_fv0; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008B5B0.s") + switch (D_80161730) { + case 0: + D_801617B0 = 0; + D_8016179C = 20.0f; + D_801617A0 = 18.0f; + + if (D_80161A90[0] >= 3) { + D_801617A4 = D_801617A8 = 1.5f; + } else { + D_801617A4 = D_801617A8 = 1.0f; + } + + var_fv0 = D_80178280->unk264; + D_801617AC = var_fv0 / ((256.0f * D_801617A8) - 1.0f); + + if (D_80161A90[0] >= 3) { + D_80161730 = 2; + } else { + D_80161730 = 1; + } + break; + + case 1: + if (D_80161A90[0] >= 3) { + D_801617B0 = 55; + D_80161730 = 2; + } + + case 2: + D_800D1EB4 = D_800D1EB8 = D_800D1EBC = 255; + if (D_801617B0 > 0) { + if (--D_801617B0 == 0) { + D_80178280->unk26C += 128; + } + } + + if (((D_801617B0 != 0) || ((D_801617A4 - D_801617A8) > 0.1f)) && (D_80177DB0 & 2)) { + D_800D1EB4 = 0; + D_800D1EB8 = 255; + D_800D1EBC = 0; + } + + if ((D_801617B0 == 0) && ((s32) D_80161A90[0] >= 3)) { + D_801617A4 = 1.5f; + } else { + D_801617A4 = 1.0f; + } + + func_8009BC2C(&D_801617A8, D_801617A4, 0.02f, 1000.0f, 0.001f); + + var_fv0 = D_80178280->unk264; + if (var_fv0 > (256.0f * D_801617A8) - 1.0f) { + var_fv0 = (256.0f * D_801617A8) - 1.0f; + } + D_801617AC = var_fv0 / ((256.0f * D_801617A8) - 1.0f); + break; + } +} + +void func_8008B5B0(f32 arg0, f32 arg1) { + func_800B8DD0(&D_80137E64, 0x4B); + gDPSetPrimColor(D_80137E64++, 0, 0, 255, 255, 255, 255); + func_800856C0(arg0 + 8.0f, arg1 + 2.0f, D_801617A8, 1.0f, D_801617AC); + func_800B8DD0(&D_80137E64, 0x4C); + gDPSetPrimColor(D_80137E64++, 0, 0, D_800D1EB4, D_800D1EB8, D_800D1EBC, 0xFF); + func_80085618(arg0, arg1, 1.0f, 1.0f); + func_800855C4(arg0 + 7.0f + (D_801617A8 * 6.0f * 8.0f), arg1, 1.0f, 1.0f); + func_8008566C(arg0 + 7.0f, arg1, D_801617A8 * 6.0f, 1.0f); +} void func_8008B734(void) { func_8008B2F0(); @@ -238,9 +656,64 @@ void func_8008B734(void) { #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008B774.s") -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008B9E8.s") +void func_8008B9E8(void) { + s32 temp; -#pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008BAE4.s") + // clang-format off + if ((D_8016178C != 0) && (D_8016178C != 1)) { D_8016178C--; } + // clang-format on + + if (D_80161788 != 0) { + D_80161788--; + } + + if ((D_80161788 == 0) && (D_8016178C == 0)) { + if ((D_8017829C >= 4) && (D_801782A4 != 2) && (D_801782A4 != 3)) { + temp = func_8008B774(); + if (temp == 1) { + D_80161788 = 20; + } + if (temp == 2) { + D_8016178C = 60; + } + } else { + D_80161788 = 0; + } + } + + if ((D_801782A4 == 2) || (D_801782A4 == 3)) { + D_80161788 = 0; + D_8016178C = 0; + } +} + +void func_8008BAE4(void) { + s32 r; + s32 g; + s32 b; + s32 alpha; + + if (D_8016178C != 0) { + alpha = 192 / D_8016178C; + r = g = b = 255; + } + + if (D_80161788 != 0) { + r = alpha = D_80161788 * 12; + g = b = 0; + } + + if ((D_80161788 != 0) || (D_8016178C != 0)) { + func_800B8DD0(&D_80137E64, 0xC); + gDPSetPrimColor(D_80137E64++, 0, 0, r, g, b, alpha); + func_80005708(&D_8013B3C0); + func_80005B00(D_8013B3C0, -53.9f, -38.5f, -139.4f, 1); + func_80005C34(D_8013B3C0, 1.0f, 1.0f, 1.0f, 1); + func_80006EB8(&D_80137E64); + gSPDisplayList(D_80137E64++, D_800D1A40); + func_80005740(&D_8013B3C0); + } +} void func_8008BC80(void) { if (D_80177854 != 100) { @@ -271,7 +744,28 @@ s32 func_8008BCBC(s32 arg0) { #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008C104.s") +#ifdef IMPORT_DATA_PENDING +void func_8008C390(f32 arg0, f32 arg1, f32 arg2, s32 arg3) { + u8* D_800D1EC0[] = { + D_5000000, D_5000080, D_5000100, D_5000180, D_5000200, D_5000280, D_5000300, D_5000380, D_5000400, D_5000480, + }; + s32 i; + + for (i = 10; i != 1; i /= 10) { + if ((arg0 > 0.0f) && (arg1 > 0.0f)) { + func_8009D994(&D_80137E64, D_800D1EC0[arg3 / i], 16, 8, arg0, arg1, arg2, arg2); + } + arg0 += 9.0f * arg2; + arg3 %= i; + } + + if ((arg0 > 0.0f) && (arg1 > 0.0f)) { + func_8009D994(&D_80137E64, D_800D1EC0[arg3 / i], 16, 8, arg0, arg1, arg2, arg2); + } +} +#else #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008C390.s") +#endif #pragma GLOBAL_ASM("asm/us/nonmatchings/main/sf_hud/func_8008C5C8.s") diff --git a/src/overlays/segment_DF4260/DFEE30.c b/src/overlays/segment_DF4260/DFEE30.c index 787c5659..faa555f5 100644 --- a/src/overlays/segment_DF4260/DFEE30.c +++ b/src/overlays/segment_DF4260/DFEE30.c @@ -14,7 +14,7 @@ void func_801924A8_DFF1E8(UnkStruct_func_801924A8_DFF1E8* arg0) { switch (arg0->unk48) { case 0: - if (D_80178280->unk7C < arg0->unkC) { + if (D_80178280->unk07C < arg0->unkC) { D_80177AB0 = 0; D_80177A98 = 0; arg0->unk48++; diff --git a/src/overlays/segment_DF4260/DFEE30.h b/src/overlays/segment_DF4260/DFEE30.h index d95269bd..288e3ba7 100644 --- a/src/overlays/segment_DF4260/DFEE30.h +++ b/src/overlays/segment_DF4260/DFEE30.h @@ -10,11 +10,6 @@ typedef struct { /* 0x48 */ s32 unk48; } UnkStruct_func_801924A8_DFF1E8; -typedef struct { - /* 0x00 */ char pad_0[0x7C]; - /* 0x7C */ f32 unk7C; -} UnkStruct_D_80178280; - typedef struct { /* 0x00 */ char pad_0[0x10]; /* 0x10 */ f32 unk10; @@ -24,6 +19,5 @@ typedef struct { extern s8 D_80177A98; extern s8 D_80177AB0; -extern UnkStruct_D_80178280* D_80178280; #endif \ No newline at end of file diff --git a/src/overlays/segment_EBFBE0/EBFCA0.c b/src/overlays/segment_EBFBE0/EBFCA0.c index 0453363e..76dd3898 100644 --- a/src/overlays/segment_EBFBE0/EBFCA0.c +++ b/src/overlays/segment_EBFBE0/EBFCA0.c @@ -1,102 +1,5 @@ #include "global.h" -void func_80005740(s32*); -void func_80084688(s32, s32); -void func_800A5D6C(void); -void func_800BB5D0(void); -void func_80006F20(void); -void func_800B6F50(f32, f32, f32, f32, f32, f32); - -void func_800182F4(s32); -void func_8001DC6C(s32, s32); -void func_801877F0_EBFEB0(void); -s32 func_80187ABC_EC017C(void); -void func_80187B00_EC01C0(void); -void func_80187E28_EC04E8(void); -void func_801888E8_EC0FA8(void); -void func_8018994C_EC200C(void); -void func_8018A644_EC2D04(void); -void func_8018ACEC_EC33AC(void); -void func_8018B5C4_EC3C84(void); -void func_8018C644_EC4D04(void); -void func_80190E64_EC9524(void); -void func_8019111C_EC97DC(void); -void func_80187CA8_EC0368(void); -void func_80188010_EC06D0(void); -void func_80189208_EC18C8(void); -void func_8018A2F8_EC29B8(void); -void func_8018A990_EC3050(void); -void func_8018B038_EC36F8(void); -void func_8018C114_EC47D4(void); -void func_8018CB90_EC5250(void); -void func_8018F680_EC7D40(void); -void func_8018F77C_EC7E3C(void); -void func_8018F85C_EC7F1C(void); -void func_8018F8E4_EC7FA4(void); -void func_8018FC14_EC82D4(void); -void func_8018FD08_EC83C8(void); -void func_8018FF74_EC8634(void); -void func_801906A0_EC8D60(void); -void func_80190C9C_EC935C(void); -void func_801918FC_EC9FBC(void); - -extern s32 D_800D2870; -extern u8 D_800DD8B0[]; -extern s32 D_800DD8B4; - -extern u8 D_80137E78; -extern s32 D_8013B3C0; - -extern s16 D_80161A34; -extern s16 D_80161A36; - -extern s32 D_8017783C; -extern s32 D_80177898; -extern s32 D_80177AE0; -extern s32 D_80177AF8; -extern s32 D_80177DB0; -extern s32 D_80178320; -extern s32 D_80178328; -extern s32 D_80178330; -extern s32 D_80178340; -extern s32 D_80178348; -extern s32 D_80178350; -extern s32 D_80178354; -extern f32 D_80178420; -extern f32 D_80178424; -extern f32 D_80177978; -extern f32 D_80177980; -extern f32 D_80177988; -extern f32 D_801779A0; -extern f32 D_801779B8; -extern f32 D_801779C0; -extern s32 D_8017829C; -extern s32 D_80178410; -extern f32 D_8017842C; - -extern f32 D_801B7BC8; -extern f32 D_801B7BCC; -extern s32 D_801B8220[]; -extern u8 D_801B8248[][4]; -extern s32 D_801B827C; -extern s32 D_801B8280; -extern s32 D_801B8284; -extern s32 D_801B8288; -extern s32 D_801B82A8; -extern s32 D_801B82AC; -extern s32 D_801B82BC; -extern s32 D_801B82C0; -extern s32 D_801B82C4; -extern f32 D_801B833C; -extern s32 D_801B8344; -extern s32 D_801B8348; - -extern s32 D_801ADA44_EE6104[]; - -extern s32 D_5000200[]; -extern s32 D_5000300[]; -extern s32 D_50077B0; - void func_801875E0_EBFCA0(void) { D_80137E78 = 2; @@ -388,57 +291,7 @@ void func_80187E28_EC04E8(void) { #pragma GLOBAL_ASM("asm/us/nonmatchings/overlays/segment_EBFBE0/EBFCA0/func_801888E8_EC0FA8.s") -//! TODO: Clean up this mess! - -f32 func_80005100(f32, f32); -void func_8009BC2C(f32*, f32, f32, f32, f32); -void func_8018D2B8_EC5978(s32); -void func_8018EA78_EC7138(s32); -void func_80191674_EC9D34(f32, f32, f32, f32*, f32*, f32*); - -extern s32 D_80178548; -extern s32 D_8017854C; -extern s32 D_80178550; -extern s32 D_80178554; -extern s32 D_80178558; -extern s32 D_8017855C; -extern s32 D_801ADA84_EE6144[]; -extern s32 D_801ADA94_EE6154; -extern f32 D_801B82E0; -extern f32 D_801B82E4; -extern f32 D_801B82E8; -extern s32 D_801B82F8; -extern s32 D_801B82FC; -extern s32 D_801B8300; -extern f32 D_801B8304; -extern f32 D_801B8308; -extern f32 D_801B830C; -extern s32 D_801B8310; -extern s32 D_801B8314; -extern s32 D_801B8318; -extern s32 D_801B831C; -extern s32 D_801B8320; -extern s32 D_801B8324; - -typedef struct UnkStruct_D_801B8350 { - /* 0x00 */ Vec3f unk0; - /* 0x0C */ char pad_0C[0x4C]; - /* 0x54 */ s32 unk54; - /* 0x58 */ s32 unk58; -} UnkStruct_D_801B8350; - extern UnkStruct_D_801B8350 D_801B8350[]; -extern s32 D_801B86A4; -extern f32 D_801B86C8; -extern f32 D_801B86CC; -extern f32 D_801B86D0; -extern f32 D_801B86D4; -extern f32 D_801B86D8; -extern f32 D_801B86DC; -extern s32 D_801B9040; -extern f32 D_801B905C; -extern f32 D_801B9060; -extern f32 D_801B9064; #define M_PI 3.1415927f diff --git a/tools/permuter_settings.toml b/tools/permuter_settings.toml index e86aa08a..64f859d4 100644 --- a/tools/permuter_settings.toml +++ b/tools/permuter_settings.toml @@ -1,4 +1,8 @@ compiler_type = "ido" +[preserve_macros] +"g[DS]P.*" = "void" +"gs[DS]P.*" = "void" + [decompme.compilers] "tools/ido_recomp/linux/5.3/cc" = "ido5.3" \ No newline at end of file