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]