From e22a17d8f04f48042d62adfb21f74aefd31cc048 Mon Sep 17 00:00:00 2001 From: Banjo Kazooie Date: Tue, 16 Aug 2022 16:59:39 -0500 Subject: [PATCH] core2/gc/pauseMenu. c progress --- include/enums.h | 24 ++ include/structs.h | 26 +- progress/progress_core2.svg | 6 +- src/core2/code_840D0.c | 127 +++++--- src/core2/code_851D0.c | 22 +- src/core2/code_94A20.c | 2 +- src/core2/code_AD5B0.c | 8 +- src/core2/done/climb.c | 2 +- src/core2/gc/pauseMenu.c | 586 +++++++++++++++++++++++++----------- src/core2/gc/transition.c | 73 ++++- subyaml/core2.us.v10.yaml | 12 +- 11 files changed, 630 insertions(+), 258 deletions(-) diff --git a/include/enums.h b/include/enums.h index 13a0de0e..7c5238b4 100644 --- a/include/enums.h +++ b/include/enums.h @@ -2290,6 +2290,8 @@ enum asset_e ASSET_1E1_ANIM_BEE_DIE, ASSET_1E2_ANIM_BEE_JUMP, + ASSET_1F5_ANIM_TRANSITION_FALLING_JIGGIES = 0x1F5, + ASSET_220_ANIM_SIR_SLUSH_DIE = 0x220, ASSET_221_ANIM_WOZZA_IN_CAVE, @@ -2732,6 +2734,7 @@ enum asset_e // 464 Nabnut's Bed // 465 Dead Snarebear // 466 (Sparkle 2D?) + ASSET_467_MODEL_TRANSITION_FALLING_JIGGIES = 0x467, // 467 (Blank Picture Frame?) // 468 Sexy Grunty // 469 Ugly Tooty @@ -3380,7 +3383,28 @@ enum asset_e ASSET_71A_SPRITE_SPARKLE_PINK_2, ASSET_71B_SPRITE_SPARKLE_ORANGE_2, + ASSET_7BD_MODEL_SKYBOX_MM = 0x7BD, + ASSET_7BE_MODEL_CLOUDS_MM, + ASSET_7BF_MODEL_SKYBOX_TTC, + ASSET_7C0_MODEL_CLOUDS_TTC, + ASSET_7C1_MODEL_SKYBOX_GV, + ASSET_7C2_MODEL_SKYBOX_MMM, + ASSET_7C3_MODEL_SKYBOX_MMM, + ASSET_7C4_MODEL_SKYBOX_SM, + ASSET_7C5_MODEL_SKYBOX_RBB, + ASSET_7C6_MODEL_SKYBOX_FP, + ASSET_7C7_MODEL_CLOUDS_FP_A, + ASSET_7C8_MODEL_CLOUDS_FP_B, + ASSET_7C9_MODEL_SKYBOX_INTRO_N64, + ASSET_7CA_MODEL_SKYBOX_LAIR_MMM, + ASSET_7CB_MODEL_CLOUDS_LAIR_MMM, + ASSET_7CC_MODEL_SKYBOX_GRUNTYS_FALL, + ASSET_7CD_MODEL_SKYBOX_BEACH_ENDING, + ASSET_7CF_MODEL_TRANSITION_UNKNOWN = 0x7CF, + ASSET_7D0_MODEL_TRANSITION_JIGGY, + + ASSET_7D4_MODEL_TRANSITION_WITCH = 0x7D4, ASSET_7D7_MODEL_MM_HUT = 0x7d7, ASSET_7D8_MODEL_MM_HUT_TOP, diff --git a/include/structs.h b/include/structs.h index 58a5f949..8447d2ae 100644 --- a/include/structs.h +++ b/include/structs.h @@ -257,7 +257,7 @@ typedef struct struct_9_s{ u8 uid; u8 unk1; u8 unk2; - u8 pad3[1]; + // u8 pad3[1]; f32 unk4; //duration s32 unk8; //asset_indx s32 unkC; //animation_indx @@ -319,7 +319,8 @@ typedef struct struct_16_s{ }struct16s; typedef struct struct_1A_s{ - u8 pad0[0x8]; + f32 unk0; + f32 unk4; u8 *str; s16 unkC; u8 unkE; @@ -331,6 +332,12 @@ typedef struct struct_1B_s{ s16 exit; }struct1Bs; +typedef struct struct_1C_1_s{ + s16 level_id; + s16 x; //0x2 + u8 *string; //0x4 +}struct1Cs_1; + typedef struct struct_1C_s{ s8 unk0; s8 unk1; @@ -497,21 +504,6 @@ typedef struct { }struct46s; -typedef struct { - s16 unk0; - u8 pad2[0x2]; - f32 unk4; - f32 unk8; -}struct47s; - -typedef struct { - s16 map; - u8 pad2[2]; - struct47s unk4[3]; -}struct48s; - - - typedef struct{ f32 unk0[3]; f32 unkC[3]; diff --git a/progress/progress_core2.svg b/progress/progress_core2.svg index bc4c6576..fdb87191 100644 --- a/progress/progress_core2.svg +++ b/progress/progress_core2.svg @@ -9,7 +9,7 @@ - + @@ -17,7 +17,7 @@ core2 - 79.7336% - 79.7336% + 80.6881% + 80.6881% \ No newline at end of file diff --git a/src/core2/code_840D0.c b/src/core2/code_840D0.c index 7a7fa091..c266c4c4 100644 --- a/src/core2/code_840D0.c +++ b/src/core2/code_840D0.c @@ -4,23 +4,61 @@ extern void func_8024CE60(f32, f32); -extern struct48s D_8036BD40[]; +typedef struct { + s16 model_id; + // u8 pad2[0x2]; + f32 scale; + f32 rotation_speed; +}SkyInfo; -/* .rodata */ -extern f32 D_80378440; +typedef struct { + s16 map; + // u8 pad2[2]; + SkyInfo sky_list[3]; +}MapSkyInfo; + +/* .data */ +MapSkyInfo D_8036BD40[] = { + {MAP_94_CS_INTRO_SPIRAL_7, {{ASSET_7C4_MODEL_SKYBOX_SM, 1.0f, 0.0f}}}, + {MAP_99_CS_END_SPIRAL_MOUNTAIN_2, {{ASSET_7C4_MODEL_SKYBOX_SM, 1.0f, 0.0f}}}, + {MAP_98_CS_END_SPIRAL_MOUNTAIN_1, {{ASSET_7C4_MODEL_SKYBOX_SM, 1.0f, 0.0f}}}, + {MAP_95_CS_END_ALL_100, {{ASSET_7CD_MODEL_SKYBOX_BEACH_ENDING, 1.0f, 0.0f}}}, + {MAP_20_CS_END_NOT_100, {{ASSET_7CD_MODEL_SKYBOX_BEACH_ENDING, 1.0f, 0.0f}}}, + {MAP_89_CS_INTRO_BANJOS_HOUSE_2, {{ASSET_7C4_MODEL_SKYBOX_SM, 1.0f, 0.0f}}}, + {MAP_8C_SM_BANJOS_HOUSE, {{ASSET_7C4_MODEL_SKYBOX_SM, 1.0f, 0.0f}}}, + {MAP_96_CS_END_BEACH_1, {{ASSET_7CD_MODEL_SKYBOX_BEACH_ENDING, 1.0f, 0.0f}}}, + {MAP_97_CS_END_BEACH_2, {{ASSET_7CD_MODEL_SKYBOX_BEACH_ENDING, 1.0f, 0.0f}}}, + {MAP_85_CS_SPIRAL_MOUNTAIN_3, {{ASSET_7C4_MODEL_SKYBOX_SM, 1.0f, 0.0f}}}, + {MAP_86_CS_SPIRAL_MOUNTAIN_4, {{ASSET_7C4_MODEL_SKYBOX_SM, 1.0f, 0.0f}}}, + {MAP_87_CS_SPIRAL_MOUNTAIN_5, {{ASSET_7CC_MODEL_SKYBOX_GRUNTYS_FALL, 1.0f, 0.0f}}}, + {MAP_88_CS_SPIRAL_MOUNTAIN_6, {{ASSET_7C4_MODEL_SKYBOX_SM, 1.0f, 0.0f}}}, + {MAP_7D_CS_SPIRAL_MOUNTAIN_1, {{ASSET_7C4_MODEL_SKYBOX_SM, 1.0f, 0.0f}}}, + {MAP_75_GL_MMM_LOBBY, {{ASSET_7CB_MODEL_CLOUDS_LAIR_MMM, 1.0f, 0.5f}, {ASSET_7CA_MODEL_SKYBOX_LAIR_MMM, 1.0f, 6.0f}}}, + {MAP_1F_CS_START_RAREWARE, {{ASSET_7C9_MODEL_SKYBOX_INTRO_N64, 1.0f, 0.0f}}}, + {MAP_7_TTC_TREASURE_TROVE_COVE, {{ASSET_7BF_MODEL_SKYBOX_TTC, 1.0f, 0.0f}, {ASSET_7C0_MODEL_CLOUDS_TTC, 2.0f, 0.5f}}}, + {MAP_12_GV_GOBIS_VALLEY, {{ASSET_7C1_MODEL_SKYBOX_GV, 1.0f, 0.0f}, {0x000, 1.0f, 1.0f}}}, + {MAP_1B_MMM_MAD_MONSTER_MANSION, {{ASSET_7C2_MODEL_SKYBOX_MMM, 1.0f, 0.0f}, {ASSET_7C3_MODEL_SKYBOX_MMM, 1.0f, 0.0f}}}, + {MAP_2_MM_MUMBOS_MOUNTAIN, {{ASSET_7BD_MODEL_SKYBOX_MM, 1.0f, 0.0f}, {ASSET_7BE_MODEL_CLOUDS_MM, 1.0f, 1.0f}}}, + {MAP_31_RBB_RUSTY_BUCKET_BAY, {{ASSET_7C5_MODEL_SKYBOX_RBB, 1.0f, 0.0f}}}, + {MAP_1_SM_SPIRAL_MOUNTAIN, {{ASSET_7C4_MODEL_SKYBOX_SM, 1.0f, 0.0f}}}, + {MAP_3_UNUSED, {{ASSET_7BF_MODEL_SKYBOX_TTC, 1.0f, 0.0f}, {ASSET_7C0_MODEL_CLOUDS_TTC, 2.0f, 0.5f}}}, + {MAP_27_FP_FREEZEEZY_PEAK, {{ASSET_7C6_MODEL_SKYBOX_FP, 1.0f, 1.0f}, {ASSET_7C7_MODEL_CLOUDS_FP_A, 1.0f, 1.5f}, {ASSET_7C8_MODEL_CLOUDS_FP_B, 1.0f, 3.0f}}}, + {MAP_C_MM_TICKERS_TOWER, {{ASSET_7BD_MODEL_SKYBOX_MM, 1.0f, 0.5f}}}, + 0 +}; /* .bss */ -struct +struct { - struct48s *unk0; - BKModel *unk4[3]; - void *unk10[3]; - f32 unk1C; -}D_80382410; + MapSkyInfo *sky_info; + BKModel *model[3]; + BKModelBin *model_bins[3]; + f32 timer; +}gcSky; /* .code */ -struct48s * func_8030B060(enum map_e map_id){ - struct48s * v1 = D_8036BD40; +MapSkyInfo * sky_getMapSkyInfo(enum map_e map_id){ + MapSkyInfo * v1 = D_8036BD40; while(v1->map){ if(map_id == v1->map){ return v1; @@ -30,67 +68,64 @@ struct48s * func_8030B060(enum map_e map_id){ return v1; } -void func_8030B0AC(Gfx **arg0, Mtx **arg1, s32 arg2){ +void sky_draw(Gfx **gfx, Mtx **mtx, Vtx **vtx){ int i; - f32 sp70[3]; - f32 sp64[3]; - void *iAsset; + f32 position[3]; + f32 rotation[3]; + BKModelBin *iAsset; - func_8024CE60(5.0f, D_80378440); - if(D_80382410.unk10[0]){ - func_80254084(arg0, 0, 0, - (s32)(f32) D_80276588, (s32)(f32)D_8027658C, - 0, 0, 0 - ); - func_8024C904(arg0, arg1); - func_8024C5CC(&sp70); + func_8024CE60(5.0f, 15000.0f); + if(gcSky.model_bins[0]){ + func_80254084(gfx, 0, 0, (s32)(f32) D_80276588, (s32)(f32)D_8027658C,0, 0, 0); //fill screen with black + func_8024C904(gfx, mtx); + func_8024C5CC(position); for(i = 0; i < 3; i++){ - iAsset = D_80382410.unk10[i]; + iAsset = gcSky.model_bins[i]; if(iAsset){ - sp64[0] = 0.0f; - sp64[1] = D_80382410.unk0->unk4[i].unk8 * D_80382410.unk1C; - sp64[2] = 0.0f; - func_803391A4(arg0, arg1, sp70, sp64, D_80382410.unk0->unk4[i].unk4, NULL, iAsset); + rotation[0] = 0.0f; + rotation[1] = gcSky.sky_info->sky_list[i].rotation_speed * gcSky.timer; + rotation[2] = 0.0f; + func_803391A4(gfx, mtx, position, rotation, gcSky.sky_info->sky_list[i].scale, NULL, iAsset); } } } else{//L8030B200 - func_80254084(arg0, 0, 0, (s32)(f32) D_80276588, (s32)(f32)D_8027658C, 0, 0, 0); + func_80254084(gfx, 0, 0, (s32)(f32) D_80276588, (s32)(f32)D_8027658C, 0, 0, 0); }//L8030B254 } -void func_8030B284(void){ +void sky_free(void){ int i; for(i = 0; i < 3; i++){ - if(D_80382410.unk4[i]){ - model_free(D_80382410.unk4[i]); + if(gcSky.model[i]){ + model_free(gcSky.model[i]); } - if(D_80382410.unk10[i]){ - assetcache_release(D_80382410.unk10[i]); + if(gcSky.model_bins[i]){ + assetcache_release(gcSky.model_bins[i]); } } } -void func_8030B2EC(void){ +void sky_reset(void){ int i; - D_80382410.unk0 = func_8030B060(map_get()); + gcSky.sky_info = sky_getMapSkyInfo(map_get()); for(i = 0; i< 3; i++){ - D_80382410.unk4[i] = 0; - D_80382410.unk10[i] = NULL; - if(D_80382410.unk0->unk4[i].unk0){ - D_80382410.unk10[i] = assetcache_get(D_80382410.unk0->unk4[i].unk0); - if(func_8033A0B0(D_80382410.unk10[i])){ - D_80382410.unk4[i] = func_8033F5F8(func_8033A0B0(D_80382410.unk10[i]), func_8033A148( D_80382410.unk10[i])); - func_8034C6DC(D_80382410.unk4[i]); + gcSky.model[i] = NULL; + gcSky.model_bins[i] = NULL; + if(gcSky.sky_info->sky_list[i].model_id){ + gcSky.model_bins[i] = assetcache_get(gcSky.sky_info->sky_list[i].model_id); + if(func_8033A0B0(gcSky.model_bins[i])){ + gcSky.model[i] = func_8033F5F8(func_8033A0B0(gcSky.model_bins[i]), func_8033A148( gcSky.model_bins[i])); + func_8034C6DC(gcSky.model[i]); } } } - D_80382410.unk1C = 0.0f; + gcSky.timer = 0.0f; } -void func_8030B3C8(void){ - D_80382410.unk1C += time_getDelta(); +void sky_update(void){ + gcSky.timer += time_getDelta(); } diff --git a/src/core2/code_851D0.c b/src/core2/code_851D0.c index f3dcc643..a513395b 100644 --- a/src/core2/code_851D0.c +++ b/src/core2/code_851D0.c @@ -5,8 +5,26 @@ extern u8 D_803A5D00[2][0x1ecc0]; /* .data */ -extern Gfx D_8036C450[]; -extern Gfx D_8036C4A8[]; +Gfx D_8036C450[] = { + gsDPPipeSync(), + gsSPClearGeometryMode(G_ZBUFFER | G_SHADE | G_CULL_BOTH | G_FOG | G_LIGHTING | G_TEXTURE_GEN | G_TEXTURE_GEN_LINEAR | G_LOD | G_SHADING_SMOOTH), + gsSPSetGeometryMode(G_SHADE | G_TEXTURE_GEN_LINEAR | G_SHADING_SMOOTH), + gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON), + gsDPSetRenderMode(G_RM_OPA_SURF, G_RM_OPA_SURF2), + gsDPSetCycleType(G_CYC_1CYCLE), + gsDPSetCombineLERP(TEXEL0, 0, PRIMITIVE_ALPHA, 0, 0, 0, 0, TEXEL0, TEXEL0, 0, PRIMITIVE_ALPHA, 0, 0, 0, 0, TEXEL0), + gsDPSetTextureFilter(G_TF_POINT), + gsDPSetTexturePersp(G_TP_NONE), + gsDPSetPrimColor(0, 0, 0x00, 0x00, 0x00, 0x78), + gsSPEndDisplayList() +}; + +Gfx D_8036C4A8[] = { + gsDPPipeSync(), + gsDPSetTextureFilter(G_TF_BILERP), + gsDPSetTexturePersp(G_TP_PERSP), + gsSPEndDisplayList() +}; /* .bss */ s16 *D_80382450; diff --git a/src/core2/code_94A20.c b/src/core2/code_94A20.c index bcc472cd..fa833636 100644 --- a/src/core2/code_94A20.c +++ b/src/core2/code_94A20.c @@ -774,7 +774,7 @@ void func_8031DC10(s32 arg0, s32 arg1) { if (player_getTransformation() == TRANSFORM_3_PUMPKIN) { ml_vec3h_to_vec3f(vec, arg0); - func_8028F6E4(0x2F, vec); + func_8028F6E4(BS_INTR_2F_LOGGO, vec); timedFunc_set_0(D_80378D44, &func_8031DBE8); } } diff --git a/src/core2/code_AD5B0.c b/src/core2/code_AD5B0.c index d53bda71..355cb386 100644 --- a/src/core2/code_AD5B0.c +++ b/src/core2/code_AD5B0.c @@ -37,7 +37,7 @@ void func_80334540(Gfx** gdl, Mtx **mptr, Vtx **vptr) { write_file_blocks(0, 0, 0x80BC7230, EEPROM_MAXBLOCKS); } func_802C3BDC(); - func_8030B0AC(gdl, mptr, vptr); + sky_draw(gdl, mptr, vptr); func_802BBD2C(&sp44, &sp40); func_8024CE60(sp44, sp40); func_8024C904(gdl, mptr); @@ -157,7 +157,7 @@ void func_80334910(void) { func_80309FF0(); func_8030A6B0(); func_80333918(); - func_8030B284(); + sky_free(); func_8034C8D8(); func_80323238(); func_803343AC(); @@ -231,7 +231,7 @@ void func_80334B20(enum map_e arg0, s32 arg1, s32 arg2) { func_802F7D30(); func_8030A78C(); func_8033393C(); - func_8030B2EC(); + sky_reset(); func_803343D0(); cubeList_init(); func_802FA69C(); @@ -334,7 +334,7 @@ s32 func_80334ECC(void) { func_8031B790(); func_8034C9D4(); func_8030A850(1); - func_8030B3C8(); + sky_update(); func_802F08A0(); func_8034F918(); func_80350250(); diff --git a/src/core2/done/climb.c b/src/core2/done/climb.c index 9a82c4b4..cf799d1e 100644 --- a/src/core2/done/climb.c +++ b/src/core2/done/climb.c @@ -57,7 +57,7 @@ climbSet(f32 bottom[3], f32 top[3], f32 radius, u32 arg3){ void func_80298344(void){ //climbUpdateRegrab D_8037C58C = max_f(D_8037C58C - time_getDelta(), 0.0f); if(D_8037C590 && ability_hasLearned(ABILITY_5_CLIMB)){ - bs_checkInterrupt(BS_INTR_C); + bs_checkInterrupt(BS_INTR_C_CLIMB); } D_8037C590 = 0; } diff --git a/src/core2/gc/pauseMenu.c b/src/core2/gc/pauseMenu.c index ca8937f6..e4d60ab1 100644 --- a/src/core2/gc/pauseMenu.c +++ b/src/core2/gc/pauseMenu.c @@ -9,7 +9,13 @@ #ifndef MAX #define MAX(s,t) (((s) > t)?(s):(t)) #endif - +extern void func_803160A8(gczoombox_t *); +extern void func_80312E80(struct1As *, s32); +extern void gczoombox_close(gczoombox_t *); +extern void gczoombox_minimize(gczoombox_t *); +extern void gczoombox_maximize(gczoombox_t *); +extern void func_802C5994(void); +extern void func_802E412C(s32, s32); void func_803204E4(s32, s32); f32 func_8024DE1C(f32, f32, f32 *, f32 *); void mlMtxApply(Mtx*); @@ -25,31 +31,131 @@ s32 getGameMode(void); void func_803120FC(s32); void gczoombox_highlight(gczoombox_t *, int); +void func_80312F88(s32 arg0); +void func_80312FD0(s32 arg0); +void func_80313134(void); +void func_802DC5B8(void); +void func_802DC560(s32, s32); +void func_8031307C(s32); +s32 func_8024E67C(enum button_e); +s32 func_80313070(void); +bool func_803188B4(gczoombox_t*); +bool func_803183A4(gczoombox_t*, char *); +bool func_8031FF1C(enum bkprog_e); +s32 func_80312034(enum level_e); +enum map_e map_get(void); +bool func_802FD2D4(void); +bool func_802FC3C4(void); +s32 func_80312D78(struct1As *, s32); +void func_80311954(void); +extern void func_802FACA4(enum item_e); +extern void func_80318964(gczoombox_t *); +extern void func_802F5060(enum asset_e); +extern void func_802F5188(void); +extern void func_80311854(void); +extern void func_8033BD20(void *); +extern void func_8025A430(s32, s32, s32); +extern void func_8025A2B0(void); +extern void func_802DC528(s32,s32); +extern char D_80378540[]; +extern char D_80378550[]; +extern char D_80378568[]; +extern char D_80378574[]; +extern char D_80378584[]; +extern char D_80378594[]; +extern char D_803785A4[]; +extern char D_803785B4[]; +extern char D_803785C4[]; +extern char D_803785D0[]; +extern char D_803785E0[]; +extern char D_803785F4[]; +extern char D_80378608[]; +extern char D_8037861C[]; +extern char D_80378630[]; +extern char D_80378644[]; +extern char D_80378654[]; +extern char D_80378664[]; +extern char D_80378678[]; +extern char D_8037868C[]; +extern char D_803786A0[]; -extern s32 D_80383084; +/* .data */ +struct1As D_8036C4E0[4] = { + {0.0f, 0.0f, "RETURN TO GAME", 55, 04, 0}, + {0.3f, 0.0f, "EXIT TO WITCH'S LAIR", -100, 04, 0}, + {0.1f, 0.0f, "VIEW TOTALS", 90, 06, 0}, + {0.2f, 0.0f, "SAVE AND QUIT", 125, 07, 0}, +}; -extern struct1As D_8036C4E0[4]; -extern struct1As D_8036C520[4]; -extern struct1Bs D_8036C560[0xD]; -extern struct1Cs D_8036C58C[0xC]; -extern u8 D_8036C604[7]; -extern const char D_8036C618[] = ""; -extern int D_8036C620; +struct1As D_8036C520[4] = { + {0.0f, 0.0f, "cc999 / 999cc", 0x1E, 8, 0}, + {0.1f, 0.0f, "cc999 / 999cc", 0x42, 9, 0}, + {0.2f, 0.0f, "cc999 / 999cc", 0x66, 10, 0}, + {0.3f, 0.0f, "cc999 : 999cc", 0x8A, 11, 0}, +}; +struct1Bs D_8036C560[] = { + {MAP_69_GL_MM_LOBBY, 0x2}, + {MAP_6D_GL_TTC_LOBBY, 0x4}, + {MAP_70_GL_CC_LOBBY, 0x2}, + {MAP_72_GL_BGS_LOBBY, 0x2}, + {MAP_6F_GL_FP_LOBBY, 0x6}, + {-1, -1}, + {MAP_6E_GL_GV_LOBBY, 0x3}, + {MAP_79_GL_CCW_LOBBY, 0x6}, + {MAP_77_GL_RBB_LOBBY, 0x2}, + {MAP_75_GL_MMM_LOBBY, 0x2}, + {MAP_69_GL_MM_LOBBY, 0x12} +}; + +struct1Cs_1 D_8036C58C[0xD] = { + {0, 0x50, "GAME TOTAL"}, + {LEVEL_B_SPIRAL_MOUNTAIN, 0x40, "SPIRAL MOUNTAIN"}, + {LEVEL_6_LAIR, 0x3C, "GRUNTILDA'S LAIR"}, + {LEVEL_1_MUMBOS_MOUNTAIN, 0x25, "MUMBO'S MOUNTAIN"}, + {LEVEL_2_TREASURE_TROVE_COVE, 0x1B, "TREASURE TROVE COVE"}, + {LEVEL_3_CLANKERS_CAVERN, 0x34, "CLANKER'S CAVERN"}, + {LEVEL_4_BUBBLEGLOOP_SWAMP, 0x23, "BUBBLEGLOOP SWAMP"}, + {LEVEL_5_FREEZEEZY_PEAK, 0x48, "FREEZEEZY PEAK"}, + {LEVEL_7_GOBIS_VALLEY, 0x4E, "GOBI'S VALLEY"}, + {LEVEL_A_MAD_MONSTER_MANSION, 0x12, "MAD MONSTER MANSION"}, + {LEVEL_9_RUSTY_BUCKET_BAY, 0x32, "RUSTY BUCKET BAY"}, + {LEVEL_8_CLICK_CLOCK_WOOD, 0x30, "CLICK CLOCK WOOD"}, + {0, 0x48, "STOP 'N' SWOP"} +}; + +u8 D_8036C5F4[0x10] = {1, 1, 1, 1, 0xb, 0x8, 0x6, 0x4, 0x3, 0x2, 0xff, 0xff, 0}; +u8 D_8036C604[0x7] = {0x14, 0x26, 0x25, 0x10, 0xf, 0xd, 0xc}; +u8 D_8036C60C[0xC] = { + 0x28, + 0x29, + 0x00, + ITEM_3_PROPELLOR_TIMER, + ITEM_17_AIR, + ITEM_13_EMPTY_HONEYCOMB, + ITEM_1B_VILE_VILE_SCORE, + ITEM_24_TWINKLY_SCORE, + ITEM_1D_GRUMBLIE, + ITEM_1E_YUMBLIE, + ITEM_E_JIGGY, + ITEM_1A_PLAYER_VILE_SCORE +}; +// const char D_8036C618[] = {0}; +// extern u8 D_8036C61C[] = {0}; /* .bss */ struct{ - u32 unk0_31:8; //menu state - u32 unk0_23:8; - u32 unk0_15:8; //menu page - u32 unk0_7:1; - u32 unk0_6:1; - u32 unk0_5:1; - u32 pad0_4:1; - u32 unk0_3:1; - u32 unk0_2:1; - u32 unk0_1:1; - u32 pad0_0:1; + u8 unk0; //menu state + u8 unk1; + u8 unk2; //menu page + u8 unk0_7:1; + u8 unk0_6:1; + u8 unk0_5:1; + u8 unk0_4:1; + u8 unk0_3:1; + u8 unk0_2:1; + u8 unk0_1:1; + u8 unk0_0:1; s8 unk4; s8 unk5; u8 unk6; @@ -69,7 +175,8 @@ struct{ s16 unk32; //B-button alpha s16 unk34; //left joystick alpha s16 unk36; //right joystick alpha - u8 pad38[0x2]; + u8 unk38; + u8 unk39; u8 unk3A; u8 pad3B[1]; s16 unk3C[7]; @@ -83,6 +190,7 @@ struct{ u32 unk70_29:1; u32 pad70_28:29; }D_80383010; +s32 D_80383084; char D_80383088[0x18]; /* public */ @@ -92,6 +200,8 @@ void func_80318640(gczoombox_t *, s32, f32, f32, s32); void func_80318734(gczoombox_t *, f32); /* .rodata */ + + extern char D_803786B0[]; // "" extern char D_803786B4[]; // ":" extern char D_803786B8[]; // "0" @@ -149,8 +259,6 @@ void func_803117E8(void){ } //gc_zoombox_init -#ifdef NONMATCHING -//MATCHING, but needs .rodata void func_80311854(void){ s32 i; for(i = 0; i<4; i++){ @@ -160,12 +268,7 @@ void func_80311854(void){ func_80318760(D_80383010.zoombox[i], 8000); } } -#else -#pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_80311854.s") -#endif -#ifdef NONMATCHING -//MATCHING, but needs .rodata void func_80311954(void){ s32 i; @@ -177,9 +280,6 @@ void func_80311954(void){ } func_80318734(D_80383010.zoombox[3], 24.0f); } -#else -#pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_80311954.s") -#endif void func_80311A84(void){ s32 i; @@ -235,36 +335,34 @@ u8 *func_80311C64(int time){ s32 minutes; s32 seconds; - strcpy(D_80383088, D_803786B0); //strcpy(D_80383088, ""); + strcpy(D_80383088, ""); strIToA(D_80383088, time/3600); - strcat(D_80383088, D_803786B4); //strcat(D_80383088, ":"); + strcat(D_80383088, ":"); minutes = (time/60)%60; if(minutes < 10){ - strcat(D_80383088, D_803786B8); //strcat(D_80383088, "0"); + strcat(D_80383088, "0"); } strIToA(D_80383088, minutes); - strcat(D_80383088, D_803786BC); //strcat(D_80383088, ":"); + strcat(D_80383088, ":"); seconds = time % 60; if(seconds < 10){ - strcat(D_80383088, D_803786C0); //strcat(D_80383088, "0"); + strcat(D_80383088, "0"); } - strIToA(D_80383088, seconds); //strcat(D_80383088, ":"); - strcat(D_80383088, D_803786C4); //strcpy(D_80383088, ""); + strIToA(D_80383088, seconds); + strcat(D_80383088, ""); return D_80383088; } -#if NONMATCING -//MATCHING NEEDS .data defined void func_80311D74(s32 level){ s32 val; s32 max; - const char empty[] = ""; //D_8036C618 + const char empty[1] = 0; //empty //note ratio 2 string func_80311B9C(level, &val, &max); strcpy(D_8036C520[0].str, empty); strIToA(D_8036C520[0].str, val); - strcat(D_8036C520[0].str, D_803786C8); + strcat(D_8036C520[0].str, "/"); strIToA(D_8036C520[0].str, max); strcat(D_8036C520[0].str, empty); @@ -272,7 +370,7 @@ void func_80311D74(s32 level){ func_80311BD4(level, &val, &max); strcpy(D_8036C520[1].str, empty); strIToA(D_8036C520[1].str, val); - strcat(D_8036C520[1].str, D_803786CC); + strcat(D_8036C520[1].str, "/"); strIToA(D_8036C520[1].str, max); strcat(D_8036C520[1].str, empty); @@ -280,7 +378,7 @@ void func_80311D74(s32 level){ func_80311C0C(level, &val, &max); strcpy(D_8036C520[2].str, empty); strIToA(D_8036C520[2].str, val); - strcat(D_8036C520[2].str, D_803786D0); + strcat(D_8036C520[2].str, "/"); strIToA(D_8036C520[2].str, max); strcat(D_8036C520[2].str, empty); @@ -288,9 +386,6 @@ void func_80311D74(s32 level){ strcpy(D_8036C520[3].str, empty); strcat(D_8036C520[3].str, func_80311C64(itemscore_timeScores_get(level))); } -#else -#pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_80311D74.s") -#endif void func_80311ED0(s32 *dst){ *dst = itemscore_noteScores_getTotal(); //note_total @@ -304,41 +399,34 @@ void func_80311F20(s32 *dst){ *dst = honeycombscore_get_total(); //honeycomb_total } -#ifdef NONMATCHING -//MATCHING NEEDS .data defined void func_80311F48(void){ s32 val; - const char empty[] = ""; //D_8036C618 + const char D_8036C61C[] = 0; //note ratio 2 string func_80311ED0(&val); - strcpy(D_8036C520[0].str, empty); + strcpy(D_8036C520[0].str, D_8036C61C); strIToA(D_8036C520[0].str, val); - strcat(D_8036C520[0].str, empty); + strcat(D_8036C520[0].str, D_8036C61C); //jiggy_ratio_2_string func_80311EF8(&val); - strcpy(D_8036C520[1].str, empty); + strcpy(D_8036C520[1].str, D_8036C61C); strIToA(D_8036C520[1].str, val); - strcat(D_8036C520[1].str, empty); + strcat(D_8036C520[1].str, D_8036C61C); //honeycomb_ratio_2_string func_80311F20(&val); - strcpy(D_8036C520[2].str, empty); + strcpy(D_8036C520[2].str, D_8036C61C); strIToA(D_8036C520[2].str, val); - strcat(D_8036C520[2].str, empty); + strcat(D_8036C520[2].str, D_8036C61C); //gametime_2_sting - strcpy(D_8036C520[3].str, empty); + strcpy(D_8036C520[3].str, D_8036C61C); strcat(D_8036C520[3].str, func_80311C64(itemscore_timeScores_getTotal())); } -#else -#pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_80311F48.s") -#endif -#ifdef NONMATCHING -//MATCHING but need .rodata -s32 func_80312034(s32 arg0){ +s32 func_80312034(enum level_e arg0){ switch (arg0) { case 1: @@ -365,9 +453,6 @@ s32 func_80312034(s32 arg0){ return 0; } } -#else -#pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_80312034.s") -#endif void func_8031209C(struct1As *arg0, s32 arg1){ s32 i; @@ -378,17 +463,13 @@ void func_8031209C(struct1As *arg0, s32 arg1){ } } -#ifdef NONMATCHING void func_803120FC(s32 arg0){ s32 i; - int _t; switch(arg0){ case 0: func_80311A84(); - D_80383010.unk0_23 = 0; - D_80383010.unk0_2 = D_80383010.unk0_7 = D_80383010.unk4 = 0; - D_80383010.unk0_15 = D_80383010.unk4; - D_80383010.unk0_3 = D_80383010.unk0_2; + D_80383010.unk1 = 0; + D_80383010.unk0_3 = D_80383010.unk0_2 = D_80383010.unk0_7 = D_80383010.unk2 = D_80383010.unk4 = 0; break; case 1: @@ -415,7 +496,7 @@ void func_803120FC(s32 arg0){ break; case 5:/* 8B334 803122C4 3C128038 */ - D_80383010.unkC = 3.0f; + D_80383010.unkC = 3; D_80383010.unk5 = D_80383010.unk0_6 = 0; func_8031209C(D_8036C4E0, 4); for(i = 0; i < 4; i++){ @@ -425,38 +506,35 @@ void func_803120FC(s32 arg0){ case 6:/* 8B3A8 80312338 0C0C46D1 */ func_80311B44(); - D_80383010.unk0_15 = 0; - D_80383010.unk4 = 0; D_80383010.unkC = 0.0f; + D_80383010.unk4 = D_80383010.unk2 = 0; + // 0; for(i = 0; i < 4; i++){ func_80318964(D_80383010.zoombox[i]); } break; case 7:/* 8B3F4 80312384 44803000 */ - D_80383010.unk20 = D_80383010.unk28 = 0.0f; - D_80383010.unk0_23 = 1; + D_80383010.unk1 = 1; D_80383010.unk0_1 = 1; + D_80383010.unk20 = D_80383010.unk28 = 0.0f; func_803117A0(); func_80311954(); - if(D_80383010.unk0_15 == func_80312034(level_get())){ + if(D_80383010.unk2 == func_80312034(level_get())){ func_802F5060(0x6e7); } - if(D_80383010.unk0_15 != 0){ - func_80311D74(D_8036C58C[D_80383010.unk0_15].unk0); + if(D_80383010.unk2){ + func_80311D74(D_8036C58C[D_80383010.unk2].level_id); }else{ func_80311F48(); } for(i = 0; i<4; i++){//L80312420 - - if(D_8036C58C[D_80383010.unk0_15].unk0 == 6){ - _t = (!(i == 0) && !(i == 2)); - gczoombox_highlight(D_80383010.zoombox[i], _t); + if(D_8036C58C[D_80383010.unk2].level_id == 6){ + gczoombox_highlight(D_80383010.zoombox[i], (!(i == 0) && !(i == 2))); } - else if(D_8036C58C[D_80383010.unk0_15].unk0 == 0xB){ - _t = (!(i == 0) && !(i == 1)); - gczoombox_highlight(D_80383010.zoombox[i], _t); + else if(D_8036C58C[D_80383010.unk2].level_id == 0xB){ + gczoombox_highlight(D_80383010.zoombox[i], (!(i == 0) && !(i == 1))); } else{ gczoombox_highlight(D_80383010.zoombox[i], 1); @@ -475,16 +553,16 @@ void func_803120FC(s32 arg0){ case 0xA: D_80383010.unk0_5 = 1; - D_80383010.unk5 = 4; D_80383010.unkC = 0.0f; + D_80383010.unk5 = 4; if(D_80383010.unk9 != 0xC){ - D_80383010.unk0_2 = 0; + D_80383010.unk0_1 = 0; } func_8031209C(D_8036C520, 4); break; case 0xB: - if(D_80383010.unk0_15 != 0 && D_80383010.unk0_15 == func_80312034(level_get())){ + if(D_80383010.unk2 && D_80383010.unk2 == func_80312034(level_get())){ func_802F5188(); } func_803117A0(); @@ -492,7 +570,7 @@ void func_803120FC(s32 arg0){ break; case 0xC: - D_80383010.unk0_23 = 2; + D_80383010.unk1 = 2; D_80383010.unk6++; D_80383010.unk0_5 = 1; D_80383010.unk5 = 0; @@ -504,27 +582,25 @@ void func_803120FC(s32 arg0){ case 0xD:/* 8B694 80312624 3C128038 */ D_80383010.unk6 = 0xFF; D_80383010.unk0_5 = 1; - if(D_80383010.unk0_15 != 0 && D_80383010.unk0_15 == func_80312034(level_get())){ + if(D_80383010.unk2 && D_80383010.unk2 == func_80312034(level_get())){ func_802F5188(); } - D_80383010.unk0_15 = D_80383010.unk9; - if(D_80383010.unk0_15 != 0 && D_80383010.unk0_15 == func_80312034(level_get())){ + D_80383010.unk2 = D_80383010.unk9; + if(D_80383010.unk2 && D_80383010.unk2 == func_80312034(level_get())){ func_802F5060(0x6e7); } - if(D_80383010.unk0_15 != 0) - func_80311D74(D_8036C58C[D_80383010.unk0_15].unk0); + if(D_80383010.unk2) + func_80311D74(D_8036C58C[D_80383010.unk2].level_id); else{ func_80311F48(); } for(i = 0; i < 4; i++){//L803126D8 //L80312764 - if(D_8036C58C[D_80383010.unk0_15].unk0 == 6){ - _t = (!(i == 0) || !(i == 2)); - gczoombox_highlight(D_80383010.zoombox[i], _t); + if(D_8036C58C[D_80383010.unk2].level_id == 6){ + gczoombox_highlight(D_80383010.zoombox[i], !((i == 0) || (i == 2))); } - else if(D_8036C58C[D_80383010.unk0_15].unk0 == 0xB){//L80312728 - _t = (!(i == 0) && !(i == 1)); - gczoombox_highlight(D_80383010.zoombox[i], _t); + else if(D_8036C58C[D_80383010.unk2].level_id == 0xB){//L80312728 + gczoombox_highlight(D_80383010.zoombox[i], (!(i == 0) && !(i == 1))); } else{ gczoombox_highlight(D_80383010.zoombox[i], 1); @@ -538,14 +614,14 @@ void func_803120FC(s32 arg0){ break; case 0xE:/* 8B824 803127B4 3C128038 */ - D_80383010.unk0_23 = 4; - D_80383010.unk0_15 = D_80383010.unk9; + D_80383010.unk1 = 4; + D_80383010.unk2 = D_80383010.unk9; D_80383010.unk9 = -1; D_80383010.unk5C = assetcache_get(0x50D); D_80383010.unk60 = assetcache_get(0x50C); for(i = 0; i < 7; i++){ D_80383010.unk3C[i+1] = randf2(0.0f, 360.0f); - D_80383010.unk4A[i] = ((i & 1)? -1.0: 1.0)*randf2( 60.0f, 180.0f); + D_80383010.unk4A[i+1] = ((i & 1)? -1.0: 1.0)*randf2( 60.0f, 180.0f); } break; @@ -566,9 +642,9 @@ void func_803120FC(s32 arg0){ break; case 0x12: /* 8B978 80312908 3C128038 */ - D_80383010.unk0_15 = D_80383010.unk9; - func_8033BD20(D_80383010.unk5C); - func_8033BD20(D_80383010.unk60); + D_80383010.unk2 = D_80383010.unk9; + func_8033BD20(&D_80383010.unk5C); + func_8033BD20(&D_80383010.unk60); break; case 0x13: /* 8B9A8 80312938 3C128038 */ @@ -576,9 +652,8 @@ void func_803120FC(s32 arg0){ break; case 0x14: /* 8B9C0 80312950 3C128038 */ - D_80383010.unk0_6 = 0; - D_80383010.unk0_7 = D_80383010.unk0_6; - D_80383010.unkC = 0.0; + D_80383010.unk0_7 = D_80383010.unk0_6 = 0; + D_80383010.unkC = 0.0f; func_8025A430(-1, 0x7D0, 3); func_8025A2B0(); func_802DC528(0,0); @@ -586,25 +661,136 @@ void func_803120FC(s32 arg0){ default: break; } - D_80383010.unk0_31 = arg0; + D_80383010.unk0 = arg0; } -#else -#pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_803120FC.s") -#endif -#pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_803129DC.s") +void func_803129DC(s32 arg0, s32 arg1) { + s8 var_t9; + u8 temp_t6; -#pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_80312B04.s") + switch (D_80383010.unk0) { + case 3: + case 10: + if (arg1 == 6) { + D_80383010.unk4++; + } else if (arg1 == 4) { + D_80383010.unk5 = (s8) (D_80383010.unk5 - 1); + } + break; + case 5: + if (arg1 == 4) { + D_80383010.unk5 = (s8) (D_80383010.unk5 - 1); + } + break; + case 1: + case 8: + if (arg1 == 1) { + D_80383010.unk4 = (s8) (D_80383010.unk4 + 1); + } + break; + case 12: + if (arg1 == 4) { + D_80383010.unk5 = (s8) (D_80383010.unk5 - 1); + } + break; + case 6: + if (arg1 == 6) { + D_80383010.unk4++; + } + break; + } + if( (arg1 == 2) + && (D_80383010.unk1 == 0) + && (arg0 - 4 != D_80383010.unk2) + ) { + gczoombox_highlight(D_80383010.zoombox[arg0 - 4], 0); + } +} + +s32 func_80312B04(void) { + s16 *var_s1; + s32 var_s0; + s32 var_s3; + + var_s3 = 0; + if (D_80383010.unk39 != 0) { + return 0xC; + } + for(var_s0 = 1; var_s0 < 0xC; var_s0++){ + if(func_8034717C(D_8036C58C[var_s0].level_id)){ + var_s3 = var_s0; + } + } + return var_s3; +} s32 func_80312B84(void){ return 1; } -#pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_80312B8C.s") +void func_80312B8C(void) { + s32 i; + s32 sp38; + s32 sp34; + s32 sp30; + s32 sp2C; + s32 sp28; + s32 sp24; + s32 temp_v1; + + for(i = 0; i < 0xC; i++){ + func_802FAD64(D_8036C60C[i]); + } + func_802FBB18(); + sp24 = sns_get_item_state(6, 0); + sp28 = sns_get_item_state(5, 0); + sp2C = sns_get_item_state(4, 0); + sp30 = sns_get_item_state(3, 0); + sp34 = sns_get_item_state(2, 0); + sp38 = sns_get_item_state(1, 0); + D_80383010.unk39 = sp38 + + sp34 + + sp30 + + sp2C + + sp28 + + sp24 + + sns_get_item_state(7, 0); + D_80383010.unk70_29 = func_80312B84(); + func_80311604(); + func_80311854(); + D_80383010.unk24 = assetcache_get(0x7EB); + D_80383010.unkB = spriteGetFrameCount(D_80383010.unk24); + D_80383010.unk34 = temp_v1 = D_80383010.unk36 = 0; + D_80383010.unkA = D_80383010.unk0_4 = temp_v1; + + D_80383010.unk2C = assetcache_get(0x7ED); + D_80383010.unk31 = spriteGetFrameCount(D_80383010.unk2C); + D_80383010.unk30 = D_80383010.unk0_0 = D_80383010.unk32 = 0; + D_80383010.unk38 = func_80312B04(); + D_80383010.unk3C[0] = D_80383010.unk3A = D_80383010.unk70_31 = D_80383010.unk70_30 = 0; + func_80250FC0(); + func_803120FC(0); +} #pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_80312D78.s") -#pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_80312E80.s") +void func_80312E80(struct1As *arg0, s32 arg1) { + f32 var_f0; + s32 var_s1; -func_80312F88(s32 arg0){ + for(var_s1 = 0; var_s1 < arg1; var_s1++){ + var_f0 = ((var_s1 == D_80383010.unk2) && (D_80383010.unk1 == 0)) ? 0.2 : arg0[var_s1].unk4; + if (var_f0 <= D_80383010.unkC) { + if (arg0[var_s1].unkF == 0) { + func_80318498(D_80383010.zoombox[var_s1]); + if (func_803188B4(D_80383010.zoombox[var_s1]) == 0) { + D_80383010.unk5--; + } + arg0[var_s1].unkF = 1U; + } + } + } +} + +void func_80312F88(s32 arg0){ struct1Cs *v0 = D_8036C58C + arg0; print_bold_overlapping(v0->x, D_80383010.unk8, -1.05f, v0->string); } @@ -615,18 +801,68 @@ func_80312F88(s32 arg0){ #pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_8031307C.s") -#pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_80313134.s") +void func_80313134(void) { + f32 temp_f12; + f32 var_f0; + f32 var_f0_2; + f32 var_f12; + s8 temp_a0; + u8 temp_a0_2; + u8 temp_t0; + u8 temp_v0; + u8 temp_v0_2; + D_80383010.unk20 += time_getDelta(); + var_f0 = (D_80383010.unk0_4) ? 0.05 : 0.066666666666666666; + while (var_f0 < D_80383010.unk20) { + if (D_80383010.unk0_4) { + if (D_80383010.unkA-- == 0) { + D_80383010.unkA = 0; + D_80383010.unk0_4 = FALSE; + var_f0 = 0.066666666666666666; + } + } else { + D_80383010.unkA++; + if (D_80383010.unkA >= D_80383010.unkB) { + D_80383010.unk0_4 = TRUE; + D_80383010.unkA = D_80383010.unkB - 1; + var_f0 = 0.05f; + } + } + D_80383010.unk20 -= var_f0; + } + D_80383010.unk0_3 = (D_80383010.unk2 != 0) ? TRUE : FALSE; + D_80383010.unk0_2 = (func_80313070() == D_80383010.unk2) ? FALSE : TRUE; + D_80383010.unk28 += time_getDelta(); + + var_f12 = (D_80383010.unk0_0) ? 0.04 : 0.04; + while (D_80383010.unk28 > var_f12) { + if (D_80383010.unk0_0) { + if (D_80383010.unk30-- <= 0) { + D_80383010.unk30 = 0; + D_80383010.unk0_0 = FALSE; + var_f12 = 0.04; + } + } else { + D_80383010.unk30++; + if (D_80383010.unk30 >= D_80383010.unk31) { + D_80383010.unk0_0 = TRUE; + D_80383010.unk30 = D_80383010.unk31 - 1; + var_f12 = 0.04; + } + } + D_80383010.unk28 -= var_f12; + if(var_f12); + } +} -#ifdef NONMATCHING s32 func_80313380(void){ - s32 temp; + s32 i; s32 sp6C[6]; s32 sp60[3]; s32 sp50[4]; f32 sp48[2]; s32 level = level_get(); //sp44 - s32 i; if(getGameMode() != GAME_MODE_4_PAUSED) @@ -643,7 +879,7 @@ s32 func_80313380(void){ D_80383010.unkC += time_getDelta(); - switch(D_80383010.unk0_31){ + switch(D_80383010.unk0){ case 0: //closed func_803120FC(1); break; @@ -670,7 +906,7 @@ s32 func_80313380(void){ if(func_8024E67C(BUTTON_START) == 1){ func_803120FC(6); }else if(sp6C[0] == 1){ - switch(D_80383010.unk0_15){ + switch(D_80383010.unk2){ case 1://L80313594 if(level > 0 && level < 0xC) if(D_8036C560[level-1].map != -1) @@ -685,46 +921,45 @@ s32 func_80313380(void){ } } else if(sp6C[1] == 1){//L803135F8 - gczoombox_highlight(D_80383010.zoombox[D_80383010.unk0_15], 0); - D_80383010.unk0_15 = 0; - gczoombox_highlight(D_80383010.zoombox[D_80383010.unk0_15], 1); + gczoombox_highlight(D_80383010.zoombox[D_80383010.unk2], 0); + D_80383010.unk2 = 0; + gczoombox_highlight(D_80383010.zoombox[D_80383010.unk2], 1); func_803120FC(3); } else if(D_80383010.unk7 > 0) {//L8031364C D_80383010.unk7--; }//L80313664 else { - if( D_80383010.unk0_15 == 2 && !D_80383010.unk0_6){ - func_803160A8(D_80383010.zoombox[D_80383010.unk0_15]); + if( D_80383010.unk2 == 2 && !D_80383010.unk0_6){ + func_803160A8(D_80383010.zoombox[D_80383010.unk2]); D_80383010.unk0_6 = 1; } if(0.75 < sp48[1]){ - if((s32)D_80383010.unk0_15 > 0){ - gczoombox_highlight(D_80383010.zoombox[D_80383010.unk0_15], 0); - D_80383010.unk0_15--; - if(D_80383010.unk70_29 && D_80383010.unk0_15 == 1) - D_80383010.unk0_15 --; - gczoombox_highlight(D_80383010.zoombox[D_80383010.unk0_15], 1); - func_803160A8(D_80383010.zoombox[D_80383010.unk0_15]); + if((s32)D_80383010.unk2 > 0){ + gczoombox_highlight(D_80383010.zoombox[D_80383010.unk2], 0); + D_80383010.unk2--; + if(D_80383010.unk70_29 && D_80383010.unk2 == 1) + D_80383010.unk2 --; + gczoombox_highlight(D_80383010.zoombox[D_80383010.unk2], 1); + func_803160A8(D_80383010.zoombox[D_80383010.unk2]); D_80383010.unk0_6 = 0; D_80383010.unk7 = 6; } }else if(sp48[1] < -0.75){ - if((s32)D_80383010.unk0_15 < 3){ - gczoombox_highlight(D_80383010.zoombox[D_80383010.unk0_15], 0); - D_80383010.unk0_15++; - if(D_80383010.unk70_29 && D_80383010.unk0_15 == 1) - D_80383010.unk0_15++; - gczoombox_highlight(D_80383010.zoombox[D_80383010.unk0_15], 1); - func_803160A8(D_80383010.zoombox[D_80383010.unk0_15]); + if((s32)D_80383010.unk2 < 3){ + gczoombox_highlight(D_80383010.zoombox[D_80383010.unk2], 0); + D_80383010.unk2++; + if(D_80383010.unk70_29 && D_80383010.unk2 == 1) + D_80383010.unk2++; + gczoombox_highlight(D_80383010.zoombox[D_80383010.unk2], 1); + func_803160A8(D_80383010.zoombox[D_80383010.unk2]); D_80383010.unk0_6 = 0; D_80383010.unk7 = 6; } } } - temp = D_80383010.unk0_15; - if(temp == 2 && !D_80383010.unk0_6 && D_80383010.unk7 == 3){ - func_803160A8(D_80383010.zoombox[D_80383010.unk0_15]); + if(D_80383010.unk2 == 2 && !D_80383010.unk0_6 && D_80383010.unk7 == 3){ + func_803160A8(D_80383010.zoombox[D_80383010.unk2]); D_80383010.unk0_6 = 1; } break; @@ -743,22 +978,22 @@ s32 func_80313380(void){ } break; case 4: - switch(D_80383010.unk0_15){ + switch(D_80383010.unk2){ case 0://L803138FC D_80383010.unk0_7 = 1; break; case 1://L80313908 //return to lair func_803204E4(0x16, 1); - if(map_get() == MAP_LAIR_FURNACE_FUN){ + if(map_get() == MAP_8E_GL_FURNACE_FUN){ func_803204E4(0,0); - func_802E4078(MAP_LAIR_FF_ENTRANCE, 2, 1); + func_802E4078(MAP_80_GL_FF_ENTRANCE, 2, 1); }else{ func_802E4078(D_8036C560[level-1].map, D_8036C560[level-1].exit, 1); } func_803120FC(0x13); break; case 2://L80313978 - D_80383010.unk0_15 = func_80312034(level_get()); + D_80383010.unk2 = func_80312034(level_get()); func_803120FC(7); break; case 3://L8031399C @@ -768,7 +1003,7 @@ s32 func_80313380(void){ func_803120FC(0x14); }else{ func_802E412C(1,0); - func_802E4078(MAP_CUTSCENE_GAMEOVER, 0, 1); + func_802E4078(MAP_83_CS_GAME_OVER_MACHINE_ROOM, 0, 1); func_803120FC(0x13); } break; @@ -776,19 +1011,19 @@ s32 func_80313380(void){ break; case 5: if(3.0 < D_80383010.unkC){ - if( D_8036C4E0[D_80383010.unk0_15].unkF){ - gczoombox_minimize(D_80383010.zoombox[D_80383010.unk0_15]); + if( D_8036C4E0[D_80383010.unk2].unkF){ + gczoombox_minimize(D_80383010.zoombox[D_80383010.unk2]); } D_80383010.unk0_6 ^= 1; - gczoombox_maximize(D_80383010.zoombox[D_80383010.unk0_15]); - if(D_8036C4E0[D_80383010.unk0_15].unkF = func_803183A4(D_80383010.zoombox[D_80383010.unk0_15], (D_80383010.unk0_6)? "ARE YOU SURE?" : "A - YES, B - NO")) + gczoombox_maximize(D_80383010.zoombox[D_80383010.unk2]); + if(D_8036C4E0[D_80383010.unk2].unkF = func_803183A4(D_80383010.zoombox[D_80383010.unk2], (D_80383010.unk0_6)? "ARE YOU SURE?" : "A - YES, B - NO")) D_80383010.unkC = 0.0; }//L80313AF4 if(func_8024E67C(BUTTON_START) == 1){ func_803120FC(6); }else if(sp6C[1] == 1){ D_80383010.unk4 = (D_80383010.unk70_29)? 3 : 4; - func_803188B4(D_80383010.zoombox[D_80383010.unk0_15]); + func_803188B4(D_80383010.zoombox[D_80383010.unk2]); func_803120FC(1); }else if(sp6C[0] == 1){//L80313B68 func_803120FC(3); @@ -808,7 +1043,7 @@ s32 func_80313380(void){ func_803120FC(8); break; case 8: - func_80312F88(D_80383010.unk0_15); + func_80312F88(D_80383010.unk2); func_80312FD0(1); func_80312D78(D_8036C520,4); func_80313134(); @@ -818,26 +1053,26 @@ s32 func_80313380(void){ } break; case 9: - func_80312F88(D_80383010.unk0_15); + func_80312F88(D_80383010.unk2); func_80312FD0(1); func_80313134(); if(func_8024E67C(BUTTON_START) == 1){ - D_80383010.unk0_23 = 3; + D_80383010.unk1 = 3; func_803120FC(0xA); }else if(sp6C[1] == 1){ func_803120FC(0xA); }else if(0.75 < sp48[0]){ - if((s32)D_80383010.unk0_15 < func_80313070()) + if((s32)D_80383010.unk2 < func_80313070()) func_8031307C(1); }else if(sp48[0] < -0.75){//L80313CCC - if((s32)D_80383010.unk0_15 > 0){ + if((s32)D_80383010.unk2 > 0){ func_8031307C(-1); } } break; case 0xA://80313D00 - func_80312F88(D_80383010.unk0_15); + func_80312F88(D_80383010.unk2); func_80312FD0(-1); func_80312E80(D_8036C520, 4); func_80313134(); @@ -858,7 +1093,7 @@ s32 func_80313380(void){ break; case 0xB: - if(D_80383010.unk0_23 == 3){ + if(D_80383010.unk1 == 3){ D_80383010.unk0_7 = 1; } else{ @@ -867,7 +1102,7 @@ s32 func_80313380(void){ break; case 0xC: - func_80312F88(D_80383010.unk0_15); + func_80312F88(D_80383010.unk2); func_80312FD0(-1); func_80313134(); if(D_80383010.unk5 == 0 && !D_80383010.unk0_5){ @@ -876,7 +1111,7 @@ s32 func_80313380(void){ break; case 0xD: - func_80312F88(D_80383010.unk0_15); + func_80312F88(D_80383010.unk2); func_80312FD0(1); func_80313134(); if(D_80383010.unk7 > 0) @@ -890,7 +1125,7 @@ s32 func_80313380(void){ break; case 0xF: - func_80312F88(D_80383010.unk0_15); + func_80312F88(D_80383010.unk2); func_80312FD0(1); func_80313134(); if(!D_80383010.unk0_5){ @@ -899,10 +1134,10 @@ s32 func_80313380(void){ break; case 0x10: - func_80312F88(D_80383010.unk0_15); + func_80312F88(D_80383010.unk2); func_80313134(); if(func_8024E67C(BUTTON_START) == 1){ - D_80383010.unk0_23 = 3; + D_80383010.unk1 = 3; func_803120FC(0x11); }//L80313EFC else if(sp6C[1] == 1){ @@ -915,7 +1150,7 @@ s32 func_80313380(void){ break; case 0x11: - func_80312F88(D_80383010.unk0_15); + func_80312F88(D_80383010.unk2); func_80312FD0(-1); func_80313134(); if(D_80383010.unk9 == -1){ @@ -928,7 +1163,7 @@ s32 func_80313380(void){ break; case 0x12: - if(D_80383010.unk0_23 == 3){ + if(D_80383010.unk1 == 3){ D_80383010.unk0_7 = 1; }else{ func_803120FC((D_80383010.unk9 != -1)?7:0); @@ -950,9 +1185,6 @@ s32 func_80313380(void){ } return D_80383010.unk0_7; } -#else -#pragma GLOBAL_ASM("asm/nonmatchings/core2/gc/pauseMenu/func_80313380.s") -#endif void __pause_drawSprite(Gfx** gdl, Mtx** mptr, void* vptr, BKSprite* sprite, s32 frame, f32 x, f32 y, f32 w, f32 h, u8 a){ f32 sp5C[3]; @@ -1001,7 +1233,9 @@ void func_80314234(Gfx** gdl, Mtx** mptr, s32 vptr, BKSprite *sprite, s32 frame, __pause_drawSprite(gdl, mptr, vptr, sprite, frame, (x - w * 0.5), (y - h * 0.5), w, h, a); } +// extern int D_8036C620 = 0; #ifdef NONMATCHING + void func_80314320(Gfx **gdl, Mtx **mptr, s32 arg2){ f32 sp98[3]; f32 sp8C[3]; @@ -1143,7 +1377,7 @@ void func_80314320(Gfx **gdl, Mtx **mptr, s32 arg2){ if(!D_80383010.unk3A && D_80383010.unk3C[0] > 0){ D_80383010.unk3C[0] = MAX(D_80383010.unk3C[0] - 0xC, 0); } - if(D_80383010.unk0_31 == 0x14){ + if(D_80383010.unk0 == 0x14){ func_802DC604(gdl, mptr, arg2); } diff --git a/src/core2/gc/transition.c b/src/core2/gc/transition.c index ad77b65f..e3b602a5 100644 --- a/src/core2/gc/transition.c +++ b/src/core2/gc/transition.c @@ -11,11 +11,74 @@ void func_8024CE60(f32, f32); /* .data */ -extern struct9s D_8036C150[0x16]; -extern struct9s D_8036C308[0xC]; -extern struct10s D_8036C3F8[0x18]; -extern f32 D_8036C440; -extern f32 D_8036C444; +struct9s D_8036C150[0x16]= { + {0x1, 2, 0, 0.1f, 0, 0, 0.0f}, + {0x2, 3, 1, 0.1f, 0, 0, 0.0f}, + {0x3, 4, 0, 0.5f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f}, + {0x4, 5, 1, 0.5f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f}, + {0x5, 4, 0, 2.5f, ASSET_7D0_MODEL_TRANSITION_JIGGY, 0, 3.5f}, + {0x6, 5, 1, 0.9f, ASSET_7D0_MODEL_TRANSITION_JIGGY, 0, 3.5f}, + {0x7, 0, 0, 0.0f, 0, 0, 0.0f}, + {0x8, 7, 0, 1.1f, 0, 0, 0.0f}, + {0x9, 8, 6, 0.7f, 0, 0, 0.0f}, + {0xA, 5, 1, 3.5f, ASSET_7D4_MODEL_TRANSITION_WITCH, 0, 3.7f}, + {0xB, 4, 0, 0.3f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f}, + {0xC, 5, 1, 0.3f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f}, + {0xD, 2, 0, 0.6f, 0, 0, 0.0f}, + {0xE, 4, 0, 1.0f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f}, + {0xF, 5, 1, 1.0f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f}, + {0x10, 4, 0, 2.5f, ASSET_467_MODEL_TRANSITION_FALLING_JIGGIES, ASSET_1F5_ANIM_TRANSITION_FALLING_JIGGIES, 0.269645989f}, + {0x11, 5, 1, 2.0f, ASSET_467_MODEL_TRANSITION_FALLING_JIGGIES, ASSET_1F5_ANIM_TRANSITION_FALLING_JIGGIES, 0.269645989f}, + {0x12, 4, 0, 1.2f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f}, + {0x13, 5, 1, 1.2f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f}, + {0x14, 5, 1, 2.2f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f}, + {0x15, 4, 0, 2.2f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f}, + 0 +}; + +struct9s D_8036C308[0xC] = { + {0xA, 5, 1, 3.5f, ASSET_7D4_MODEL_TRANSITION_WITCH, 0, 3.7f}, + {0x10, 4, 0, 2.5f, ASSET_467_MODEL_TRANSITION_FALLING_JIGGIES, ASSET_1F5_ANIM_TRANSITION_FALLING_JIGGIES, 0.269645989f}, + {0x11, 5, 1, 2.0f, ASSET_467_MODEL_TRANSITION_FALLING_JIGGIES, ASSET_1F5_ANIM_TRANSITION_FALLING_JIGGIES, 0.269645989f}, + {0x6, 5, 1, 0.9f, ASSET_7D0_MODEL_TRANSITION_JIGGY, 0, 3.5f}, + {0x5, 4, 0, 2.5f, ASSET_7D0_MODEL_TRANSITION_JIGGY, 0, 3.5f}, + {0x9, 8, 6, 0.7f, 0, 0, 0.0f}, + {0x8, 7, 0, 0.7f, 0, 0, 0.0f}, + {0xE, 4, 0, 1.0f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f}, + {0xF, 5, 1, 1.0f, ASSET_7CF_MODEL_TRANSITION_UNKNOWN, 0, 25.0f}, + {0x7, 0, 0, 0.0f, 0, 0, 0.0f}, + {0x8, 7, 0, 1.1f, 0, 0, 0.0f}, + {0x9, 8, 6, 1.5f, 0, 0, 0.0f} +}; + +struct10s D_8036C3F8[0x18] = { + {MAP_20_CS_END_NOT_100, 0x12, 0x13}, + {MAP_1F_CS_START_RAREWARE, 0x15, 0x09}, + {MAP_1E_CS_START_NINTENDO, 0x08, 0x13}, + {MAP_7D_CS_SPIRAL_MOUNTAIN_1, 0x0B, 0x0C}, + {MAP_7E_CS_SPIRAL_MOUNTAIN_2, 0x0B, 0x0C}, + {MAP_85_CS_SPIRAL_MOUNTAIN_3, 0x12, 0x0C}, + {MAP_86_CS_SPIRAL_MOUNTAIN_4, 0x0B, 0x0C}, + {MAP_87_CS_SPIRAL_MOUNTAIN_5, 0x12, 0x13}, + {MAP_88_CS_SPIRAL_MOUNTAIN_6, 0x12, 0x13}, + {MAP_94_CS_INTRO_SPIRAL_7, 0x12, 0x13}, + {MAP_95_CS_END_ALL_100, 0x12, 0x13}, + {MAP_98_CS_END_SPIRAL_MOUNTAIN_1, 0x12, 0x0A}, + {MAP_99_CS_END_SPIRAL_MOUNTAIN_2, 0x12, 0x0A}, + {MAP_7B_CS_INTRO_GL_DINGPOT_1, 0x0B, 0x0C}, + {MAP_81_CS_INTRO_GL_DINGPOT_2, 0x0B, 0x0C}, + {MAP_82_CS_ENTERING_GL_MACHINE_ROOM, 0x12, 0x0A}, + {MAP_83_CS_GAME_OVER_MACHINE_ROOM, 0x12, 0x13}, + {MAP_84_CS_UNUSED_MACHINE_ROOM, 0x12, 0x0C}, + {MAP_7C_CS_INTRO_BANJOS_HOUSE_1, 0x0B, 0x0C}, + {MAP_89_CS_INTRO_BANJOS_HOUSE_2, 0x0B, 0x0A}, + {MAP_8A_CS_INTRO_BANJOS_HOUSE_3, 0x01, 0x02}, + {MAP_96_CS_END_BEACH_1, 0x12, 0x13}, + {MAP_97_CS_END_BEACH_2, 0x08, 0x14}, + {0, 0x05, 0x06} +}; +f32 D_8036C440 = 63.6026115f; +f32 D_8036C444 = 500.0f; /* .bss */ diff --git a/subyaml/core2.us.v10.yaml b/subyaml/core2.us.v10.yaml index 822b7982..063c4163 100644 --- a/subyaml/core2.us.v10.yaml +++ b/subyaml/core2.us.v10.yaml @@ -540,7 +540,12 @@ segments: - [0xE3C50, .data, code_82000] - [0xE4870, bin, data_E4870] - [0xE4880, .data, code_83D70] - - [0xE4DB0, bin, data_E4DB0] + - [0xE4DB0, .data, code_840D0] + - [0xE51C0, .data, gc/transition] + - [0xE54C0, .data, code_851D0] + - [0xE5540, bin, data_E5540] + - [0xE5550, .data, gc/pauseMenu] + - [0xE5690, bin, data_E5690] - [0xE5730, .data, gc/zoombox] - [0xE69B0, bin, data_E69B0] - [0xE7330, .data, code_9B990] @@ -758,12 +763,13 @@ segments: # - [0xF0540, bin, data_F0540] - [0xF05E0, bin, data_F05E0] - [0xF07B0, .rodata, code_83D70] - - [0xF14B0, bin, data_F14B0] + - [0xF14B0, .rodata, code_840D0] - [0xF14C0, .rodata, gc/transition] - [0xF1520, .rodata, code_85800] - [0xF1540, .rodata, code_87E30] - [0xF1560, bin, data_F1560] # .rodata, code_87E30] - - [0xF15B0, bin, data_F15B0] + - [0xF15B0, .rodata, gc/pauseMenu] + - [0xF18C0, bin, data_F18C0] - [0xF18F0, .rodata, gc/zoombox] # - [0xF1960, bin, data_F1960] - [0xF19C0, .rodata, code_91E10]