From bae0a1150eb28011df703d83fe392e415e3a5a6c Mon Sep 17 00:00:00 2001 From: Banjo Kazooie Date: Sat, 6 Aug 2022 14:00:16 -0500 Subject: [PATCH] core2/code_BE2C0.c done --- include/variables.h | 4 +- progress/progress_core2.svg | 6 +- progress/progress_total.svg | 4 +- src/BGS/ch/leafboat.c | 6 +- src/CCW/code_61E0.c | 2 +- src/core1/code_18350.c | 30 ++++----- src/core2/code_560F0.c | 2 +- src/core2/code_BE2C0.c | 122 +++++++++++++++++++++++++++++++--- src/core2/code_C76D0.c | 12 ++-- src/core2/code_CB050.c | 6 +- subyaml/core2.us.v10.yaml | 4 +- symbol_addrs.core2.us.v10.txt | 3 + 12 files changed, 152 insertions(+), 49 deletions(-) diff --git a/include/variables.h b/include/variables.h index da10714b..7ce79203 100644 --- a/include/variables.h +++ b/include/variables.h @@ -1,8 +1,8 @@ #ifndef VARIABLES_H #define VARIABLES_H -#define RARE_PI 3.141592654 - +#define BAD_PI 3.141592654 +#define BAD_DTOR (BAD_PI/ 180.0) #define M_TAU (2*M_PI) diff --git a/progress/progress_core2.svg b/progress/progress_core2.svg index 7da36df2..8f87f7dd 100644 --- a/progress/progress_core2.svg +++ b/progress/progress_core2.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ core2 - 77.7638% - 77.7638% + 77.9469% + 77.9469% \ No newline at end of file diff --git a/progress/progress_total.svg b/progress/progress_total.svg index 1eb624d9..51837682 100644 --- a/progress/progress_total.svg +++ b/progress/progress_total.svg @@ -17,7 +17,7 @@ Banjo-Kazooie (us.v10) - 82.0338% - 82.0338% + 82.1388% + 82.1388% \ No newline at end of file diff --git a/src/BGS/ch/leafboat.c b/src/BGS/ch/leafboat.c index 07bf2ed0..f4d4ad8d 100644 --- a/src/BGS/ch/leafboat.c +++ b/src/BGS/ch/leafboat.c @@ -186,9 +186,9 @@ void func_8038FD9C(Actor *this){ } this->marker->unk3E_1 = 0; - local->unk18[1] = 10 * sinf((((this->unk60 * local->unk6C) / 180.0) * RARE_PI)); - this->unk1C[0] = 4.5 * cosf((((this->unk60 * local->unk6C) / 180.0) * RARE_PI)); - this->unk1C[1] = 2*sinf((((this->unk60 * local->unk6C) / 180.0) * RARE_PI)); + local->unk18[1] = 10 * sinf((((this->unk60 * local->unk6C) / 180.0) * BAD_PI)); + this->unk1C[0] = 4.5 * cosf((((this->unk60 * local->unk6C) / 180.0) * BAD_PI)); + this->unk1C[1] = 2*sinf((((this->unk60 * local->unk6C) / 180.0) * BAD_PI)); sp64[0] = local->unk3C[0] + local->unk24[0]; sp64[1] = local->unk3C[1] + local->unk24[1]; sp64[2] = local->unk3C[2] + local->unk24[2]; diff --git a/src/CCW/code_61E0.c b/src/CCW/code_61E0.c index 93e75ad6..1ae28f42 100644 --- a/src/CCW/code_61E0.c +++ b/src/CCW/code_61E0.c @@ -92,7 +92,7 @@ void func_8038C7A8(Actor *this) { local->unk18 += 3.3333333333333333 * sp44; local->unk18 = (local->unk18 > 1.0) ? 1.0 : local->unk18; func_80255FE4(this->position, local->unk0, local->unkC, local->unk18); - this->position[1] += 50.0f * sinf(local->unk18 * RARE_PI); + this->position[1] += 50.0f * sinf(local->unk18 * BAD_PI); if (local->unk18 == 1.0) { func_8038C6A0(this, 4); } diff --git a/src/core1/code_18350.c b/src/core1/code_18350.c index 8ebcf1ae..1c66dc1c 100644 --- a/src/core1/code_18350.c +++ b/src/core1/code_18350.c @@ -2,7 +2,7 @@ #include "functions.h" #include "variables.h" -#define RARE_DTOR (RARE_PI/180.0) +#define BAD_DTOR (BAD_PI/180.0) /* .data*/ extern u16 *D_80276CB8; //! ml_acosPrecValTblPtr @@ -301,7 +301,7 @@ void ml_vec3f_pitch_rotate_copy(f32 dst[3], f32 src[3], f32 pitch) f32 cos, sin; f32 val; - pitch *= RARE_DTOR; // M_DTOR + pitch *= BAD_DTOR; // M_DTOR cos = cosf(pitch); sin = sinf(pitch); @@ -318,7 +318,7 @@ void ml_vec3f_yaw_rotate_copy(f32 dst[3], f32 src[3], f32 yaw) f32 cos, sin; f32 val; - yaw *= RARE_DTOR; // M_DTOR + yaw *= BAD_DTOR; // M_DTOR cos = cosf(yaw); sin = sinf(yaw); @@ -335,7 +335,7 @@ void ml_vec3f_roll_rotate_copy(f32 dst[3], f32 src[3], f32 roll) f32 cos, sin; f32 val; - roll *= RARE_DTOR; // M_DTOR + roll *= BAD_DTOR; // M_DTOR cos = cosf(roll); sin = sinf(roll); @@ -403,8 +403,8 @@ void func_80256D0C(f32 val1, f32 val2, f32 x, f32 y, f32 z, f32 *dstX, f32 *dstY { f32 tmp; - val1 *= RARE_DTOR; // M_DTOR - val2 *= RARE_DTOR; + val1 *= BAD_DTOR; // M_DTOR + val2 *= BAD_DTOR; tmp = y * sinf(val1) + cosf(val1) * z; @@ -417,8 +417,8 @@ void func_80256E24(f32 dst[3], f32 theta, f32 phi, f32 x, f32 y, f32 z) { f32 tmp; - theta *= RARE_DTOR; // M_DTOR - phi *= RARE_DTOR; + theta *= BAD_DTOR; // M_DTOR + phi *= BAD_DTOR; tmp = y * sinf(theta) + cosf(theta) * z; @@ -571,12 +571,12 @@ void func_80257594(void) f32 func_802575BC(f32 val) { - return (sinf(val * RARE_PI + -RARE_PI/2) + 1) / 2.0; + return (sinf(val * BAD_PI + -BAD_PI/2) + 1) / 2.0; } f32 func_80257618(f32 val) { - return sinf(val * RARE_PI / 2); + return sinf(val * BAD_PI / 2); } f32 func_80257658(f32 val) @@ -699,12 +699,12 @@ f32 func_80257A6C(f32 val1, f32 val2) { f32 tmp = func_802588B0(val1, val2) / val2; - return (sinf(tmp * (2*RARE_PI)) + 1.0) / 2.0; + return (sinf(tmp * (2*BAD_PI)) + 1.0) / 2.0; } f32 func_80257AD4(f32 val1, f32 val2) { - return sinf((func_802588B0(val1, val2) / val2) * (2*RARE_PI)); + return sinf((func_802588B0(val1, val2) / val2) * (2*BAD_PI)); } f32 ml_f_map(f32 a, f32 b, f32 c, f32 d, f32 e) @@ -1019,12 +1019,12 @@ f32 func_80258780(f32 vec1[3], f32 vec2[3]) f32 ml_sin_deg(f32 angle_deg) { - return sinf(angle_deg * RARE_DTOR); + return sinf(angle_deg * BAD_DTOR); } f32 ml_cos_deg(f32 angle_deg) { - return cosf(angle_deg * RARE_DTOR); + return cosf(angle_deg * BAD_DTOR); } f32 mlNormalizeAngle(f32 angle) @@ -1086,7 +1086,7 @@ int ml_abs_w(int arg0) void func_802589E4(f32 dst[3], f32 yaw, f32 length) { - yaw *= RARE_DTOR; + yaw *= BAD_DTOR; dst[0] = sinf(yaw) * length; dst[2] = cosf(yaw) * length; diff --git a/src/core2/code_560F0.c b/src/core2/code_560F0.c index b6ec6fd2..2818b07c 100644 --- a/src/core2/code_560F0.c +++ b/src/core2/code_560F0.c @@ -212,7 +212,7 @@ void func_802DD484(f32 dst[3], f32 arg1, f32 avg, f32 range) { s32 i; for(i = 0; i < 3; i++){ - dst[i] = avg + range * (0.5 + 0.5 * sinf( (2.0*RARE_PI) * func_80257A44((arg1 + 2.0 * ((f32)i / 3.0)), 2.0f))); + dst[i] = avg + range * (0.5 + 0.5 * sinf( (2.0*BAD_PI) * func_80257A44((arg1 + 2.0 * ((f32)i / 3.0)), 2.0f))); } } diff --git a/src/core2/code_BE2C0.c b/src/core2/code_BE2C0.c index 66dbc5c6..27963440 100644 --- a/src/core2/code_BE2C0.c +++ b/src/core2/code_BE2C0.c @@ -2,31 +2,134 @@ #include "functions.h" #include "variables.h" +extern f32 func_80255D70(f32); #define LENGTH_SQ_VEC4F(v) (v[0]*v[0] + v[1]*v[1] + v[2]*v[2] + v[3]*v[3]) -/* public */ - /* .data */ extern s32 D_80371ED0[3]; /* .code */ -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_BE2C0/func_80345250.s") +//vec4f_copy +void func_80345250(f32 dst[4], f32 src[4]){ + dst[0] = src[0]; + dst[1] = src[1]; + dst[2] = src[2]; + dst[3] = src[3]; +} -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_BE2C0/func_80345274.s") +void func_80345274(f32 arg0[4], f32 arg1[3][3]) { + f32 var_f18; + f32 sp40; + f32 sp3C; + f32 sp38; + f32 temp_f12; + f32 temp_f2; + f32 temp_f20; + f32 sp28; + f32 sp24; + f32 sp20; + f32 sp1C; + f32 temp_f0_2; + f32 temp_f12_2; -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_BE2C0/func_80345434.s") + if ((arg0[0] == 0.0f) && (arg0[1] == 0.0f) && (arg0[2] == 0.0f) && (arg0[3] == 0.0f)) { + var_f18 = 2.0f; + } else { + var_f18 = 2.0 / LENGTH_SQ_VEC4F(arg0); + } + temp_f12 = arg0[0] * var_f18; + temp_f2 = arg0[1] * var_f18; + temp_f20 = arg0[2] * var_f18; -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_BE2C0/func_803454D0.s") + sp40 = temp_f12 * arg0[3]; + sp3C = temp_f2 * arg0[3]; + sp38 = temp_f20 * arg0[3]; + sp28 = temp_f12 * arg0[0]; + sp24 = temp_f2 * arg0[0]; + sp20 = temp_f20 * arg0[0]; + sp1C = temp_f2 * arg0[1]; + + temp_f12_2 = temp_f20 * arg0[1]; + temp_f0_2 = temp_f20 * arg0[2]; + + arg1[0][0] = 1.0 - (sp1C + temp_f0_2); + arg1[0][1] = sp24 + sp38; + arg1[0][2] = sp20 - sp3C; + + arg1[1][0] = sp24 - sp38; + arg1[1][1] = 1.0 - (sp28 + temp_f0_2); + arg1[1][2] = temp_f12_2 + sp40; + + arg1[2][0] = sp20 + sp3C; + arg1[2][1] = temp_f12_2 - sp40; + arg1[2][2] = 1.0 - (sp28 + sp1C); +} + +bool func_80345434(f32 arg0[4]){ + return ((arg0[0] == 0.0f) + && (arg0[1] == 0.0f) + && (arg0[2] == 0.0f) + && (arg0[3] == 1.0f)); +} + +bool func_803454D0(f32 arg0[4]) { + return (((0.0f <= arg0[0]) ? arg0[0] : - arg0[0]) < 0.01) + && (((0.0f <= arg0[1]) ? arg0[1] : - arg0[1]) < 0.01) + && (((0.0f <= arg0[1]) ? arg0[1] : - arg0[1]) < 0.01) + && (((0.0f <= arg0[3]) ? arg0[3] : - arg0[3]) < 1.01) + && (((0.0f <= arg0[3]) ? arg0[3] : - arg0[3]) > 0.99); +} void func_80345630(f32 arg0[4]){ arg0[0] = arg0[1] = arg0[2] = 0.0f; arg0[3] = 1.0f; } -void func_80345650(f32[4], f32[4], f32[4], f32); -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_BE2C0/func_80345650.s") +void func_80345650(f32 arg0[4], f32 arg1[4], f32 arg2[4], f32 arg3) { + f32 temp_f12; + f32 sp48; + f32 sp44; + f32 sp40; + f32 sp3C; + temp_f12 = (arg1[0]*arg2[0]) + (arg1[1]*arg2[1]) + (arg1[2]*arg2[2]) + (arg1[3]*arg2[3]); + if (0.00001 < (1.0 + temp_f12)) { + if (0.00001 < (1.0 - temp_f12)) { + sp3C = (BAD_PI/180.0) * func_80255D70(temp_f12); + sp40 = sinf(sp3C); + if (0.0f != sp40) { + sp48 = sinf((1.0 - arg3) * sp3C) / sp40; + sp48 = sp48; + sp44 = sinf(arg3 * sp3C) / sp40; + } else { + sp44 = arg3; + sp48 = 1.0 - arg3; + } + } else { + sp44 = arg3; + sp48 = 1.0 - arg3; + } + arg0[0] = sp48*arg1[0] + sp44*arg2[0]; + arg0[1] = sp48*arg1[1] + sp44*arg2[1]; + arg0[2] = sp48*arg1[2] + sp44*arg2[2]; + arg0[3] = sp48*arg1[3] + sp44*arg2[3]; + } + else{ + + arg0[0] = -arg1[1]; + arg0[1] = arg1[0]; + arg0[2] = -arg1[3]; + arg0[3] = arg1[2]; + + sp48 = sinf((1.0 - arg3) * (BAD_PI/2.0f)); + sp44 = sinf(arg3 * (BAD_PI/2.0f)); + arg0[0] = sp48*arg1[0] + sp44*arg0[0]; + arg0[1] = sp48*arg1[1] + sp44*arg0[1]; + arg0[2] = sp48*arg1[2] + sp44*arg0[2]; + + } +} void func_803458E4(f32 arg0[4], f32 arg1[4], f32 arg2[4], f32 arg3) { f32 var_f0; @@ -57,7 +160,6 @@ void func_803458E4(f32 arg0[4], f32 arg1[4], f32 arg2[4], f32 arg3) { } - void func_80345A44(f32 arg0[4], f32 arg1[4][4]) { f32 temp_f0; f32 temp_f2; @@ -95,7 +197,6 @@ void func_80345A44(f32 arg0[4], f32 arg1[4][4]) { } } - void func_80345C78(s32 arg0, f32 arg1[3]) { mlMtxIdent(); mlMtxRotYaw(arg1[1]); @@ -104,7 +205,6 @@ void func_80345C78(s32 arg0, f32 arg1[3]) { func_80345A44(arg0, func_80251488()); } - void func_80345CD4(f32 arg0[4], f32 arg1[4]){ mlMtxIdent(); mlMtxRotRoll(arg1[2]); diff --git a/src/core2/code_C76D0.c b/src/core2/code_C76D0.c index 5315ed01..838ebde9 100644 --- a/src/core2/code_C76D0.c +++ b/src/core2/code_C76D0.c @@ -92,20 +92,20 @@ void func_8034E8E4(Struct73s *arg0, BKModel *arg1, s32 arg2) { sp38 = time_getDelta(); arg0->unk4 += sp38; - cos = cosf(arg0->unk4 * 0.2 * RARE_PI); - sin = sinf(arg0->unk4 * 0.08 * RARE_PI); + cos = cosf(arg0->unk4 * 0.2 * BAD_PI); + sin = sinf(arg0->unk4 * 0.08 * BAD_PI); sp30[0] = (sin*100.0f + 150.0f*cos)*0.8; - sin = sinf(arg0->unk4 * 0.5 * RARE_PI); - cos = cosf(arg0->unk4 * 0.22 * RARE_PI); + sin = sinf(arg0->unk4 * 0.5 * BAD_PI); + cos = cosf(arg0->unk4 * 0.22 * BAD_PI); sp30[1] = (cos* 100.0f + 50.0f*sin)*0.8; arg0->d_tc[0] = (sp30[0] >= 0.0) ? sp30[0] + 0.5 : sp30[0] - 0.5; arg0->d_tc[1] = (sp30[1] >= 0.0) ? sp30[1] + 0.5 : sp30[1] - 0.5; - cos = cosf(arg0->unk4 * 0.5 * RARE_PI); - sin = sinf(arg0->unk4 * 0.11 * RARE_PI); + cos = cosf(arg0->unk4 * 0.5 * BAD_PI); + sin = sinf(arg0->unk4 * 0.11 * BAD_PI); sp28 = sin*(arg0->unk8 * 0.25) + (arg0->unk8* 0.75)*cos; if (arg0->unk14 < arg0->unk1C) { diff --git a/src/core2/code_CB050.c b/src/core2/code_CB050.c index 44297048..6b2563aa 100644 --- a/src/core2/code_CB050.c +++ b/src/core2/code_CB050.c @@ -95,9 +95,9 @@ void func_80352114(Struct_core2_CB050_0 *arg0, s32 arg1, f32 arg2) { } arg0->unk6C = FALSE; } - arg0->unk28[1] = sinf(((arg0->unk64 * arg0->unk0) / 180.0) * RARE_PI) * 10.0f; - arg0->unk4[0] = cosf(((arg0->unk64 * arg0->unk0) / 180.0) * RARE_PI) * 4.5; - arg0->unk4[1] = sinf(((arg0->unk64 * arg0->unk0) / 180.0) * RARE_PI) * 2; + arg0->unk28[1] = sinf(((arg0->unk64 * arg0->unk0) / 180.0) * BAD_PI) * 10.0f; + arg0->unk4[0] = cosf(((arg0->unk64 * arg0->unk0) / 180.0) * BAD_PI) * 4.5; + arg0->unk4[1] = sinf(((arg0->unk64 * arg0->unk0) / 180.0) * BAD_PI) * 2; if (map_get() == MAP_22_CC_INSIDE_CLANKER) { sp40[0] = arg0->unk4C[0]; sp40[1] = arg0->unk4C[1] + 1000.0f; diff --git a/subyaml/core2.us.v10.yaml b/subyaml/core2.us.v10.yaml index 667a5e42..b71af3d2 100644 --- a/subyaml/core2.us.v10.yaml +++ b/subyaml/core2.us.v10.yaml @@ -349,7 +349,7 @@ segments: - [0xB9770, c, code_B9770] - [0xBD100, c, code_BD100] - [0xBDCC0, c, code_BDCC0] #DONE - - [0xBE2C0, c, code_BE2C0] + - [0xBE2C0, c, code_BE2C0] #DONE - [0xBEF20, c, code_BEF20] - [0xC0B80, c, code_C0B80] #DONE - [0xC0CF0, c, code_C0CF0] #DONE @@ -767,7 +767,7 @@ segments: - [0xF2000, .rodata, code_B6CE0] - [0xF2030, bin, data_F2030] - [0xF2110, .rodata, code_BDCC0] - - [0xF2130, bin, data_F2130] + - [0xF2130, .rodata, code_BE2C0] - [0xF2170, .rodata, code_BEF20] - [0xF21B0, bin, data_F21B0] - [0xF21C0, .rodata, rand] diff --git a/symbol_addrs.core2.us.v10.txt b/symbol_addrs.core2.us.v10.txt index f9d66a52..3e3188f3 100644 --- a/symbol_addrs.core2.us.v10.txt +++ b/symbol_addrs.core2.us.v10.txt @@ -454,6 +454,9 @@ D_80378F64 = 0x80378F64; D_80378F68 = 0x80378F68; D_80379080 = 0x80379080; D_80379084 = 0x80379084; +D_803790C0 = 0x803790C0; +D_803790C8 = 0x803790C8; +D_803790D0 = 0x803790D0; D_80379308 = 0x80379308; D_80379318 = 0x80379318; D_80379328 = 0x80379328;