From 4826a326c80ad77930d28ed8c470e4ffedf2186d Mon Sep 17 00:00:00 2001 From: Wanne Date: Sun, 2 Oct 2011 20:08:17 +0000 Subject: [PATCH] - Bugfix: Sometimes save games generated by Assert have an invalid startup screen. Added a check to make sure the save game will at least go to the map screen on loading rather than stay on the main screen (by tazpn) git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@4672 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- SaveLoadGame.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/SaveLoadGame.cpp b/SaveLoadGame.cpp index 233eec75..6e3dae9c 100644 --- a/SaveLoadGame.cpp +++ b/SaveLoadGame.cpp @@ -7260,6 +7260,26 @@ BOOLEAN SaveGeneralInfo( HWFILE hFile ) extern UINT32 guiRainLoop; //end rain +void EnsureValidLoadScreen( UINT32* puiScreen ) +{ + if (!puiScreen) + return; + + switch(*puiScreen) + { + case GAME_SCREEN: + case MAP_SCREEN: + case LAPTOP_SCREEN: + // These are valid screens + break; + + default: + // By default go to the strategic map if not a valid screen otherwise + *puiScreen = MAP_SCREEN; + break; + } +} + BOOLEAN LoadGeneralInfo( HWFILE hFile ) { //UINT32 uiNumBytesRead; @@ -7406,6 +7426,9 @@ BOOLEAN LoadGeneralInfo( HWFILE hFile ) return( FALSE ); } + // Sometimes autosaves have invalid screens references esp. when generated on assert + EnsureValidLoadScreen(&sGeneralInfo.uiCurrentScreen); + gMusicModeToPlay = sGeneralInfo.ubMusicMode; guiCurrentUniqueSoldierId = sGeneralInfo.uiCurrentUniqueSoldierId;