diff --git a/config.cpp b/config.cpp index 2e7b1696..2b6e9bde 100644 --- a/config.cpp +++ b/config.cpp @@ -380,18 +380,35 @@ bool have_current_settings() { if(tactic::on) modecount += 10; if(randomPatternsMode) modecount += 10; if(geometry != gNormal) modecount += 10; + + if(modecount > 1) + return true; + return false; + } + +bool have_current_graph_settings() { if(vid.xposition || vid.yposition || vid.alpha != 1 || vid.scale != 1) return true; if(pmodel != mdDisk || vid.monmode != DEFAULT_MONMODE || vid.wallmode != DEFAULT_WALLMODE) return true; if(firstland != laIce || multi::players != 1 || rug::rugged) return true; - if(modecount > 1) - return true; + return false; } +void reset_graph_settings() { + pmodel = mdDisk; vid.alpha = 1; vid.scale = 1; + vid.xposition = vid.yposition = 0; + #if CAP_RUG + if(rug::rugged) rug::close(); + #endif + + vid.monmode = DEFAULT_MONMODE; + vid.wallmode = DEFAULT_WALLMODE; + } + void resetModes(char leave) { popAllGames(); if(shmup::on != (leave == rg::shmup)) stop_game_and_switch_mode(rg::shmup); @@ -416,14 +433,6 @@ void resetModes(char leave) { set_geometry(gNormal); set_variation(eVariation::bitruncated); - pmodel = mdDisk; vid.alpha = 1; vid.scale = 1; - vid.xposition = vid.yposition = 0; - #if CAP_RUG - if(rug::rugged) rug::close(); - #endif - - vid.monmode = DEFAULT_MONMODE; - vid.wallmode = DEFAULT_WALLMODE; start_game(); } diff --git a/menus.cpp b/menus.cpp index 8bcef6a6..6274d7c5 100644 --- a/menus.cpp +++ b/menus.cpp @@ -697,7 +697,13 @@ void showStartMenu() { dialog::addBreak(100); dialog::addBigItem(XLAT1("use current/saved settings"), SDLK_ESCAPE); } - + + if(have_current_graph_settings()) { + dialog::addBreak(100); + dialog::addBigItem(XLAT1("reset the graphics settings"), 'r'); + dialog::add_action([] () { reset_graph_settings(); }); + } + dialog::addBreak(100); dialog::addBigItem(XLAT("main menu"), 'm'); dialog::addInfo(XLAT("more options"));