diff --git a/source/sw/src/game.cpp b/source/sw/src/game.cpp index e1ecd8f2a..2486820a1 100644 --- a/source/sw/src/game.cpp +++ b/source/sw/src/game.cpp @@ -746,48 +746,53 @@ void EndOfLevel() void GameTicker(void) { - if (SavegameLoaded) + if (!ExitLevel) { - InitLevelGlobals(); - SavegameLoaded = false; - // contains what is needed from calls below - if (snd_ambience) - StartAmbientSound(); - // crappy little hack to prevent play clock from being overwritten - // for load games - int SavePlayClock = PlayClock; - InitTimingVars(); - PlayClock = SavePlayClock; - } - else if (NextLevel) - { - InitLevel(); - InitRunLevel(); - } - - ready2send = 1; - - - if (paused) - { - ototalclock = (int)totalclock - (120 / synctics); - buttonMap.ResetButtonStates(); - } - else - { - while (ready2send && (totalclock >= ototalclock + synctics)) + if (SavegameLoaded) { - UpdateInputs(); - MoveTicker(); + InitLevelGlobals(); + SavegameLoaded = false; + // contains what is needed from calls below + if (snd_ambience) + StartAmbientSound(); + // crappy little hack to prevent play clock from being overwritten + // for load games + int SavePlayClock = PlayClock; + InitTimingVars(); + PlayClock = SavePlayClock; + ExitLevel = false; + } + else if (NextLevel) + { + InitLevel(); + InitRunLevel(); + ExitLevel = false; } - // Get input again to update q16ang/q16horiz. - if (!PedanticMode) - getinput(&loc, TRUE); - } + ready2send = 1; - drawscreen(Player + screenpeek); - ready2send = 0; + + if (paused) + { + ototalclock = (int)totalclock - (120 / synctics); + buttonMap.ResetButtonStates(); + } + else + { + while (ready2send && (totalclock >= ototalclock + synctics)) + { + UpdateInputs(); + MoveTicker(); + } + + // Get input again to update q16ang/q16horiz. + if (!PedanticMode) + getinput(&loc, TRUE); + } + + drawscreen(Player + screenpeek); + ready2send = 0; + } if (ExitLevel) { ExitLevel = false; @@ -812,7 +817,7 @@ int32_t GameInterface::app_main() try { // if the menu initiazed a new game or loaded a savegame, switch to play mode. - if (NewGame || SavegameLoaded) gamestate = GS_LEVEL; + if (SavegameLoaded || NextLevel) gamestate = GS_LEVEL; handleevents(); updatePauseStatus(); diff --git a/source/sw/src/game.h b/source/sw/src/game.h index a60126ddc..5781439b1 100644 --- a/source/sw/src/game.h +++ b/source/sw/src/game.h @@ -2121,6 +2121,7 @@ void DoSoundSpotMatch(short match, short sound_num, short sound_type); // /////////////////////////////////////////////////////////////////////////////////////////// +extern SWBOOL NewGame; extern SWBOOL ExitLevel, FinishedLevel; extern SWBOOL Warping; extern uint8_t CommPlayers; diff --git a/source/sw/src/osdcmds.cpp b/source/sw/src/osdcmds.cpp index e903dca3a..a6db63a55 100644 --- a/source/sw/src/osdcmds.cpp +++ b/source/sw/src/osdcmds.cpp @@ -46,6 +46,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "mapinfo.h" #include "jsector.h" #include "network.h" +#include "gamestate.h" BEGIN_SW_NS @@ -66,6 +67,7 @@ static void levelwarp(MapRecord *maprec) NextLevel = maprec; ExitLevel = TRUE; + if (gamestate == GS_MENUSCREEN || gamestate == GS_FULLCONSOLE) NewGame = true; sprintf(ds, "%s %s", GStrings("TXT_ENTERING"), maprec->DisplayName()); PutStringInfo(pp, ds);