diff --git a/src/game/game_init.c b/src/game/game_init.c index 3b1da0a9..6cfa8f55 100644 --- a/src/game/game_init.c +++ b/src/game/game_init.c @@ -715,6 +715,9 @@ void thread5_game_loop(UNUSED void *arg) { play_music(SEQ_PLAYER_SFX, SEQUENCE_ARGS(0, SEQ_SOUND_PLAYER), 0); set_sound_mode(save_file_get_sound_mode()); +#ifdef WIDE + gWidescreen = save_file_get_widescreen_mode(); +#endif render_init(); while (TRUE) { diff --git a/src/game/ingame_menu.c b/src/game/ingame_menu.c index 2eb64128..9cd458a8 100644 --- a/src/game/ingame_menu.c +++ b/src/game/ingame_menu.c @@ -1682,11 +1682,7 @@ void render_pause_castle_main_strings(s16 x, s16 y) { } } } -#ifdef WIDE - if (gPlayer1Controller->buttonPressed & L_TRIG){ - gWidescreen ^= 1; - } -#endif + gSPDisplayList(gDisplayListHead++, dl_ia_text_begin); gDPSetEnvColor(gDisplayListHead++, 255, 255, 255, gDialogTextAlpha); if (gDialogLineNum < COURSE_STAGES_COUNT) { @@ -1736,11 +1732,6 @@ s16 render_pause_courses_and_castle(void) { shade_screen(); render_pause_my_score_coins(); render_pause_red_coins(); - #ifdef WIDE - if (gPlayer1Controller->buttonPressed & L_TRIG){ - gWidescreen ^= 1; - } - #endif #ifndef EXIT_COURSE_WHILE_MOVING s32 exitCheck = gMarioStates[0].action & ACT_FLAG_PAUSE_EXIT; #else @@ -1788,6 +1779,10 @@ s16 render_pause_courses_and_castle(void) { } #ifdef WIDE render_widescreen_setting(); + if (gPlayer1Controller->buttonPressed & L_TRIG){ + gWidescreen ^= 1; + save_file_set_widescreen_mode(gWidescreen); + } #endif if (gDialogTextAlpha < 250) { gDialogTextAlpha += 25; diff --git a/src/game/rendering_graph_node.c b/src/game/rendering_graph_node.c index ab0b73f6..3886a0de 100644 --- a/src/game/rendering_graph_node.c +++ b/src/game/rendering_graph_node.c @@ -298,7 +298,11 @@ static void geo_process_perspective(struct GraphNodePerspective *node) { Mtx *mtx = alloc_display_list(sizeof(*mtx)); #ifdef WIDE if (gWidescreen){ - aspect = 1.775f; + if (gCurrLevelNum == 0x01) { + aspect = 1.33333f; + } else { + aspect = 1.775f; + } } else{ aspect = 1.33333f; diff --git a/src/game/save_file.c b/src/game/save_file.c index 51ada824..b27d869b 100644 --- a/src/game/save_file.c +++ b/src/game/save_file.c @@ -629,6 +629,19 @@ void save_file_set_sound_mode(u16 mode) { save_main_menu_data(); } +#ifdef WIDE +u8 save_file_get_widescreen_mode(void) { + return gSaveBuffer.menuData[0].wideMode; +} + +void save_file_set_widescreen_mode(u8 mode) { + gSaveBuffer.menuData[0].wideMode = mode; + + gMainMenuDataModified = TRUE; + save_main_menu_data(); +} +#endif + u16 save_file_get_sound_mode(void) { return gSaveBuffer.menuData[0].soundMode; } diff --git a/src/game/save_file.h b/src/game/save_file.h index 5cd6cd13..71c5211e 100644 --- a/src/game/save_file.h +++ b/src/game/save_file.h @@ -58,7 +58,10 @@ struct MainMenuSaveData // the older the high score is. This is used for tie-breaking when displaying // on the high score screen. u32 coinScoreAges[NUM_SAVE_FILES]; - u16 soundMode; + u16 soundMode: 2; +#ifdef WIDE + u8 wideMode: 1; +#endif #ifdef VERSION_EU u16 language; @@ -160,6 +163,10 @@ void save_file_set_cap_pos(s16 x, s16 y, s16 z); s32 save_file_get_cap_pos(Vec3s capPos); void save_file_set_sound_mode(u16 mode); u16 save_file_get_sound_mode(void); +#ifdef WIDE +u8 save_file_get_widescreen_mode(void); +void save_file_set_widescreen_mode(u8 mode); +#endif void save_file_move_cap_to_default_location(void); void disable_warp_checkpoint(void); diff --git a/src/menu/file_select.c b/src/menu/file_select.c index b6426eb2..a96f7d48 100644 --- a/src/menu/file_select.c +++ b/src/menu/file_select.c @@ -2266,9 +2266,6 @@ Gfx *geo_file_select_strings_and_menu_cursor(s32 callContext, UNUSED struct Grap * either completing a course choosing "SAVE & QUIT" or having a game over. */ s32 lvl_init_menu_values_and_cursor_pos(UNUSED s32 arg, UNUSED s32 unused) { -#ifdef WIDE - gWidescreen = 0; -#endif sSelectedButtonID = MENU_BUTTON_NONE; sCurrentMenuLevel = MENU_LAYER_MAIN; sTextBaseAlpha = 0;