diff --git a/README.md b/README.md index 6e858f5b..f314d34e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# banjo (91.0021%) +# banjo (91.0749%) diff --git a/progress/progress_core1.svg b/progress/progress_core1.svg index 503a1016..130d4c41 100644 --- a/progress/progress_core1.svg +++ b/progress/progress_core1.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ core1 - 83.8974% - 83.8974% + 84.1199% + 84.1199% \ No newline at end of file diff --git a/progress/progress_core2.svg b/progress/progress_core2.svg index 9bca07fb..e4c05de8 100644 --- a/progress/progress_core2.svg +++ b/progress/progress_core2.svg @@ -17,7 +17,7 @@ core2 - 88.6047% - 88.6047% + 88.6752% + 88.6752% \ No newline at end of file diff --git a/progress/progress_total.svg b/progress/progress_total.svg index 90a93d09..100e808e 100644 --- a/progress/progress_total.svg +++ b/progress/progress_total.svg @@ -17,7 +17,7 @@ Banjo-Kazooie (us.v10) - 91.0021% - 91.0021% + 91.0749% + 91.0749% \ No newline at end of file diff --git a/src/core1/code_EAF0.c b/src/core1/code_EAF0.c index ec6d1713..7527af93 100644 --- a/src/core1/code_EAF0.c +++ b/src/core1/code_EAF0.c @@ -306,7 +306,7 @@ void func_8024D2B0(f32 arg0[4], f32 arg1[4], f32 arg2[4], f32 arg3[4]){ #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024D374.s") -void func_8024D8F4(Cube *cube) { +bool func_8024D8F4(Cube *cube) { f32 sp24[3]; f32 sp18[3]; @@ -316,11 +316,31 @@ void func_8024D8F4(Cube *cube) { sp18[0] = sp24[0] + 1300.0f; sp18[1] = sp24[1] + 1300.0f; sp18[2] = sp24[2] + 1300.0f; - func_8024D374(sp24, sp18); + return func_8024D374(sp24, sp18); } +bool func_8024D9B0(Cube *cube) { + f32 sp34[3]; + f32 sp28[3]; + f32 sp1C[3]; -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024D9B0.s") + if (cube->x == -0x10) { + return TRUE; + } + sp1C[0] = (f32) ((cube->x * 1000) + 500) - D_80280EB0[0]; + sp1C[1] = (f32) ((cube->y * 1000) + 500) - D_80280EB0[1]; + sp1C[2] = (f32) ((cube->z * 1000) + 500) - D_80280EB0[2]; + if (LENGTH_SQ_VEC3F(sp1C) > 1.6e7f) { + return FALSE; + } + sp34[0] = (f32) ((cube->x * 1000) - 150); + sp34[1] = (f32) ((cube->y * 1000) - 150); + sp34[2] = (f32) ((cube->z * 1000) - 150); + sp28[0] = sp34[0] + 1300.0f; + sp28[1] = sp34[1] + 1300.0f; + sp28[2] = sp34[2] + 1300.0f; + return func_8024D374(sp34, sp28); +} bool func_8024DB50(f32 arg0[3], f32 arg1) { f32 sp3C[3]; @@ -355,7 +375,9 @@ bool func_8024DD0C(f32 arg0[3]){ return func_8024DC04(arg0[0], arg0[1], arg0[2]); } -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_EAF0/func_8024DD34.s") +bool func_8024DD34(f32 arg0, f32 arg1, f32 arg2) { + return ((D_80280ED0[2][0]*arg0 + D_80280ED0[2][1]*arg1 + D_80280ED0[2][2]*arg2 + D_80280ED0[2][3]) <= 0.0f); +} Mtx *func_8024DD90(void){ return &D_80280F98; diff --git a/src/core2/code_75480.c b/src/core2/code_75480.c index 169553a0..3e3321f3 100644 --- a/src/core2/code_75480.c +++ b/src/core2/code_75480.c @@ -3,8 +3,8 @@ #include "variables.h" /* .data */ +extern f32 D_80369890[]; extern s32 D_803698B4; - /* .bss */ struct8s *D_80381570[4]; @@ -61,4 +61,57 @@ void func_802FC630(s32 ag0, struct8s* arg1){ D_803698B4 = 0; } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_75480/func_802FC644.s") +void func_802FC644(void) { + f32 temp_f0; + struct8s *temp_s2; + s32 var_s1; + + temp_s2 = D_80381570[0]; + if (D_803698B4) { + switch (temp_s2->unk0) { + default: + break; + + case 1: + temp_f0 = D_80369890[temp_s2->unk18]; + temp_s2->unk1C += temp_s2->unk14 * temp_f0; + if (temp_f0 == 0.0) { + temp_s2->unk10 = 3.0f; + temp_s2->unk0 = 2; + } else { + temp_s2->unk18++; + } + break; + + case 2: + if (getGameMode() != GAME_MODE_4_PAUSED) { + temp_s2->unk10 -= time_getDelta(); + if (temp_s2->unk10 < 0.0f) { + temp_s2->unk0 = 3; + for(var_s1 = 1; var_s1 < D_803698B4; var_s1++){ + func_802FC5C8(4, D_80381570[var_s1]); + func_802FB020(D_80381570[var_s1], temp_s2->unk0); + } + } + } + break; + + case 3: + if (temp_s2->unk1C < -20.0f) { + func_802FB020(temp_s2, 0); + break; + } else { + temp_s2->unk18 = MAX(0, temp_s2->unk18 - 1); + temp_f0 = D_80369890[temp_s2->unk18]; + temp_s2->unk1C -= temp_s2->unk14 * temp_f0; + } + break; + } + + for(var_s1 = 1; var_s1 < D_803698B4; var_s1++){ + if (temp_s2->unk0 == 2) { + D_80381570[var_s1]->unk0 = temp_s2->unk0; + } + } + } +}