From dffb1f1698c2ed35d71fc3a148a07c6cc3844586 Mon Sep 17 00:00:00 2001 From: Banjo Kazooie Date: Tue, 8 Nov 2022 18:38:55 -0600 Subject: [PATCH] core2/code_B3A80.c done --- README.md | 2 +- progress/progress_core2.svg | 4 +- progress/progress_total.svg | 6 +-- src/core2/code_B3A80.c | 83 ++++++++++++++++--------------------- subyaml/core2.us.v10.yaml | 2 +- 5 files changed, 43 insertions(+), 54 deletions(-) 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