diff --git a/include/functions.h b/include/functions.h index 2d7c2756..c8b103bd 100644 --- a/include/functions.h +++ b/include/functions.h @@ -495,7 +495,7 @@ Struct80s *func_803358B4(void); void func_80335924(Struct80s *, enum asset_e anim_id, f32, f32); void func_80335A74(Struct80s *self, f32 arg1); void func_80335A94(Struct80s *, f32, s32); -int func_803391A4(Gfx**, Mtx**, f32 [3], f32[3], f32, f32*, BKModelBin*); +void func_803391A4(Gfx**, Mtx**, f32 [3], f32[3], f32, f32*, BKModelBin*); void func_8033A280(f32); void func_80346C10(enum bs_e *retVal, enum bs_e fail_state, enum bs_e success_state, enum item_e item_id, int use_item); diff --git a/progress/progress_core2.svg b/progress/progress_core2.svg index c1e527af..70b7cbbd 100644 --- a/progress/progress_core2.svg +++ b/progress/progress_core2.svg @@ -17,7 +17,7 @@ core2 - 89.1369% - 89.1369% + 89.1600% + 89.1600% \ No newline at end of file diff --git a/src/core2/code_7AF80.c b/src/core2/code_7AF80.c index a350a9e7..f039e08e 100644 --- a/src/core2/code_7AF80.c +++ b/src/core2/code_7AF80.c @@ -611,14 +611,14 @@ BKCollisionTri * func_80303960(f32 volume_p1[3], f32 volume_p2[3], f32 radius, f for(cube_indx[0] = min[0]; cube_indx[0] <= max[0]; cube_indx[0]++){ for(cube_indx[1] = min[1]; cube_indx[1] <= max[1]; cube_indx[1]++){ for(cube_indx[2] = min[2]; cube_indx[2] <= max[2]; cube_indx[2]++){ - temp_v0 = func_80331638(cube_atIndices(cube_indx), volume_p1, volume_p2, radius, arg3, arg4, arg5); + temp_v0 = func_80331638(cube_atIndices(cube_indx), volume_p1, volume_p2, radius, arg3, arg4, flags); if (temp_v0 != NULL) { var_s5 = temp_v0; } } } } - temp_v0 = func_80331638(func_8030364C(), volume_p1, volume_p2, radius, arg3, arg4, arg5); + temp_v0 = func_80331638(func_8030364C(), volume_p1, volume_p2, radius, arg3, arg4, flags); if (temp_v0 != NULL) { var_s5 = temp_v0; } @@ -1200,7 +1200,20 @@ void spawnableActorList_addIfMapVisited(ActorInfo *arg0, Actor *(*arg1)(s32[3], } } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_7AF80/func_80305510.s") +NodeProp *func_80305510(s32 arg0) { + NodeProp *var_v0; + s32 sp20; + u32 var_v1; + + var_v0 = func_803080C8(arg0); + sp20 = 1; + while ((var_v0 != NULL) && ((sp20 == 1) || (var_v0->unk6.bit0 == 1)) && (var_v0->unk10_19 != 0)) { + var_v1 = var_v0->unk10_19; + var_v0 = func_803080C8(var_v1); + sp20 = 0; + } + return ((sp20 == 1) || (var_v0 == NULL) || (var_v0->unk6.bit0 == 1)) ? NULL : var_v0; +} Actor * func_803055E0(enum actor_e arg0, s32 arg1[3], s32 arg2, s32 arg3, s32 arg4){ Actor *actor = func_803056FC(arg0, arg1, arg2); @@ -1235,9 +1248,7 @@ Actor * func_803055E0(enum actor_e arg0, s32 arg1[3], s32 arg2, s32 arg3, s32 ar Actor *func_803056FC(enum actor_e arg0, s32 arg1[3], s32 arg2) { s32 i; - if (func_80320248() == 0) { - arg0 = ACTOR_4_BIGBUTT; - } + arg0 = !func_80320248() ? ACTOR_4_BIGBUTT : arg0; for(i=0; i < sSpawnableActorSize; i++){ if(arg0 == sSpawnableActorList[i].infoPtr->actorId) return sSpawnableActorList[i].spawnFunc(arg1, arg2, sSpawnableActorList[i].infoPtr, sSpawnableActorList[i].unk8); @@ -1372,38 +1383,39 @@ void func_80305D38(void){ D_8036A9D0 = 0; } +#ifndef NONMATCHING #pragma GLOBAL_ASM("asm/nonmatchings/core2/code_7AF80/func_80305D94.s") -// void func_80305D94(void){ -// Struct_core2_7AF80_1 * i; -// u32 j; -// s32 k; -// if(D_8036A9BC != NULL){ -// for(j = 0; j < D_8036A9B8; j++){ -// free((D_8036A9BC + j)->unk8); -// } -// free(D_8036A9BC); -// D_8036A9BC = NULL; -// D_8036A9B8 = 0; -// } +#else +void func_80305D94(void){ + s32 j; + if(D_8036A9BC != NULL){ + for(j = 0; j < D_8036A9B8; j++){ + free(D_8036A9BC[j].unk8); + } + free(D_8036A9BC); + D_8036A9BC = NULL; + D_8036A9B8 = 0; + } -// if(D_8036A9C8 != NULL){ -// for(j = 0; j < D_8036A9C4; j++){ -// free((D_8036A9C8 + j)->unk8); -// } -// free(D_8036A9C8); -// D_8036A9C8 = NULL; -// D_8036A9C4 = 0; -// } + if(D_8036A9C8 != NULL){ + for(j = 0; j < D_8036A9C4; j++){ + free(D_8036A9C8[j].unk8); + } + free(D_8036A9C8); + D_8036A9C8 = NULL; + D_8036A9C4 = 0; + } -// if(D_8036A9D4 != NULL){ -// for(j = 0; j < D_8036A9D0; j++){ -// free((D_8036A9D4 + j)->unk8); -// } -// free(D_8036A9D4); -// D_8036A9D0 = 0; -// D_8036A9D4 = NULL; -// } -// } + if(D_8036A9D4 != NULL){ + for(j = 0; j < D_8036A9D0; j++){ + free(D_8036A9D4[j].unk8); + } + free(D_8036A9D4); + D_8036A9D0 = 0; + D_8036A9D4 = NULL; + } +} +#endif void func_80305F04(s32 *arg0, Struct_core2_7AF80_1 **arg1) { bool continue_loop; diff --git a/src/core2/code_82000.c b/src/core2/code_82000.c index 1cce21a9..adaf25f2 100644 --- a/src/core2/code_82000.c +++ b/src/core2/code_82000.c @@ -6,6 +6,12 @@ extern UNK_TYPE(s32) func_802E8E88(BKCollisionList *, BKVertexList *, f32[3], f3 extern UNK_TYPE(s32) func_802E92AC(BKCollisionList *, BKVertexList *, f32[3], f32, f32[3], s32); extern UNK_TYPE(s32) func_802EC394(BKMeshList *, UNK_TYPE(s32), UNK_TYPE(s32), f32, UNK_TYPE(s32), UNK_TYPE(s32), UNK_TYPE(s32)); extern void func_802EC458(BKVertexList *, s32[3], s32[3]); +extern void func_8033A494(s32); +extern void set_model_render_mode(s32); +extern void func_8033A388(s32, s32, s32, s32); +extern void func_802F7BC0(Gfx **, Mtx **, Vtx **); +extern void func_8033A450(s32); +extern void func_8033A45C(s32, s32); BKCollisionTri *func_80309B48(f32 arg0[3], f32 arg1[3], f32 arg2[3], s32 arg3) ; @@ -174,6 +180,8 @@ struct { f32 unk30; }D_80382350; +enum asset_e func_8030A068(void); + /* .code */ Struct_core2_82000_0 *func_80308F90(enum map_e map_id){ Struct_core2_82000_0 *i_ptr; @@ -230,23 +238,121 @@ f32 func_80308FDC(f32 arg0[3], u32 arg1) { return 0.0f; } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/code_82000/func_803091D4.s") -// void func_803091D4(Gfx **gfx, Mtx **mtx, Vtx **vtx){ -// if( func_80320708() -// && levelSpecificFlags_validateCRC2() -// && func_80320248() -// ){ -// if(func_8030A068() == 0x14cf){ -// func_8033A45C(1, 0); -// func_8033A45C(2, 1); -// } +void func_803091D4(Gfx **gfx, Mtx **mtx, Vtx **vtx) { + s32 temp_a0; -// switch(map_get()) -// { + if (func_80320708() && levelSpecificFlags_validateCRC2() && func_80320248()) { + if (func_8030A068() == 0x14CF) { + func_8033A45C(1, 0); + func_8033A45C(2, 1); + } + // temp_v0 = map_get(); + switch (map_get()) { /* irregular */ + case MAP_88_CS_SPIRAL_MOUNTAIN_6: + if (mapSpecificFlags_get(0) != 0) { + func_8033A45C(1, 1); + func_8033A45C(2, 0); + } + break; -// } -// } -// } + case MAP_12_GV_GOBIS_VALLEY: + func_8033A45C(1, levelSpecificFlags_get(6) ? 1 : 0); + func_8033A45C(2, jiggyscore_isCollected(JIGGY_42_GV_WATER_PYRAMID) ? 0 : 1); + func_8033A45C(5, jiggyscore_isCollected(JIGGY_42_GV_WATER_PYRAMID) ? 1 : 0); + break; + + case MAP_14_GV_SANDYBUTTS_MAZE: + func_8033A45C(5, (func_8028ECAC() == 4) ? 1 : 0); + break; + + case MAP_E_MM_MUMBOS_SKULL: + func_8033A45C(1, 1); + func_8033A45C(5, 1); + break; + + case MAP_47_BGS_MUMBOS_SKULL: + func_8033A45C(1, 2); + func_8033A45C(5, 2); + break; + + case MAP_48_FP_MUMBOS_SKULL: + func_8033A45C(1, 3); + func_8033A45C(5, 3); + break; + + case MAP_30_MMM_MUMBOS_SKULL: + func_8033A45C(1, 4); + func_8033A45C(5, 4); + break; + + case MAP_4A_CCW_SPRING_MUMBOS_SKULL: + func_8033A45C(1, 5); + func_8033A45C(5, 5); + break; + case MAP_4B_CCW_SUMMER_MUMBOS_SKULL: + func_8033A45C(1, 6); + func_8033A45C(5, 6); + break; + case MAP_4C_CCW_AUTUMN_MUMBOS_SKULL: + func_8033A45C(1, 7); + func_8033A45C(5, 7); + break; + case MAP_4D_CCW_WINTER_MUMBOS_SKULL: + func_8033A45C(1, 8); + func_8033A45C(5, 8); + break; + case MAP_5E_CCW_SPRING_NABNUTS_HOUSE: + case MAP_5F_CCW_SUMMER_NABNUTS_HOUSE: + case MAP_60_CCW_AUTUMN_NABNUTS_HOUSE: + func_8033A45C(1, 1); + func_8033A45C(2, 0); + break; + case MAP_61_CCW_WINTER_NABNUTS_HOUSE: + func_8033A45C(1, 0); + func_8033A45C(2, 1); + break; + case MAP_1D_MMM_CELLAR: + func_8033A45C(1, func_80326EEC(0x191) ? 0 : 1); + break; + case MAP_7C_CS_INTRO_BANJOS_HOUSE_1: + case MAP_89_CS_INTRO_BANJOS_HOUSE_2: + case MAP_8A_CS_INTRO_BANJOS_HOUSE_3: + case MAP_8C_SM_BANJOS_HOUSE: + case MAP_91_FILE_SELECT: + func_8033A45C(5, 1); + break; + case MAP_7B_CS_INTRO_GL_DINGPOT_1: + case MAP_81_CS_INTRO_GL_DINGPOT_2: + func_8033A45C(4, 0); + func_8033A45C(5, 0); + func_8033A45C(6, 0); + break; + case MAP_82_CS_ENTERING_GL_MACHINE_ROOM: + case MAP_83_CS_GAME_OVER_MACHINE_ROOM: + case MAP_84_CS_UNUSED_MACHINE_ROOM: + func_8033A45C(4, 1); + func_8033A45C(5, 1); + func_8033A45C(6, 1); + break; + case MAP_93_GL_DINGPOT: + func_8033A45C(4, 1); + func_8033A45C(5, 1); + func_8033A45C(6, (func_8038EAE0(0xA) || func_8031FF1C(0xE2) || func_803203FC(0xC1))); + break; + } + func_8033A450(D_80382350.unk24); + set_model_render_mode(1); + temp_a0 = D_80382350.unk0; + if (temp_a0 != 0) { + func_8033A494(temp_a0); + } + func_8033A388(D_80382350.unk2C, D_80382350.unk2D, D_80382350.unk2E, 0xFF); + func_803391A4(gfx, mtx, NULL, NULL, D_80382350.unk28->unk14, NULL, D_80382350.unk18); + if (!func_80309F78()) { + func_802F7BC0(gfx, mtx, vtx); + } + } +} void func_80309628(Gfx **gfx, Mtx **mtx, Vtx **vtx) { s32 temp_a0; @@ -256,8 +362,9 @@ void func_80309628(Gfx **gfx, Mtx **mtx, Vtx **vtx) { func_8033A45C(1, (func_80326EEC(0x191) != NULL) ? 0 : 1); } set_model_render_mode(2); - if (D_80382350.unk4 != 0) { - func_8033A494(D_80382350.unk4); + temp_a0 = D_80382350.unk4; + if (temp_a0 != 0) { + func_8033A494(temp_a0); } func_8033A388(D_80382350.unk2C, D_80382350.unk2D, D_80382350.unk2E, 0xFF); func_803391A4(gfx, mtx, NULL, NULL, D_80382350.unk28->unk14, NULL, D_80382350.unk1C); diff --git a/subyaml/core2.us.v10.yaml b/subyaml/core2.us.v10.yaml index d9748fb9..7b4809b1 100644 --- a/subyaml/core2.us.v10.yaml +++ b/subyaml/core2.us.v10.yaml @@ -286,7 +286,7 @@ segments: - [0x79C80, c, code_79C80] #DONE - [0x7A760, c, code_7A760] #DONE - [0x7AF80, c, code_7AF80] - - [0x82000, c, code_82000] + - [0x82000, c, code_82000] #DONE - [0x83340, c, code_83340] - [0x83D70, c, gc/section] #DONE - [0x840D0, c, gc/sky] #DONE