From 21f56e34cc76d398a67e64f465ef662262a235d6 Mon Sep 17 00:00:00 2001 From: Leaze Date: Sat, 11 Mar 2023 18:02:26 +0100 Subject: [PATCH] full-game-mode: add full-game mode --- include/text_strings.h.in | 5 +++++ src/game/game_init.c | 2 ++ src/game/game_init.h | 1 + src/game/level_update.c | 5 ++--- src/menu/file_select.c | 27 ++++++++++++++++++++++----- src/menu/file_select.h | 3 +++ 6 files changed, 35 insertions(+), 8 deletions(-) diff --git a/include/text_strings.h.in b/include/text_strings.h.in index 0f28e668..312f729c 100644 --- a/include/text_strings.h.in +++ b/include/text_strings.h.in @@ -3,6 +3,11 @@ #include "text_menu_strings.h" +/** + * MOVEMENT MASTERY + */ +#define TEXT_FULL_GAME_MODE _("FULL GAME") + /** * Global Symbols */ diff --git a/src/game/game_init.c b/src/game/game_init.c index 4be1c7b5..3ec6dab3 100644 --- a/src/game/game_init.c +++ b/src/game/game_init.c @@ -61,6 +61,8 @@ static s32 sUnusedGameInitValue = 0; // General timer that runs as the game starts u32 gGlobalTimer = 0; +bool gIsFullGameMode = FALSE; + // Framebuffer rendering values (max 3) u16 sRenderedFramebuffer = 0; u16 sRenderingFramebuffer = 0; diff --git a/src/game/game_init.h b/src/game/game_init.h index 4ab929e0..d3f9bae6 100644 --- a/src/game/game_init.h +++ b/src/game/game_init.h @@ -60,6 +60,7 @@ extern u8 gDemoInputs[]; extern u16 sRenderingFramebuffer; extern u32 gGlobalTimer; +extern bool gIsFullGameMode; void setup_game_memory(void); void thread5_game_loop(UNUSED void *arg); diff --git a/src/game/level_update.c b/src/game/level_update.c index e350bc38..6e1d47cd 100644 --- a/src/game/level_update.c +++ b/src/game/level_update.c @@ -253,10 +253,9 @@ u32 pressed_pause(void) { u32 pressed_reset(void) { u32 dialogActive = get_dialog_id() >= 0; - // TODO prevent resetting during star animations in speedrun mode - u32 intangible = (gMarioState->action & ACT_FLAG_INTANGIBLE) != 0; + // u32 intangible = (gMarioState->action & ACT_FLAG_INTANGIBLE) != 0; - if (!gWarpTransition.isActive && sDelayedWarpOp == WARP_OP_NONE + if (!gIsFullGameMode && !gWarpTransition.isActive && sDelayedWarpOp == WARP_OP_NONE && (gPlayer1Controller->buttonPressed & L_TRIG)) { return TRUE; } diff --git a/src/menu/file_select.c b/src/menu/file_select.c index 6cc550ac..37b001e8 100644 --- a/src/menu/file_select.c +++ b/src/menu/file_select.c @@ -153,7 +153,8 @@ static unsigned char textEraseFileButton[][16] = { {TEXT_ERASE_FILE}, {TEXT_ERAS static unsigned char textSoundModes[][8] = { { TEXT_STEREO }, { TEXT_MONO }, { TEXT_HEADSET } }; #endif -static unsigned char textMarioA[] = { TEXT_FILE_MARIO_A }; +static unsigned char textSingleStar[] = { TEXT_FILE_MARIO_A }; +static unsigned char textFullGameMode[] = { TEXT_FULL_GAME_MODE }; #ifndef VERSION_EU static unsigned char textNew[] = { TEXT_NEW }; @@ -1240,6 +1241,10 @@ void bhv_menu_button_manager_init(void) { } sMainMenuButtons[MENU_BUTTON_PLAY_FILE_A]->oMenuButtonScale = 1.0f; + sMainMenuButtons[MENU_BUTTON_PLAY_SPEEDRUN_MODE] = spawn_object_rel_with_rot( + gCurrentObject, MODEL_MAIN_MENU_MARIO_SAVE_BUTTON_FADE, bhvMenuButton, 1500, 2800, 0, 0, 0, 0); + sMainMenuButtons[MENU_BUTTON_PLAY_SPEEDRUN_MODE]->oMenuButtonScale = 1.0f; + // Score menu button sMainMenuButtons[MENU_BUTTON_SCORE] = spawn_object_rel_with_rot( gCurrentObject, MODEL_MAIN_MENU_GREEN_SCORE_BUTTON, bhvMenuButton, -6400, -3500, 0, 0, 0, 0); @@ -1312,6 +1317,13 @@ void check_main_menu_clicked_buttons(void) { #if ENABLE_RUMBLE queue_rumble_data(60, 70); func_sh_8024C89C(1); +#endif + break; + case MENU_BUTTON_PLAY_SPEEDRUN_MODE: + play_sound(SAVE_FILE_SOUND, gGlobalSoundSource); +#if ENABLE_RUMBLE + queue_rumble_data(60, 70); + func_sh_8024C89C(1); #endif break; @@ -1366,6 +1378,10 @@ void bhv_menu_button_manager_loop(void) { case MENU_BUTTON_PLAY_FILE_A: load_main_menu_save_file(sMainMenuButtons[MENU_BUTTON_PLAY_FILE_A], 1); break; + case MENU_BUTTON_PLAY_SPEEDRUN_MODE: + gIsFullGameMode = TRUE; + load_main_menu_save_file(sMainMenuButtons[MENU_BUTTON_PLAY_SPEEDRUN_MODE], 1); + break; case MENU_BUTTON_SCORE: check_score_menu_clicked_buttons(sMainMenuButtons[MENU_BUTTON_SCORE]); break; @@ -1679,7 +1695,8 @@ void print_main_menu_strings(void) { // Print file names gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_menu_generic_string(MARIOTEXT_X1, 65, textMarioA); + print_menu_generic_string(MARIOTEXT_X1, 65, textSingleStar); + print_menu_generic_string(MARIOTEXT_X2, 65, textFullGameMode); gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); } @@ -1824,7 +1841,7 @@ void print_score_menu_strings(void) { // Print file names gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_menu_generic_string(89, 62, textMarioA); + print_menu_generic_string(89, 62, textSingleStar); gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); #endif } @@ -2003,7 +2020,7 @@ void print_copy_menu_strings(void) { // Print file names gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_menu_generic_string(89, 62, textMarioA); + print_menu_generic_string(89, 62, textSingleStar); gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); #endif } @@ -2273,7 +2290,7 @@ void print_erase_menu_strings(void) { // Print file names gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, sTextBaseAlpha); - print_menu_generic_string(89, 62, textMarioA); + print_menu_generic_string(89, 62, textSingleStar); gSPDisplayList(gDisplayListHead++, dl_menu_ia8_text_end); #endif } diff --git a/src/menu/file_select.h b/src/menu/file_select.h index 73f17221..42c2b080 100644 --- a/src/menu/file_select.h +++ b/src/menu/file_select.h @@ -29,6 +29,7 @@ enum MenuButtonTypes { // Main Menu (SELECT FILE) MENU_BUTTON_MAIN_MIN, MENU_BUTTON_PLAY_FILE_A = MENU_BUTTON_MAIN_MIN, + MENU_BUTTON_PLAY_SPEEDRUN_MODE, MENU_BUTTON_SCORE, MENU_BUTTON_COPY, MENU_BUTTON_ERASE, @@ -115,6 +116,8 @@ enum SoundModeMenuActionPhase { SOUND_MODE_PHASE_MAIN }; +extern bool gIsFullGameMode; + void beh_yellow_background_menu_init(void); void beh_yellow_background_menu_loop(void); void bhv_menu_button_init(void);