diff --git a/README.md b/README.md index 1b74a0fe..f4ffcced 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# banjo (92.7402%) +# banjo (92.7893%) diff --git a/include/animation.h b/include/animation.h index 7a5ecff3..0a40088d 100644 --- a/include/animation.h +++ b/include/animation.h @@ -26,7 +26,8 @@ typedef struct struct_B1400_1_s{ typedef union { struct{ - u16 unk0_15: 2; + u16 unk0_15: 1; + u16 unk0_14: 1; u16 unk0_13: 14; s16 unk2; }; diff --git a/include/structs.h b/include/structs.h index d20daf36..4dffa765 100644 --- a/include/structs.h +++ b/include/structs.h @@ -687,7 +687,7 @@ typedef struct { } Struct6Bs; typedef struct{ - s32 (* unk0)(struct actor_marker_s *, f32[3], f32, f32[3], s32); + s32 (* unk0)(struct actor_marker_s *, f32[3], f32[3], f32[3], s32); s32 (* unk4)(struct actor_marker_s *, f32[3], f32[3], f32, f32[3], s32, u32); s32 (* unk8)(struct actor_marker_s *, f32[3], f32, f32[3], s32); s32 (* unkC)(struct actor_marker_s *, f32[3], f32, f32[3], s32); diff --git a/progress/progress_core2.svg b/progress/progress_core2.svg index 3496b34a..2527d857 100644 --- a/progress/progress_core2.svg +++ b/progress/progress_core2.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ core2 - 91.1209% - 91.1209% + 91.2064% + 91.2064% \ No newline at end of file diff --git a/progress/progress_total.svg b/progress/progress_total.svg index 4611da4f..1ccf6a74 100644 --- a/progress/progress_total.svg +++ b/progress/progress_total.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ Banjo-Kazooie (us.v10) - 92.7402% - 92.7402% + 92.7893% + 92.7893% \ No newline at end of file diff --git a/src/core2/code_A5BC0.c b/src/core2/code_A5BC0.c index 059844e8..5b6df11d 100644 --- a/src/core2/code_A5BC0.c +++ b/src/core2/code_A5BC0.c @@ -1570,10 +1570,13 @@ s32 func_80330F94(NodeProp *arg0, s32 arg1[3]){ return arg0->unk6.bit15; } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_80330FBC.s") - -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_A5BC0/func_80330FC4.s") +void func_80330FBC(UNK_TYPE(void *)arg0, s32 arg1){ + *(s32*)((s32)arg0 + 0xC) = arg1; +} +s32 func_80330FC4(UNK_TYPE(void *)arg0){ + return *(s32*)((s32)arg0 + 0xC); +} void func_80330FCC(ActorMarker *marker, s32 arg1[3]){ arg1[0] = marker->propPtr->x; diff --git a/src/core2/code_B1400.c b/src/core2/code_B1400.c index dc0ceb7f..92f1804a 100644 --- a/src/core2/code_B1400.c +++ b/src/core2/code_B1400.c @@ -1078,7 +1078,9 @@ BKEffectsList *func_8033A0B0(BKModelBin *arg0){ return (BKEffectsList *)((s32)arg0 + arg0->effects_list_setup_24); } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B1400/func_8033A0CC.s") +f32 func_8033A0CC(UNK_TYPE(void *) arg0){ + return *(f32 *)((s32)arg0 + 0x34); +} BKAnimationList *func_8033A0D4(BKModelBin *arg0){ if(arg0->animation_list_offset_18 == 0) diff --git a/src/core2/code_B3A80.c b/src/core2/code_B3A80.c index d3077fa1..a62dd5ef 100644 --- a/src/core2/code_B3A80.c +++ b/src/core2/code_B3A80.c @@ -33,6 +33,7 @@ extern s32 assetcache_release(void * arg0); f32 func_8033ABA0(AnimationFile *anim_file, f32 arg1); f32 func_8033AC38(AnimationFile *anim_file, AnimationFileElement *arg1, f32 arg2); s32 func_8033AC0C(AnimationFile *this); +void func_8033AFB8(Struct_B1400 *arg0, s32 arg1, f32 arg2[3][3]); void func_8033BAB0(enum asset_e asset_id, s32 offset, s32 size, void *dst_ptr); /* .core2 */ @@ -93,29 +94,61 @@ s32 func_8033AC30(AnimationFile *this){ return this->elem_cnt; } +#ifndef NONMATCHING #pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B3A80/func_8033AC38.s") -// f32 func_8033AC38(AnimationFile *this, AnimationFileElement *elem, f32 arg2){ -// f32 sp38[4]; -// AnimationFileData *tmp_a0; -// int i; +#else +f32 func_8033AC38(AnimationFile *this, AnimationFileElement *elem, f32 arg2){ + AnimationFileData *var_a0; + AnimationFileData *var_a2; + AnimationFileData *var_v0; + f32 temp_f12; + f32 sp38[4]; + u32 temp_t2; -// if((s32)arg2 < elem->data[0].unk0_13){ -// sp38[0] = sp38[1] = D_803709E0[elem->unk0_3]; -// sp38[2] = (f32)elem->data[0].unk2/64; -// sp38[3] = (elem->data[0].unk0_15 == 1 && elem->unk2 >= 2) ? (f32)elem->data[1].unk2/64 : sp38[2]; -// return func_80340A4C((arg2 - this->unk0)/(elem->data[0].unk0_13 - this->unk0), 4, sp38); -// }////L8033AD30 + var_a2 = &elem->data[0]; + if ((s32)arg2 < var_a2->unk0_13) { + sp38[0] = sp38[1] = D_803709E0[elem->unk0_3]; + sp38[2] = (f32) var_a2->unk2 / 64; + 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--; + if ((s32) arg2 >= (var_a0->unk0_13)) { + sp38[1] = (f32) var_a0->unk2 / 64; + sp38[0] = ((var_a0->unk0_14 == 1) && (elem->data_cnt >= 2)) ? (f32) (var_a0 - 1)->unk2 / 64 : sp38[1]; + sp38[2] = sp38[3] = sp38[1]; -// tmp_a0 = &elem->data[elem->unk2]; -// if(!((s32)arg2 < tmp_a0[-1].unk0_13)){ -// sp38[1] = (f32)tmp_a0->unk2/ 64; -// sp38[0] = (tmp_a0->unk0_15 == 1 && tmp_a0->unk2 >= 2) ? (f32)elem->data[-1].unk2/64 : sp38[1]; -// sp38[2] = sp38[3] = sp38[1]; -// return func_80340A4C(64.0f - (f32)tmp_a0->unk0_13, 4, sp38); -// }//L8033AE0C -// } + return func_80340A4C(arg2 - var_a0->unk0_13, 4, sp38); + } -func_8033AFB8(Struct_B1400 *arg0, s32 arg1, f32 arg2[3][3]){ + + var_v0 = var_a2 + 1; + while (var_v0 < var_a0){ + 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; + } else { + var_a0 = var_v0; + 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]; + } + + 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]; func_80345CD4(sp18, arg2[0]); func_8033A8F0(arg0, arg1, sp18); diff --git a/src/core2/code_B9770.c b/src/core2/code_B9770.c index f4d19e90..cc334994 100644 --- a/src/core2/code_B9770.c +++ b/src/core2/code_B9770.c @@ -149,7 +149,7 @@ typedef struct{ u32 bit15: 9; u32 bit6: 3; u32 bit3: 3; - u32 pad_bit0: 1; + u32 bit0: 1; }unk4; struct{ u32 bit31: 10; @@ -230,6 +230,9 @@ extern f32 D_8037901C; /* .bss */ s16 *D_803858A0; +/* .h */ +struct56s *func_80342038(s32 indx); + /* .code */ //glspline_clamp f32 func_80340700(f32 value, f32 min, f32 max) { @@ -242,7 +245,61 @@ bool func_80340748(s32 arg0, s32 arg1, s32 arg2, f32 arg3[3], s32 arg4, s32 arg5 return FALSE; } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_B9770/func_80340760.s") +s32 func_80340760(s32 arg0, s32 *arg1, f32 *arg2, s32 arg3, s32 arg4, f32 *arg5, f32 *arg6) { + glspline_list **temp_t0 = D_80371E74; + glspline_list *temp_a0; + Union_glspline *temp_v0; + Union_glspline *var_v1; + s32 var_a2; + + *arg5 = -9999.0f; + *arg6 = -9999.0f; + if (arg4 != -1) { + temp_a0 = temp_t0[arg4]; + var_v1 = (temp_a0 + 1); + temp_v0 = var_v1 + temp_a0->unk0; + for(var_v1 = var_v1; (arg0 != var_v1->t1.unk10.bit31) && (var_v1 < temp_v0); var_v1++){ + continue; + } + + if (var_v1 < temp_v0) { + if (var_v1->t1.unk4.bit0 == 1) { + if (!var_v1->t1.unkC.bit0 && (var_v1->t1.unk4.bit6 == 7)) { + *arg5 = (f32)var_v1->t1.unkC.bit31; + *arg6 = (f32)var_v1->t1.unk4.bit15; + } + } + *arg1 = arg4; + *arg2 = var_v1->t1.unk0; + func_80323240(func_80342038(arg4), var_v1->t1.unk0, arg3); + return 1; + } + } + + for(var_a2 = 0; var_a2 < D_80371E78; var_a2++){ + if (var_a2 != arg4) { + temp_a0 = temp_t0[var_a2]; + var_v1 = (temp_a0 + 1); + temp_v0 = var_v1 + temp_a0->unk0; + for(var_v1 = var_v1; (arg0 != var_v1->t1.unk10.bit31) && (var_v1 < temp_v0); var_v1++){ + continue; + } + if (var_v1 < temp_v0) { + if (var_v1->t1.unk4.bit0 == 1) { + if (!var_v1->t1.unkC.bit0 && (var_v1->t1.unk4.bit6 == 7)) { + *arg5 = (f32)var_v1->t1.unkC.bit31; + *arg6 = (f32)var_v1->t1.unk4.bit15; + } + } + *arg1 = var_a2; + *arg2 = var_v1->t1.unk0; + func_80323240(func_80342038(var_a2), var_v1->t1.unk0, arg3); + return 1; + } + } + } + return 0; +} f32 func_80340A4C(f32 arg0, s32 arg1, f32 *arg2) { s32 tmp_v1;