diff --git a/data/dynos_bin_lvl.cpp b/data/dynos_bin_lvl.cpp index cc959624..4599fcc3 100644 --- a/data/dynos_bin_lvl.cpp +++ b/data/dynos_bin_lvl.cpp @@ -9,6 +9,7 @@ extern "C" { #include "src/game/level_update.h" #include "include/dialog_ids.h" #include "levels/scripts.h" +#include "levels/menu/header.h" #include "src/game/area.h" } @@ -308,6 +309,7 @@ s64 DynOS_Lvl_ParseLevelScriptConstants(const String& _Arg, bool* found) { // global scripts lvl_constant(level_main_scripts_entry); + lvl_constant(level_main_menu_entry_1); lvl_constant(script_func_global_1); lvl_constant(script_func_global_2); lvl_constant(script_func_global_3); @@ -365,6 +367,7 @@ s64 DynOS_Lvl_ParseLevelScriptConstants(const String& _Arg, bool* found) { // Other constants lvl_constant(NULL); + lvl_constant(TRUE); lvl_constant(FALSE); *found = false; diff --git a/data/dynos_mgr_builtin.cpp b/data/dynos_mgr_builtin.cpp index d57cb3db..b6fa23ce 100644 --- a/data/dynos_mgr_builtin.cpp +++ b/data/dynos_mgr_builtin.cpp @@ -21,6 +21,8 @@ extern "C" { #include "game/behavior_actions.h" #include "game/rendering_graph_node.h" #include "game/skybox.h" +#include "menu/level_select_menu.h" +#include "menu/intro_geo.h" #include "actors/common0.h" #include "actors/common1.h" @@ -78,6 +80,7 @@ extern "C" { #include "levels/wdw/header.h" #include "levels/wf/header.h" #include "levels/wmotr/header.h" +#include "levels/menu/header.h" #include "dynos_mgr_builtin_externs.h" #include "textures.h" @@ -175,6 +178,7 @@ static const void* sDynosBuiltinScriptPtrs[] = { define_builtin(level_wdw_entry), define_builtin(level_wf_entry), define_builtin(level_wmotr_entry), + define_builtin(level_main_menu_entry_1), }; const void* DynOS_Builtin_ScriptPtr_GetFromName(const char* aDataName) { @@ -1900,6 +1904,13 @@ static const void* sDynosBuiltinFuncs[] = { // Other define_builtin(load_object_collision_model), define_builtin(obj_set_secondary_camera_focus), + + // Menu related + define_builtin(lvl_intro_update), + define_builtin(geo_intro_super_mario_64_logo), + define_builtin(geo_intro_tm_copyright), + define_builtin(geo_intro_regular_backdrop), + define_builtin(geo_draw_mario_head_goddard), }; const void* DynOS_Builtin_Func_GetFromName(const char* aDataName) { diff --git a/src/menu/file_select.c b/src/menu/file_select.c index 9a4f8715..9452c919 100644 --- a/src/menu/file_select.c +++ b/src/menu/file_select.c @@ -1680,6 +1680,10 @@ void handle_controller_cursor_input(void) { if (sCursorPos[1] < -90.0f) { sCursorPos[1] = -90.0f; } + + if (sCursorClickingTimer == 0) { + handle_cursor_button_input(); + } } /** diff --git a/src/menu/intro_geo.c b/src/menu/intro_geo.c index 9f08b288..634d4877 100644 --- a/src/menu/intro_geo.c +++ b/src/menu/intro_geo.c @@ -63,6 +63,8 @@ static Gfx *sIntroScalePos; static Vec3f sIntroScale; static Vec3f sIntroScalePrev; +bool skipInterpolationTitleScreen = false; + void patch_title_screen_before(void) { sIntroScalePos = NULL; } diff --git a/src/menu/intro_geo.h b/src/menu/intro_geo.h index bedafb67..291ef83b 100644 --- a/src/menu/intro_geo.h +++ b/src/menu/intro_geo.h @@ -7,6 +7,8 @@ #include "types.h" #include "engine/graph_node.h" +extern bool skipInterpolationTitleScreen; + Gfx *geo_intro_super_mario_64_logo(s32 sp50, struct GraphNode *sp54, UNUSED void *context); Gfx *geo_intro_tm_copyright(s32 sp40, struct GraphNode *sp44, UNUSED void *context); Gfx *geo_intro_regular_backdrop(s32 sp48, struct GraphNode *sp4c, UNUSED void *context); diff --git a/src/menu/level_select_menu.c b/src/menu/level_select_menu.c index ef9732e3..6048b3a2 100644 --- a/src/menu/level_select_menu.c +++ b/src/menu/level_select_menu.c @@ -15,6 +15,7 @@ #include "seq_ids.h" #include "sm64.h" #include "pc/lua/utils/smlua_level_utils.h" +#include "menu/intro_geo.h" #define PRESS_START_DEMO_TIMER 800 @@ -249,6 +250,13 @@ s32 lvl_intro_update(s16 arg1, UNUSED s32 arg2) { case 3: retVar = level_select_input_loop(); break; + case 4: + gGlobalTimer = 0; + skipInterpolationTitleScreen = true; + break; + case 5: + skipInterpolationTitleScreen = false; + break; } return retVar; } diff --git a/src/pc/pc_main.c b/src/pc/pc_main.c index d69f95b8..f1c4ec5a 100644 --- a/src/pc/pc_main.c +++ b/src/pc/pc_main.c @@ -54,6 +54,8 @@ #include "pc/mods/mods.h" +#include "menu/intro_geo.h" + OSMesg D_80339BEC; OSMesgQueue gSIEventMesgQueue; @@ -171,7 +173,7 @@ void produce_interpolation_frames_and_delay(void) { gfx_start_frame(); f32 delta = MIN((curTime - sFrameTimeStart) / (sFrameTargetTime - sFrameTimeStart), 1); gRenderingDelta = delta; - patch_interpolations(delta); + if (!skipInterpolationTitleScreen) { patch_interpolations(delta); } send_display_list(gGfxSPTask); gfx_end_frame();