diff --git a/README.md b/README.md index adfcfe4d..f2653fd2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# banjo (91.1905%) +# banjo (91.2526%) diff --git a/progress/progress_core2.svg b/progress/progress_core2.svg index 23bde523..c35c9be3 100644 --- a/progress/progress_core2.svg +++ b/progress/progress_core2.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ core2 - 88.8768% - 88.8768% + 88.9850% + 88.9850% \ No newline at end of file diff --git a/progress/progress_total.svg b/progress/progress_total.svg index 67bf78c3..fd3f8545 100644 --- a/progress/progress_total.svg +++ b/progress/progress_total.svg @@ -17,7 +17,7 @@ Banjo-Kazooie (us.v10) - 91.1905% - 91.1905% + 91.2526% + 91.2526% \ No newline at end of file diff --git a/src/core2/code_74ED0.c b/src/core2/code_74ED0.c index cbd159c1..b1e8dabd 100644 --- a/src/core2/code_74ED0.c +++ b/src/core2/code_74ED0.c @@ -2,7 +2,11 @@ #include "functions.h" #include "variables.h" +extern void func_802FB020(struct8s *, s32); + + /* .data */ +extern f32 D_80369860[9]; extern s32 D_80369884; /* .bss */ @@ -34,7 +38,35 @@ void func_802FBEB8(void){ } } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_74ED0/func_802FBEFC.s") +void func_802FBEFC(struct8s *arg0) { + s32 var_v1; + struct8s *sp20; + + + for(var_v1 = 0; var_v1 < D_80369884; var_v1++){ + if (arg0 == D_80381560[var_v1]) { + sp20 = D_80381560[0]; + func_802FB020(D_80381560[var_v1], 1); + sp20->unk10 = 3.0f; + if (sp20->unk18 == 0) { + sp20->unk1C = 0.0f; + } + return; + } + } + + for(var_v1 = D_80369884; var_v1 > 0; var_v1--){ + D_80381560[var_v1] = D_80381560[var_v1 - 1]; + } + D_80381560[0] = arg0; + + + if (D_80369884 && (func_802FDD0C(D_80381560[1]) == 0x29)) { + D_80381560[0] = D_80381560[1]; + D_80381560[1] = arg0; + } + D_80369884++; +} void func_802FC014(s32 arg0, struct8s * arg1){ func_802FBEFC(arg1); @@ -63,7 +95,66 @@ void func_802FC0C4(s32 arg0, struct8s *arg1){ D_80369884 = 0; } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_74ED0/func_802FC0D8.s") +void func_802FC0D8(void) { + struct8s *sp1C; + f32 temp_f0; + s32 var_v0; + bool var_v1; + + sp1C = D_80381560[0]; + if(D_80369884 != 0){ + switch(sp1C->unk0){ + default: + break; + case 1: + temp_f0 = D_80369860[sp1C->unk18]; + sp1C->unk1C += sp1C->unk14 * temp_f0; + if (temp_f0 == 0.0) { + sp1C->unk10 = 3.0f; + sp1C->unk0 = 2; + } else { + sp1C->unk18++; + } + break; + + case 2: + if (getGameMode() != GAME_MODE_4_PAUSED) { + sp1C->unk10 -= time_getDelta(); + if (sp1C->unk10 < 0.0f) { + sp1C->unk0 = 3; + for(var_v0 = 1; var_v0 < D_80369884; var_v0++){ + func_802FC05C(3, D_80381560[var_v0]); + func_802FB020(D_80381560[var_v0], sp1C->unk0); + } + D_8038156C = 1; + } + } + break; + + case 3: + var_v1 = (D_8038156C != 0) ? (sp1C->unk1C < -20.0f) : (!sp1C->unk18); + if (var_v1) { + D_8038156C = 0; + func_802FB020(sp1C, 0); + break; + } + else{ + sp1C->unk18 = MAX(0, sp1C->unk18 - 1); + temp_f0 = D_80369860[sp1C->unk18]; + + sp1C->unk1C -= sp1C->unk14 * temp_f0; + } + + break; + } + + for(var_v0 = 1; var_v0 < D_80369884; var_v0++){ + if (sp1C->unk0 == 2) { + D_80381560[var_v0]->unk0 = sp1C->unk0; + } + } + } +} bool func_802FC390(void){ s32 *phi_v1 = D_80381560[0]; diff --git a/subyaml/core2.us.v10.yaml b/subyaml/core2.us.v10.yaml index a105e4cd..588eac94 100644 --- a/subyaml/core2.us.v10.yaml +++ b/subyaml/core2.us.v10.yaml @@ -272,7 +272,7 @@ segments: - [0x74290, c, code_74290] #DONE - [0x74420, c, code_74420] #DONE - [0x74910, c, code_74910] #DONE - - [0x74ED0, c, code_74ED0] + - [0x74ED0, c, code_74ED0] #DONE - [0x75480, c, code_75480] - [0x75930, c, code_75930] - [0x75E90, c, code_75E90]