diff --git a/README.md b/README.md index 7cb0a93c..4a556f8e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# banjo (90.7255%) +# banjo (90.7792%) diff --git a/progress/progress_core1.svg b/progress/progress_core1.svg index ebebdcb8..b4460341 100644 --- a/progress/progress_core1.svg +++ b/progress/progress_core1.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ core1 - 81.9915% - 81.9915% + 82.3611% + 82.3611% \ No newline at end of file diff --git a/progress/progress_total.svg b/progress/progress_total.svg index d52b64d0..ad11661b 100644 --- a/progress/progress_total.svg +++ b/progress/progress_total.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ Banjo-Kazooie (us.v10) - 90.7255% - 90.7255% + 90.7792% + 90.7792% \ No newline at end of file diff --git a/src/core1/code_7F60.c b/src/core1/code_7F60.c index 9bf52876..4552b4a5 100644 --- a/src/core1/code_7F60.c +++ b/src/core1/code_7F60.c @@ -9,6 +9,40 @@ s32 func_80245980(f32 arg0){ } #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_802459A0.s") +// void func_802459A0(void *arg0, s32 *arg1) { +// s32 *var_s3; +// s32 *var_s4; +// s32 temp_s2; +// s32 temp_v0; +// s32 var_s1; +// s32 var_s7; +// void *var_fp; +// void *var_s0; + +// var_s3 = arg1; +// var_s4 = arg1 + 0x20; +// var_s7 = 0; +// var_fp = arg0; +// do { +// var_s1 = 0; +// var_s0 = var_fp; +// loop_2: +// temp_s2 = func_80245980(var_s0->unk0); +// temp_v0 = func_80245980(var_s0->unk4); +// var_s1 += 8; +// *var_s3 = (temp_s2 & 0xFFFF0000) | ((temp_v0 >> 0x10) & 0xFFFF); +// var_s0 += 8; +// var_s3 += 4; +// *var_s4 = ((temp_s2 << 0x10) & 0xFFFF0000) | (temp_v0 & 0xFFFF); +// var_s4 += 4; +// if (var_s1 != 0x10) { +// goto loop_2; +// } +// var_s7 += 1; +// var_fp += 0x10; +// } while (var_s7 != 4); +// } + #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_80245A7C.s") // void func_80245A7C(Mtx *m0, Mtx *m1){ @@ -23,12 +57,29 @@ s32 func_80245980(f32 arg0){ // a0 = a2[2*i]*65536.0f; // a1 = a2[2*i+1]*65536.0f; -// v0[i] = (a0 & 0xffff0000) | ((a1 >> 16) & 0xffff); -// v1[i] = ((a0 << 16) & 0xffff0000) | (a1 & 0xffff); +// v0[i] = ((a0 << 0) & 0xffff0000) | ((a1 >> 16) & 0xffff); +// v1[i] = ((a0 << 16) & 0xffff0000) | ((a1 >> 0) & 0xffff); // } // } -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_80245BE4.s") +void func_80245BE4(f32 mf[4][4], f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7) { + s32 i, j; + + _guMtxIdentF_80245D44(mf); + mf[0][0] = (2 * arg5) / (arg2 - arg1); + mf[1][1] = (2 * arg5) / (arg4 - arg3); + mf[2][0] = (arg2 + arg1) / (arg2 - arg1); + mf[2][1] = (arg4 + arg3) / (arg4 - arg3); + mf[2][2] = -(arg6 + arg5) / (arg6 - arg5); + mf[2][3] = -1.0f; + mf[3][2] = (-2 * arg6 * arg5) / (arg6 - arg5); + mf[3][3] = 0.0f; + for(i = 0; i < 4; i++){ + for(j = 0; j < 4; j++){ + mf[i][j] *= arg7; + } + } +} void _guMtxIdentF_80245D44(float mf[4][4]) //static { @@ -40,9 +91,33 @@ void _guMtxIdentF_80245D44(float mf[4][4]) //static else mf[i][j] = 0.0; } -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_80245DCC.s") +void func_80245DCC(f32 lmf[4][4], f32 rmf[4][4], f32 dst[4][4]) { + s32 i, j, k; + f32 sp1C[4][4]; -#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_80245F34.s") + for(i = 0; i < 4; i++){ + for(j = 0; j < 4; j++){ + sp1C[i][j] = 0.0f; + for(k = 0; k < 4; k++){ + sp1C[i][j] += lmf[i][k]*rmf[k][j]; + } + } + } + for(i = 0; i < 4; i++){ + for(j = 0; j < 4; j++){ + dst[i][j] = sp1C[i][j]; + } + } +} + +void func_80245F34(f32 *arg0, f32 *arg1, f32 *arg2) { + f32 inv_len; + + inv_len = 1.0f / gu_sqrtf((*arg0 * *arg0) + (*arg1 * *arg1) + (*arg2 * *arg2)); + *arg0 *= inv_len; + *arg1 *= inv_len; + *arg2 *= inv_len; +} #pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_80245FB8.s") diff --git a/subyaml/core1.us.v10.yaml b/subyaml/core1.us.v10.yaml index 07bb20af..ef23489e 100644 --- a/subyaml/core1.us.v10.yaml +++ b/subyaml/core1.us.v10.yaml @@ -285,7 +285,7 @@ segments: - [0x39C40, .rodata, code_5650] - [0x39CA0, .rodata, code_72B0] - [0x39CC0, bin, data_39CC0] - - [0x39CD0, bin, data_39CD0] # .rodata, code_7F60] + - [0x39CD0, .rodata, code_7F60] - [0x39CE0, bin, data_39CE0] # .rodata, code_9D30] - [0x39D00, .rodata, done/code_CE60] - [0x39FD0, .rodata, code_EAF0]