diff --git a/README.md b/README.md
index d39bb36b..095f6468 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# banjo (90.8038%)
+# banjo (90.8015%)
diff --git a/progress/progress_core1.svg b/progress/progress_core1.svg
index 9ac9962d..32a108e0 100644
--- a/progress/progress_core1.svg
+++ b/progress/progress_core1.svg
@@ -17,7 +17,7 @@
core1
- 82.5310%
- 82.5310%
+ 82.6659%
+ 82.6659%
\ No newline at end of file
diff --git a/progress/progress_total.svg b/progress/progress_total.svg
index 5a3de375..18621069 100644
--- a/progress/progress_total.svg
+++ b/progress/progress_total.svg
@@ -17,7 +17,7 @@
Banjo-Kazooie (us.v10)
- 90.8038%
- 90.8038%
+ 90.8015%
+ 90.8015%
\ No newline at end of file
diff --git a/src/core1/code_7F60.c b/src/core1/code_7F60.c
index a76d5ad1..d16bf1ca 100644
--- a/src/core1/code_7F60.c
+++ b/src/core1/code_7F60.c
@@ -8,59 +8,26 @@ s32 func_80245980(f32 arg0){
return arg0*65536.0f;
}
-#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;
+void func_802459A0(float mf[4][4], Mtx *m)
+{
+ int i, j;
+ int e1,e2;
+ int *ai,*af;
-// 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);
-// }
+ ai=(int *) &m->m[0][0];
+ af=(int *) &m->m[2][0];
+
+ for (i=0; i<4; i++)
+ for (j=0; j<2; j++) {
+ e1=func_80245980(mf[i][j*2]);
+ e2=func_80245980(mf[i][j*2+1]);
+ *(ai++) = ( e1 & 0xffff0000 ) | ((e2 >> 16)&0xffff);
+ *(af++) = ((e1 << 16) & 0xffff0000) | (e2 & 0xffff);
+ }
+}
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_80245A7C.s")
-// void func_80245A7C(Mtx *m0, Mtx *m1){
-// u32 *v0 = &m1->m[0][0];
-// u32 *v1 = &m1->m[2][0];
-// f32 *a2 = &m0->m[0][0];
-// s32 a0;
-// s32 a1;
-// int i;
-
-// for(i = 0; i < 8; i++){
-// a0 = a2[2*i]*65536.0f;
-// a1 = a2[2*i+1]*65536.0f;
-
-// v0[i] = ((a0 << 0) & 0xffff0000) | ((a1 >> 16) & 0xffff);
-// v1[i] = ((a0 << 16) & 0xffff0000) | ((a1 >> 0) & 0xffff);
-// }
-// }
void func_80245BE4(f32 mf[4][4], f32 arg1, f32 arg2, f32 arg3, f32 arg4, f32 arg5, f32 arg6, f32 arg7) {
s32 i, j;
@@ -119,9 +86,15 @@ void func_80245F34(f32 *arg0, f32 *arg1, f32 *arg2) {
*arg2 *= inv_len;
}
+void func_80245FB8(f32 mf[4][4], u16 *perspNorm, f32 fovy, f32 aspect, f32 near, f32 far, f32 scale);
#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/func_80245FB8.s")
-#pragma GLOBAL_ASM("asm/nonmatchings/core1/code_7F60/guPerspective.s")
+void guPerspective(Mtx *m, u16 *perspNorm, f32 fovy, f32 aspect, f32 near, f32 far, f32 scale) {
+ f32 sp28[4][4];
+
+ func_80245FB8(sp28, perspNorm, fovy, aspect, near, far, scale);
+ func_802459A0(sp28, m);
+}
void func_8024632C(f32 mf[4][4], f32 arg1, f32 arg2, f32 arg3, f32 arg4) {
f32 sp34;