From ceb24cd22513ce90c5d30483eb921577ee4dba1a Mon Sep 17 00:00:00 2001 From: Banjo Kazooie Date: Wed, 2 Nov 2022 14:31:03 -0500 Subject: [PATCH] core2/code_851D0.c done --- README.md | 2 +- include/functions.h | 2 +- progress/progress_core2.svg | 6 +- progress/progress_total.svg | 6 +- src/core2/code_76D90.c | 156 ++++++++++----------- src/core2/code_7AF80.c | 265 ++++++++++++++++++------------------ src/core2/code_851D0.c | 179 +++--------------------- subyaml/core2.us.v10.yaml | 2 +- 8 files changed, 232 insertions(+), 386 deletions(-) diff --git a/README.md b/README.md index 1e1d9a19..6da620fd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# banjo (92.5147%) +# banjo (92.6466%) diff --git a/include/functions.h b/include/functions.h index 2e5c58ab..7ae76960 100644 --- a/include/functions.h +++ b/include/functions.h @@ -187,7 +187,7 @@ void fxcommon2score_free(enum item_e, struct8s *); struct7s *func_802FDE2C(s32); void func_802FE844(s32, struct8s *); -void func_802FDEE0(s32, struct8s *, Gfx**, Mtx**, s32*); +void func_802FDEE0(s32, struct8s *, Gfx**, Mtx**, Vtx **); void func_802FDDC4(s32, struct8s *); struct7s *func_802FF090(enum item_e); diff --git a/progress/progress_core2.svg b/progress/progress_core2.svg index b4254b4b..93564ca8 100644 --- a/progress/progress_core2.svg +++ b/progress/progress_core2.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ core2 - 90.7278% - 90.7278% + 90.9578% + 90.9578% \ No newline at end of file diff --git a/progress/progress_total.svg b/progress/progress_total.svg index b9c32728..c9b8f30f 100644 --- a/progress/progress_total.svg +++ b/progress/progress_total.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ Banjo-Kazooie (us.v10) - 92.5147% - 92.5147% + 92.6466% + 92.6466% \ No newline at end of file diff --git a/src/core2/code_76D90.c b/src/core2/code_76D90.c index 8eb01d4d..6fb7b98f 100644 --- a/src/core2/code_76D90.c +++ b/src/core2/code_76D90.c @@ -18,7 +18,7 @@ f32 func_802FB0E4(s32); extern void *D_8036A010; extern void *D_8036A014; -extern f32 D_8036A018[]; +extern s32 D_8036A018[]; extern Gfx D_8036A030[]; @@ -93,96 +93,88 @@ f32 func_802FDE60(f32 arg0) { return arg0; } -#if 1 +#ifndef NONMATCHING #pragma GLOBAL_ASM("asm/nonmatchings/core2/code_76D90/func_802FDEE0.s") #else -void func_802FDEE0(s32 arg0, struct8s *arg1, Gfx **arg2, Mtx **arg3, s32 *arg4){ +void func_802FDEE0(s32 arg0, struct8s *arg1, Gfx **arg2, Mtx **arg3, Vtx **arg4){ + s32 var_v0; + s32 var_v1; + s32 sp13C; + s32 sp138; s32 sp134; f32 sp130; + f32 sp12C; + f32 sp128; f32 sp124; - s32 phi_a1; - s32 phi_s4; - s32 phi_v0; - s32 phi_v1; - f64 phi_f24; - f32 temp_f30; - s32 i; + f64 var_f24; + u32 sp118; + f32 sp110; - if(!D_8036A010) - return; - phi_a1 = (D_803815C0 == 2) ? ((D_8036A014) ? D_8036A014: D_8036A010) : D_8036A010; - //func_80347FC0(arg2, phi_a1, 0, 0, 0, 0, 0, 2, 2, &sp13C, &sp138); - func_8024C7B8(arg2, arg3); - gSPDisplayList((*arg2)++, D_8036A030); - phi_s4 = 2; - for(sp134 = 0; sp134 < phi_a1; sp134++){ + + sp118 = D_803815C0 == 2; + if (D_8036A010 != 0) { + func_80347FC0(arg2, (sp118 ) ? (D_8036A014 != 0) ? D_8036A014 : D_8036A010 : D_8036A010, 0, 0, 0, 0, 0, 2, 2, &sp13C, &sp138); + func_8024C7B8(arg2, arg3); + gSPDisplayList((*arg2)++, D_8036A030); + for(sp134 = 0; sp134 < (sp118) ? (D_8036A014 != 0) ? 2 : 1 : 6; sp134++){ + sp110 = D_8036A018[sp134] * -0x3C; + gDPPipeSync((*arg2)++); + if (sp118) { + if (sp134 != 0) { + func_80347FC0(arg2, D_8036A010, 0, 0, 0, 0, 0, 2, 2, &sp13C, &sp138); + gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, (0xFF - D_803815E4)); + } else { + gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, D_803815E4); + } + } else { + if (D_803815D4 <= D_8036A018[sp134]) { + gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, 0x50); + } + else{ + if ((D_803815EC != 0) && ((D_803815D4 - 1.0f) == D_8036A018[sp134])) { + gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, D_803815E8); + } else { + gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, 0xFF); + } + } + } + sp128 = (244.0f - ((f32) D_80276588 / 2)); + sp124 = func_802FB0E4(arg1) + ((f32) D_8027658C / 2) - 246.0f; + guTranslate(*arg3, sp128 * 4.0f, sp124 * 4.0f, 0.0f); + gSPMatrix((*arg2)++, OS_K0_TO_PHYSICAL((*arg3)++), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + + guRotate(*arg3, func_802FDE60(D_803815D8 + D_803815DC), 0.0f, 0.0f, 1.0f); + gSPMatrix((*arg2)++, OS_K0_TO_PHYSICAL((*arg3)++), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + + guScale(*arg3, D_803815E0, D_803815E0, D_803815E0); + gSPMatrix((*arg2)++, OS_K0_TO_PHYSICAL((*arg3)++), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + + guTranslate(*arg3, -sp128 * 4.0f, -sp124 * 4.0f, 0.0f); + gSPMatrix((*arg2)++, OS_K0_TO_PHYSICAL((*arg3)++), G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); + var_f24 = MIN(1.0, MAX(0.0, D_803815C8)); + sp130 = cosf(((D_803815CC + sp110) * 0.017453292519943295)) * (var_f24 * 24.5) * D_803815D0; + var_f24 = MIN(1.0, MAX(0.0, D_803815C8)); + sp12C = sinf(((D_803815CC + sp110) * 0.017453292519943295))* (var_f24 * 24.5) * D_803815D0; + gSPVertex((*arg2)++, *arg4, 4, 0); + for(var_v1 = 0; var_v1 < 2; var_v1++){ + for(var_v0 = 0; var_v0 < 2; var_v0++, (*arg4)++){ + (*arg4)->v.ob[0] = ((((sp13C * D_803815D0) * var_v0) - ((sp13C * D_803815D0) / 2)) + (s32) (sp130 + sp128)) * 4.0f; + (*arg4)->v.ob[1] = ((((sp138 * D_803815D0) / 2) - ((sp138 * D_803815D0) * var_v1)) + (s32) (sp12C + sp124)) * 4.0f; + (*arg4)->v.ob[2] = -0x14; + (*arg4)->v.tc[0] = (s16) ((sp13C - 1) * var_v0 << 9); + (*arg4)->v.tc[1] = (s16) ((sp138 - 1) * var_v1 << 9); + + } + } + gSP1Quadrangle((*arg2)++, 0, 1, 3, 2, 0); + } gDPPipeSync((*arg2)++); - if(D_803815C0 == 2){ - if(sp134 != 0){ - //func_80347FC0(arg2, D_8036A010, 0, 0, 0, 0, 0, phi_s4, phi_s4, &sp13C, &sp138); - gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, (0xFF - D_803815E4)& 0xFF); - } - else{ - gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, D_803815E4 & 0xFF); - } - } - else{ - if(D_803815D4 < D_8036A018[sp134]){ - gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, 0x50); - }else if(D_803815EC && (D_803815D4 - 1.0f) == D_8036A018[sp134]){ - gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, D_803815E8 & 0xFF); - }else{ - gDPSetPrimColor((*arg2)++, 0, 0, 0x00, 0x00, 0x00, 0xFF); - } - } - - - //if statements here - temp_f30 = 244.0f - ((f32) D_80276588 / 2.0f); - sp124 = (func_802FB0E4(arg1) + ((f32) D_8027658C / 2.0f)) - 246.0f; - guTranslate(*arg3, temp_f30 * 4.0f, sp124, 0); - gSPMatrix((*arg2)++, 0x80000000 + (*arg3)++, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); - - guRotate(*arg3, func_802FDE60(D_803815D8 + D_803815DC), 0, 0, 1.0f); - gSPMatrix((*arg2)++, 0x80000000 + (*arg3)++, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); - - guScale(*arg3, D_803815E0, D_803815E0, D_803815E0); - gSPMatrix((*arg2)++, 0x80000000 + (*arg3)++, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); - - guTranslate(*arg3, -temp_f30 * 4.0f, -sp124 * 4.0f, 0); - gSPMatrix((*arg2)++, 0x80000000 + (*arg3)++, G_MTX_NOPUSH | G_MTX_MUL | G_MTX_MODELVIEW); - - phi_f24 = _76D90_MIN(_76D90_MAX(D_803815C8, 0.0),1.0); - sp134 = temp_f18 = ((f64) cosf((f32) ((f64) (*(void *)0x803815CC + sp110) * D_803773B0)) * (phi_f24 * D_803773B8) * D_803815D0); - gSPVertex((*arg2)++, *arg4, 4, 0); - do{ - for(phi_v0 = 0; phi_v0 < phi_s4; phi_v0++){ - // temp_f24 = (f32) sp13C * D_803815D0; - //(*arg4)->v.ob[0] = ((((temp_f24 * (f32) phi_v0) - (temp_f24 / 2.0f)) + temp_f14) * 4.0f); - // temp_f30_2 = (f32) sp138 * D_803815D0; - //(*arg4)->v.ob[1] = ((((temp_f30_2 * (f32) phi_v0) - (temp_f30_2 / 2.0f)) + temp_f14) * 4.0f); - // (*arg4)->unk4 = (u16)-0x14; - // (*arg4)->unk8 = (s16) (((sp13C - 1) * phi_v0) << 9); - // (*arg4)->unkA = (s16) (((sp138 - 1) * phi_v1) << 9); - // *arg4 = (void *) (*arg4 + 0x10); - //(*arg4)++ - }// loop43 - phi_v1++; - }while(phi_v1 != phi_s4); // loop42 - phi_a1 = (D_803815C0 == 2) ? ((D_8036A014) ? ++phi_s4: 1) : 6; + gDPSetTextureLUT((*arg2)++, G_TT_NONE); + gDPPipelineMode((*arg2)++, G_PM_NPRIMITIVE); + func_8024C904(arg2, arg3); } - - - - - //L802FE7A0 - //gSP1Quadrangle((*arg2)++, 0, 1, 3, 2, 0); - gDPPipeSync((*arg2)++); - gDPSetTextureLUT((*arg2)++, G_TT_NONE); - gDPPipelineMode((*arg2)++, G_PM_NPRIMITIVE); - func_8024C904(arg2, arg3, arg4); - //L802FE7FC } #endif diff --git a/src/core2/code_7AF80.c b/src/core2/code_7AF80.c index 251c53d9..f19ad954 100644 --- a/src/core2/code_7AF80.c +++ b/src/core2/code_7AF80.c @@ -37,6 +37,7 @@ typedef struct { NodeProp *func_803049CC(enum actor_e actor_id, s32 arg1[3]); s32 func_80304FC4(enum actor_e *actor_id_list, NodeProp **node_list, s32 arg2); void cube_positionToIndices(s32 arg0[3], f32 arg1[3]); +NodeProp *func_803080C8(s32 arg0); void func_80308984(void); void func_80308D2C(Gfx **gfx, Mtx **mtx, Vtx **vtx); void func_80308F0C(Cube *cube); @@ -92,9 +93,9 @@ struct { u8 D_80381FE8[0x50]; -Cube *D_80382038[0x1C]; -s32 D_803820A8[3]; -s32 D_803820B4; +Cube *D_80382038[0x1C]; //static? +s32 D_803820A8[3]; //local static +s32 D_803820B4; //local static s32 D_803820B8[0x20]; //ActorProp *, (maybe Prop *) s32 pad_80382138; s32 D_8038213C; @@ -1827,90 +1828,56 @@ s32 func_803073CC(f32 arg0[3], s32 arg1, s32 arg2) { return -1; } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_7AF80/func_80307504.s") -// s32 func_80307504(f32 arg0[3], s32 arg1, s32 arg2, s32 arg3, s32 arg4) { -// s32 sp4C[3]; -// s32 sp40; -// s32 temp_a0; -// s32 temp_t3; -// s32 temp_v0; -// s32 temp_v0_2; -// s32 temp_v0_4; -// s32 temp_v0_5; -// s32 temp_v1; -// s32 var_a3; -// u32 temp_t1; -// u32 temp_t1_2; -// u32 temp_v0_3; -// u32 var_s0; -// u32 var_s0_2; -// Struct_core2_7AF80_2 *temp_s0; -// void *temp_s1; +s32 func_80307504(f32 arg0[3], s32 arg1, s32 arg2, s32 arg3, s32 arg4) { + Struct_core2_7AF80_2 *var_s0; + Struct_core2_7AF80_1 *temp_s1; + s32 min; + s32 max; + s32 sp4C[3]; -// ml_vec3f_to_vec3w(sp4C, arg0); -// // temp_s1 = D_8036A9C8[arg1].unk4; -// if (D_80381FE8[D_8036A9C8[arg1].unk4] == 0) { -// return -1; -// } + ml_vec3f_to_vec3w(sp4C, arg0); + temp_s1 = &D_8036A9C8[arg1]; + if (D_80381FE8[temp_s1->unk4] == 0) { + return -1; + } -// sp40 = arg4 & 1; -// temp_s0 = &D_8036A9C8[arg1].unk8[arg2]; -// temp_t3 = arg3 / 2; -// temp_v1 = sp4C[1] + temp_t3; -// temp_a0 = sp4C[1] - temp_t3; -// if (sp40) { -// if (temp_s0->unk10_3 & arg4) { -// if ((temp_v1 >= temp_s0->unk0[1]) && (temp_a0 < temp_s0->unk0[1])) { -// if (func_80259328(&sp4C, temp_s0, temp_s0->unkC, sp40)) { -// return arg2; -// } -// } -// } -// goto block_14; -// } -// else{ -// if ((temp_s0->unk10_3 & arg4) && ((temp_s0->unk10_3 & 2) || ((temp_v0_2 = temp_s0->unk0[1], ((temp_v1 < temp_v0_2) == 0)) && (temp_a0 < temp_v0_2)))) { -// if (func_80259328(&sp4C, temp_s0, temp_s0->unkC, sp40) != 0) { -// return arg2; -// } -// } -// } -// block_14: -// temp_v0_3 = temp_s1->unk8; -// if (var_a3 != 0) { -// var_s0_2 = temp_v0_3; -// if (temp_v0_3 < (u32) (temp_v0_3 + (temp_s1->unk0 * 0x14))) { -// loop_16: -// if (((u32) (var_s0_2->unk10 << 0x1C) >> 0x1D) & arg4) { -// temp_v0_4 = var_s0_2->unk4; -// if ((temp_v1 >= temp_v0_4) && (temp_a0 < temp_v0_4) && (func_80259328(&sp4C, (void *) var_s0_2, var_s0_2->unkC) != 0)) { -// return (s32) (var_s0_2 - temp_s1->unk8) / 20; -// } -// } -// var_s0_2 += 0x14; -// if (var_s0_2 >= (u32) (temp_s1->unk8 + (temp_s1->unk0 * 0x14))) { -// goto block_31; -// } -// goto loop_16; -// } -// goto block_31; -// } -// var_s0 = temp_v0_3; -// if (temp_v0_3 < (u32) (temp_v0_3 + (temp_s1->unk0 * 0x14))) { -// loop_24: -// temp_t1_2 = (u32) (var_s0->unk10 << 0x1C) >> 0x1D; -// if ((temp_t1_2 & arg4) && ((temp_t1_2 & 2) || ((temp_v0_5 = var_s0->unk4, ((temp_v1 < temp_v0_5) == 0)) && (temp_a0 < temp_v0_5))) && (func_80259328(&sp4C, (void *) var_s0, var_s0->unkC) != 0)) { -// return (s32) (var_s0 - temp_s1->unk8) / 20; -// } -// var_s0 += 0x14; -// if (var_s0 >= (u32) (temp_s1->unk8 + (temp_s1->unk0 * 0x14))) { -// goto block_31; -// } -// goto loop_24; -// } -// block_31: -// return -1; -// } + var_s0 = &temp_s1->unk8[arg2]; + max = sp4C[1] + arg3 / 2; + min = sp4C[1] - arg3 / 2; + if (arg4 & 1) { + if (var_s0->unk10_3 & arg4) { + if (!(max < var_s0->unk0[1]) && (min < var_s0->unk0[1])) { + if (func_80259328(sp4C, var_s0->unk0, var_s0->unkC)) { + return arg2; + } + } + } + } + else{ + if( (var_s0->unk10_3 & arg4)) + if( ((var_s0->unk10_3 & 2) || (!(max < var_s0->unk0[1]) && (min < var_s0->unk0[1])))) + if( func_80259328(&sp4C, var_s0->unk0, var_s0->unkC)) + return arg2; + } + + if (arg4 & 1) { + for(var_s0 = temp_s1->unk8; var_s0 < temp_s1->unk8 + temp_s1->unk0; var_s0++){ + if (var_s0->unk10_3 & arg4) + if (!(max < var_s0->unk0[1]) && (min < var_s0->unk0[1])) + if(func_80259328(&sp4C, var_s0, var_s0->unkC)) + return (var_s0 - temp_s1->unk8); + } + } + else{ + for(var_s0 = temp_s1->unk8; var_s0 < temp_s1->unk8 + temp_s1->unk0; var_s0++){ + if ((var_s0->unk10_3 & arg4)) + if(((var_s0->unk10_3 & 2) || (!(max < var_s0->unk0[1]) && (min < var_s0->unk0[1])))) + if(func_80259328(&sp4C, var_s0, var_s0->unkC)) + return var_s0 - temp_s1->unk8; + } + } + return -1; +} bool func_803077FC(f32 arg0[3], s32 *arg1, s32 *arg2, s32 arg3, u32 arg4) { s32 sp3C[3]; @@ -2091,6 +2058,9 @@ u32 func_80307EA8(s32 arg0, s32 arg1[3], s32 *arg2, s32 *arg3) { u32 var_s4; NodeProp *temp_a0; Cube *temp_v0; + static s32 D_803820A8[3]; + static s32 D_803820B4; + var_s4 = 0; if (arg0 == 0) { @@ -2101,23 +2071,22 @@ u32 func_80307EA8(s32 arg0, s32 arg1[3], s32 *arg2, s32 *arg3) { return 0; } while(var_s4 == 0){ - var_s2 = D_803820B4; if (D_80381FA0.max[0] < D_803820A8[0]) { return -1U; } temp_v0 = cube_atIndices(D_803820A8); if ((temp_v0 != NULL) && (temp_v0->prop1Cnt != 0)) { - *arg2 = temp_v0->prop1Ptr[var_s2].unk10_19; - var_s4 = temp_v0->prop1Ptr[var_s2].unk10_31; - *arg3 = temp_v0->prop1Ptr[var_s2].unk6.bit0; - arg1[0] = temp_v0->prop1Ptr[var_s2].x; - arg1[1] = temp_v0->prop1Ptr[var_s2].y; - arg1[2] = temp_v0->prop1Ptr[var_s2].z; - var_s2++; + var_s4 = temp_v0->prop1Ptr[D_803820B4].unk10_31; + *arg2 = temp_v0->prop1Ptr[D_803820B4].unk10_19; + *arg3 = temp_v0->prop1Ptr[D_803820B4].unk6.bit0; + arg1[0] = temp_v0->prop1Ptr[D_803820B4].x; + arg1[1] = temp_v0->prop1Ptr[D_803820B4].y; + arg1[2] = temp_v0->prop1Ptr[D_803820B4].z; + D_803820B4++; } - if ((temp_v0 == NULL) || (var_s2 >= temp_v0->prop1Cnt)) { - var_s2 = 0; + if ((temp_v0 == NULL) || (D_803820B4 >= temp_v0->prop1Cnt)) { + D_803820B4 = 0; D_803820A8[2]++; if (D_80381FA0.max[2] < D_803820A8[2]) { D_803820A8[2] = D_80381FA0.min[2]; @@ -2132,14 +2101,38 @@ u32 func_80307EA8(s32 arg0, s32 arg1[3], s32 *arg2, s32 *arg3) { } } } - D_803820B4 = var_s2; } return var_s4; } #endif -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_7AF80/func_803080C8.s") +NodeProp *func_803080C8(s32 arg0) { + s32 sp3C[3]; + u32 var_v1; + Cube *temp_v0; + + for(sp3C[1] = D_80381FA0.min[1]; sp3C[1] <= D_80381FA0.max[1]; sp3C[1]++){ + if(func_80305C30(sp3C[1] - D_80381FA0.min[1])){ + for(sp3C[0] = D_80381FA0.min[0]; sp3C[0] <= D_80381FA0.max[0]; sp3C[0]++){ + for(sp3C[2] = D_80381FA0.min[2]; sp3C[2] <= D_80381FA0.max[2]; sp3C[2]++){ + temp_v0 = cube_atIndices(&sp3C); + if (temp_v0 != NULL) { + for(var_v1 = 0; var_v1 < temp_v0->prop1Cnt; var_v1++){ + if (arg0 == temp_v0->prop1Ptr[var_v1].unk10_31) { + D_8036A9DC = temp_v0; + return &temp_v0->prop1Ptr[var_v1]; + } + } + + } + } + } + } + } + D_8036A9DC = NULL; + return NULL; +} UNK_TYPE(s32) func_80308224(void){ return D_8036A9DC; @@ -2178,44 +2171,50 @@ bool func_803082D8(Cube *arg0, s32 *arg1, bool arg2, bool arg3) { return var_a0; } +#ifndef NONMATCHING #pragma GLOBAL_ASM("asm/nonmatchings/core2/code_7AF80/func_803083B0.s") -// s32 func_803083B0(s32 arg0) { -// s32 temp_v0; -// s32 var_v0; -// Cube *var_s0; +#else +s32 func_803083B0(s32 arg0) { + s32 temp_v0; + s32 var_v0; + bool var_a2; + Cube *var_s0; + static s32 D_80382140; + static Cube *D_80382144; -// if (arg0 == -1) { -// var_s0 = D_80381FA0.cube_list; -// D_80382140 = 0; -// var_v0 = 0; -// goto block_12; -// } -// var_s0 = (u32) D_80382144; -// if (D_80382140 < var_s0->prop2Cnt) { -// temp_v0 = func_803082D8(var_s0, &D_80382140, NOT(arg0 < 0), arg0 & 1); -// if (D_80382140 != 0) { -// return temp_v0; -// } -// } -// D_80382140 = 0; -// loop_6: -// loop_7: -// var_s0 += 0xC; -// if (var_s0 >= &D_80381FA0.cube_list[D_80381FA0.cubeCnt]) { -// D_80382144 = (s32 *) var_s0; -// return -1; -// } -// if (var_s0->prop2Cnt != 0) { -// var_v0 = func_803082D8(var_s0, &D_80382140, NOT(arg0 < 0), arg0 & 1); -// if (D_80382140 != 0) { -// block_12: -// D_80382144 = var_s0; -// return var_v0; -// } -// goto loop_6; -// } -// goto loop_7; -// } + if (arg0 == -1) { + D_80382144 = D_80381FA0.cube_list; + D_80382140 = 0; + return 0; + } + + var_s0 = D_80382144; + if (D_80382140 < D_80382144->prop2Cnt) { + temp_v0 = func_803082D8(var_s0, &D_80382140, (arg0 < 0) ^ 1, arg0 & 1); + if (D_80382140 != 0) { + return temp_v0; + } + } + D_80382140 = 0; +loop_6: +loop_7: + var_s0++; + if (var_s0 >= D_80381FA0.cube_list + D_80381FA0.cubeCnt) { + D_80382144 = var_s0; + return -1; + } + if (0 < var_s0->prop2Cnt) { + var_v0 = func_803082D8(var_s0, &D_80382140, (arg0 < 0) ^ 1, arg0 & 1); + if (D_80382140 != 0) { + D_80382144 = var_s0; + return var_v0; + } + goto loop_6; + } + goto loop_7; + return -1; +} +#endif enum actor_e func_803084F0(s32 arg0){ s32 var_v1; diff --git a/src/core2/code_851D0.c b/src/core2/code_851D0.c index a513395b..c8e5b954 100644 --- a/src/core2/code_851D0.c +++ b/src/core2/code_851D0.c @@ -83,173 +83,28 @@ void func_8030C2D4(Gfx **gdl, Mtx **mptr, Vtx **vptr){ func_80253640(gdl, D_803A5D00[func_8024BDA0()]); } -#ifndef NONMATCHING -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_851D0/func_8030C33C.s") -#else void func_8030C33C(Gfx **gfx, Mtx **mtx, Vtx **vtx) { - s32 sp80; - s32 sp74; - s32 sp70; - s32 sp64; - s32 sp60; - s32 sp54; - s32 sp50; - s32 sp48; - s32 sp40; - s16 temp_s4; - s16 temp_t4; - s32 temp_a0; - s32 temp_a1; - s32 temp_a3; - s32 temp_t6; - s32 temp_t8; - void *temp_a1_2; - void *temp_a2; - void *temp_s0; - void *temp_s0_2; - void *temp_s0_3; - void *temp_s0_4; - void *temp_s0_5; - void *temp_s0_6; - void *temp_s0_7; - void *temp_s0_8; - void *temp_s0_9; - void *temp_s2; - s32 phi_ra; - s32 phi_t5; - s32 phi_t4; - s32 phi_t3; - s32 phi_t2; - s32 phi_t1; - s32 phi_s3; - s32 phi_s5; - s16 phi_s6; - s32 phi_v0; - s16 phi_v1; - s16 phi_s4; - s16 phi_t4_2; - s16 phi_v0_2; - s16 phi_v1_2; - s32 phi_v0_3; - s32 phi_a0; - s32 phi_s7; - + s32 x, y; + gSPDisplayList((*gfx)++, D_8036C450); - sp64 = 0x1F; - sp54 = 0x130; - sp74 = 0; - phi_t4_2 = 0xB0; - do { - phi_ra = sp74 << 5; - phi_t5 = (0x40 + 7); - phi_t4 = (s32) phi_t4_2; - phi_t3 = (s32) sp56; - phi_t2 = (sp64 << 2) & 0xFFF; - phi_t1 = (sp74 << 2) & 0xFFF; - phi_s3 = 0; - phi_s5 = 0x1F; - phi_s6 = 0x188; - phi_s4 = 0x108; - phi_s7 = 0; -loop_2: - sp40 = phi_ra; - sp80 = phi_t5; - sp48 = phi_t4; - sp50 = phi_t3; - sp60 = phi_t2; - sp70 = phi_t1; - - // gDPLoadTextureTile((*gfx)++, &D_80382450, G_IM_FMT_IA, G_IM_SIZ_16b, 160, height, uls, ult, lrs, lrt, pal, cms, cmt, masks, maskt, shifts, shiftt) - - gDPSetTextureImage((*gfx)++, G_IM_FMT_IA, G_IM_SIZ_16b, 160, D_80382450); - // temp_a1 = (((0x40 + 7 >> 3) & 0x1FF) << 9) | 0xF5700000; - // temp_s0_2->unk0 = temp_a1; - // temp_s0_2->unk4 = 0x07080200; - gDPSetTile((*gfx)++, G_IM_FMT_IA, G_IM_SIZ_32b, 427, 0x0101, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_WRAP, 1, 12, G_TX_NOMIRROR | G_TX_WRAP, 8, 7); - gDPLoadSync((*gfx)++); - // temp_a3 = ((phi_s3 * 4) & 0xFFF) << 0xC; - // temp_a0 = ((phi_s5 * 4) & 0xFFF) << 0xC; - // temp_s0_4->unk0 = (s32) (temp_a3 | 0xF4000000 | phi_t1); - // temp_s0_4->unk4 = (s32) (temp_a0 | 0x07000000 | phi_t2); - gDPLoadTile((*gfx)++, G_TX_LOADTILE, 0, 0, 0, 0); - gDPPipeSync((*gfx)++); - - // temp_s0_6->unk0 = temp_a1; - // temp_s0_6->unk4 = 0x00080200; - gDPSetTile((*gfx)++, G_IM_FMT_IA, G_IM_SIZ_16b, 0, 0x0100, G_TX_RENDERTILE, 0, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMASK, G_TX_NOLOD); - // temp_s0_7->unk4 = (s32) (temp_a0 | phi_t2); - // temp_s0_7->unk0 = (s32) (temp_a3 | 0xF2000000 | phi_t1); - gDPSetTileSize((*gfx)++, G_TX_RENDERTILE, 0, 0, 0, 0); - temp_a1_2 = *gfx; - *gfx = temp_a1_2 + 8; - if ((s32) phi_s6 > 0) { - phi_v1 = (s16) (phi_s7 + 0x188); - } else { - phi_v1 = 0; + for (y = 0; y < 4; y++) { + for(x = 0; x < 5; x++){ + gDPLoadTextureTile((*gfx)++, osVirtualToPhysical(D_80382450), G_IM_FMT_IA, G_IM_SIZ_16b, 160, 128, + 0x20*x, 0x20*y, 0x20*(x + 1) - 1, 0x20*(y + 1) - 1, + 0, + G_TX_NOMIRROR | G_TX_CLAMP, G_TX_NOMIRROR | G_TX_CLAMP, + G_TX_NOMASK, G_TX_NOMASK, + G_TX_NOLOD, G_TX_NOLOD); + gSPScisTextureRectangle((*gfx)++, + (0x20*x + 0x42)*4, (0x20*y + 0x2C)*4, + (0x20*(x + 1) + 0x42)*4, (0x20*(y + 1) + 0x2C)*4, + 0, + 0x20*x << 5, 0x20*y << 5, + 1 << 10, 1 << 10); } - if (phi_t3 > 0) { - phi_v0 = phi_t3; - } else { - phi_v0 = 0; - } - temp_a1_2->unk0 = (s32) ((phi_v0 & 0xFFF) | 0xE4000000 | ((phi_v1 & 0xFFF) << 0xC)); - if ((s32) phi_s4 > 0) { - phi_v1_2 = phi_s4; - } else { - phi_v1_2 = 0; - } - if ((s32) phi_t4_2 > 0) { - phi_v0_2 = phi_t4_2; - } else { - phi_v0_2 = 0; - } - temp_a1_2->unk4 = (s32) ((phi_v0_2 & 0xFFF) | ((phi_v1_2 & 0xFFF) << 0xC)); - temp_a2 = *gfx; - *gfx = temp_a2 + 8; - temp_a2->unk0 = 0xB4000000; - phi_s5 += 0x20; - if ((s32) phi_s4 < 0) { - temp_t6 = (s32) (phi_s4 << 0xA) >> 7; - if (temp_t6 < 0) { - phi_a0 = temp_t6; - } else { - phi_a0 = 0; - } - } else { - phi_a0 = 0; - } - if (phi_t4 < 0) { - temp_t8 = (s32) (phi_t4_2 << 0xA) >> 7; - if (temp_t8 < 0) { - phi_v0_3 = temp_t8; - } else { - phi_v0_3 = 0; - } - } else { - phi_v0_3 = 0; - } - temp_a2->unk4 = (s32) (((phi_ra - phi_v0_3) & 0xFFFF) | (((phi_s3 << 5) - phi_a0) << 0x10)); - temp_s0_8 = *gfx; - temp_s4 = phi_s4 + 0x80; - *gfx = temp_s0_8 + 8; - temp_s0_8->unk0 = 0xB3000000; - temp_s0_8->unk4 = 0x04000400; - phi_s3 += 0x20; - phi_s6 += 0x80; - phi_s4 = temp_s4; - phi_s7 += 0x80; - if (temp_s4 != 0x388) { - goto loop_2; - } - temp_t4 = phi_t4 + 0x80; - sp74 += 0x20; - sp54 += 0x80; - sp64 += 0x20; - phi_t4_2 = temp_t4; - } while (temp_t4 != 0x2B0); + } gSPDisplayList((*gfx)++, D_8036C4A8); } -#endif s32 func_8030C704(void){ diff --git a/subyaml/core2.us.v10.yaml b/subyaml/core2.us.v10.yaml index 8b0ef67a..ae97b225 100644 --- a/subyaml/core2.us.v10.yaml +++ b/subyaml/core2.us.v10.yaml @@ -291,7 +291,7 @@ segments: - [0x83D70, c, gc/section] #DONE - [0x840D0, c, gc/sky] #DONE - [0x84470, c, gc/transition] #DONE - - [0x851D0, c, code_851D0] + - [0x851D0, c, code_851D0] #DONE - [0x857B0, c, code_857B0] #DONE - [0x85800, c, code_85800] #DONE - [0x87E30, c, code_87E30]