diff --git a/README.md b/README.md
index a657c44d..25539835 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# banjo (93.6257%)
+# banjo (93.7175%)
diff --git a/progress/progress_core2.svg b/progress/progress_core2.svg
index 0781900e..b250ad65 100644
--- a/progress/progress_core2.svg
+++ b/progress/progress_core2.svg
@@ -17,7 +17,7 @@
core2
- 92.0874%
- 92.0874%
+ 92.2473%
+ 92.2473%
\ No newline at end of file
diff --git a/progress/progress_total.svg b/progress/progress_total.svg
index df27c61b..0f111bd7 100644
--- a/progress/progress_total.svg
+++ b/progress/progress_total.svg
@@ -9,7 +9,7 @@
-
+
@@ -17,7 +17,7 @@
Banjo-Kazooie (us.v10)
- 93.6257%
- 93.6257%
+ 93.7175%
+ 93.7175%
\ No newline at end of file
diff --git a/src/core2/code_B3A80.c b/src/core2/code_B3A80.c
index e47d5463..9b8284df 100644
--- a/src/core2/code_B3A80.c
+++ b/src/core2/code_B3A80.c
@@ -94,9 +94,6 @@ s32 func_8033AC30(AnimationFile *this){
return this->elem_cnt;
}
-#ifndef NONMATCHING
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B3A80/func_8033AC38.s")
-#else
f32 func_8033AC38(AnimationFile *this, AnimationFileElement *elem, f32 arg2){
AnimationFileData *var_a0;
AnimationFileData *var_a2;
@@ -112,7 +109,7 @@ f32 func_8033AC38(AnimationFile *this, AnimationFileElement *elem, f32 arg2){
sp38[3] = (var_a2->unk0_15 == 1 && elem->data_cnt >= 2) ? (f32)(var_a2 + 1)->unk2/64 : sp38[2];
return func_80340A4C((arg2 - this->unk0)/(var_a2->unk0_13 - this->unk0), 4, sp38);
}
- var_a0 = &elem->data[elem->data_cnt-1];
+ var_a0 = var_a2 + elem->data_cnt;
var_a0--;
if ((s32) arg2 >= (var_a0->unk0_13)) {
sp38[1] = (f32) var_a0->unk2 / 64;
@@ -128,25 +125,25 @@ f32 func_8033AC38(AnimationFile *this, AnimationFileElement *elem, f32 arg2){
var_v0 = &var_a2[(var_a0 - var_a2)/2];
if (var_v0->unk0_13 <= (s32)arg2) {
var_a2 = var_v0;
- var_v0 = var_v0 + 1;
+ if (!var_a2);
} else {
var_a0 = var_v0;
- var_v0 = var_a2 + 1;
}
+ var_v0 = var_a2 + 1;
+
}
sp38[1] = (f32) var_a2->unk2 / 64;
sp38[2] = (f32) var_a0->unk2 / 64;
temp_f12 = (arg2 - var_a2->unk0_13) / (var_a0->unk0_13 - var_a2->unk0_13);
if ((var_a2->unk0_14 == 0) && (var_a0->unk0_15 == 0)) {
- return ((sp38[2] - sp38[1]) * temp_f12) + sp38[1];
+ return sp38[1] + ((sp38[2] - sp38[1]) * temp_f12);
}
sp38[0] = (var_a2->unk0_14 == 1 && (var_a2 - 1) >= &elem->data[0]) ? (f32)(var_a2 - 1)->unk2/64 : sp38[1];
sp38[3] = (var_a0->unk0_15 == 1 && (var_a0 + 1) < &elem->data[elem->data_cnt]) ? (f32)(var_a0 + 1)->unk2/64 : sp38[2];
return func_80340A4C(temp_f12, 4, sp38);
}
-#endif
void func_8033AFB8(Struct_B1400 *arg0, s32 arg1, f32 arg2[3][3]){
f32 sp18[4];
@@ -475,28 +472,14 @@ void func_8033BD8C(void* arg0){
func_8033B0D0(arg0);
}
-#ifndef NONMATCHING
-#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B3A80/func_8033BDAC.s")
-#else
-void *func_8033BDAC(enum asset_e id, void *dst, s32 size) {
+s32 func_8033BDAC(enum asset_e id, void *dst, s32 size) {
s32 comp_size;
- u8 sp2B;
- s32 aligned_decomp_size;
- s32 sp20;
- s16 *temp_a0;
- s32 temp_s0;
- s32 temp_s1;
- s32 temp_t0;
- s32 temp_v0;
- s32 temp_v0_3;
- s32 temp_v1_2;
- s32 temp_v1_3;
- u8 temp_v1;
- void *temp_v0_2;
+ s32 var_s0;
+ s32 sp34;
s32 phi_v0;
- s8 phi_v0_2;
- s32 decomp_ptr;
- s32 phi_v1;
+ s32 comp_ptr;
+ u8 sp2B;
+ s32 sp20;
//find asset in cache
for(phi_v0 = 0; phi_v0 < D_80370A14 && id != D_80383CDC[phi_v0]; phi_v0++);
@@ -504,48 +487,54 @@ void *func_8033BDAC(enum asset_e id, void *dst, s32 size) {
if (phi_v0 == 0x96) {
return 0;
}
- phi_v1 = D_80383CC4[id].offset;
- comp_size = D_80383CC4[id + 1].offset - phi_v1;
- if (comp_size & 1) {
- comp_size++;
+ comp_ptr = D_80383CC4[id + 1].offset - D_80383CC4[id].offset;
+ if (comp_ptr & 1) {
+ comp_ptr++;
}
+ sp34 = comp_ptr;
+
if (D_80383CC4[id].compFlag & 1) {
func_8033BAB0(id, 0, 0x10, &D_80383CB0);
D_80370A10 = rarezip_get_uncompressed_size(&D_80383CB0);
// get aligned uncompressed size
- aligned_decomp_size = D_80370A10;
- if (aligned_decomp_size & 0xF) {
- aligned_decomp_size = (aligned_decomp_size - (aligned_decomp_size & 0xF)) + 0x10;
+ var_s0 = D_80370A10;
+ if (var_s0 & 0xF) {
+ var_s0 = (var_s0 - (var_s0 & 0xF)) + 0x10;
}
- if (size >= (comp_size + aligned_decomp_size)) {
+ if (size >= (comp_ptr + var_s0)) {
sp2B = 1;
- decomp_ptr = (s32)dst + aligned_decomp_size;
+ comp_ptr = (s32)dst + var_s0;
}
- else if(size >= aligned_decomp_size) {
+ else if(size >= var_s0) {
sp2B = 2;
- decomp_ptr = malloc(size);
+ comp_ptr = malloc(comp_ptr);
}
else{
return 0;
}
}
else{
- if (comp_size & (0x10 -1)) {
- comp_size = (comp_size - (comp_size & (0x10 -1))) + 0x10;
+ var_s0 = comp_ptr;
+ if(comp_ptr & (0x10 -1))
+ var_s0 = (comp_ptr - (comp_ptr & (0x10 -1))) + 0x10;
+
+ if(size >= comp_ptr){
+ comp_ptr = dst;
}
- if(size < comp_size)
+ else{
return 0;
+ }
}
- func_802405F0(decomp_ptr, D_80383CC4[id].offset + D_80383CCC, comp_size);
+ comp_size = D_80383CC4[id].offset + D_80383CCC;
+ func_802405F0(comp_ptr, comp_size, sp34);
if (D_80383CC4[id].compFlag & 1) {
- rarezip_inflate(decomp_ptr, dst);
+ rarezip_inflate(comp_ptr, dst);
osWritebackDCache(dst, D_80370A10);
if (sp2B == 2) {
- free(decomp_ptr);
+ free(comp_ptr);
}
}
- return decomp_ptr;
+ return var_s0;
}
-#endif
diff --git a/subyaml/core2.us.v10.yaml b/subyaml/core2.us.v10.yaml
index 409cb2f8..607f176e 100644
--- a/subyaml/core2.us.v10.yaml
+++ b/subyaml/core2.us.v10.yaml
@@ -333,7 +333,7 @@ segments:
- [0xAEDA0, c, code_AEDA0]
- [0xB1400, c, code_B1400]
- [0xB3580, c, code_B3580] #DONE
- - [0xB3A80, c, code_B3A80]
+ - [0xB3A80, c, code_B3A80] #DONE
- [0xB5040, c, code_B5040] #DONE
- [0xB5E00, c, code_B5E00] #DONE
- [0xB62B0, c, code_B62B0] #DONE