SUPERNOVA: Fix several issues with savegames

This commit is contained in:
Thierry Crozat 2017-11-17 23:13:45 +00:00
parent 34658bc7d4
commit 87ab33a8aa
4 changed files with 24 additions and 4 deletions

View File

@ -2243,6 +2243,7 @@ bool ArsanoMeetup2::interact(Action verb, Object &obj1, Object &obj2) {
_gm->loadTime();
_gm->_rooms[CAVE]->getObject(1)->_exitRoom = MEETUP3;
_gm->_state._dream = true;
_vm->paletteFadeIn();
}
} else {
_gm->changeRoom(MEETUP2);

View File

@ -127,6 +127,10 @@ bool GameManager::deserialize(Common::ReadStream *in, int version) {
}
changeRoom(curRoomId);
// Some additional variables
_guiEnabled = true;
_animationEnabled = true;
return !in->err();
}
@ -989,6 +993,9 @@ void GameManager::reply(const char *text, int aus1, int aus2) {
}
int GameManager::dialog(int num, byte rowLength[6], StringID text[6], int number) {
_vm->_allowLoadGame = false;
_guiEnabled = false;
bool remove[6];
for (int i = 0; i < 5; ++i)
remove[i] = _currentRoom->sentenceRemoved(i, number);
@ -1015,18 +1022,19 @@ int GameManager::dialog(int num, byte rowLength[6], StringID text[6], int number
rq += rowLength[i];
}
_guiEnabled = false;
_currentSentence = -1;
do {
mouseInput3();
} while (_currentSentence == -1 && !_vm->shouldQuit());
_guiEnabled = true;
_vm->renderBox(0, 138, 320, 62, kColorBlack);
if (number && _texts[_rowsStart[_currentSentence]] != kStringDialogSeparator)
_currentRoom->removeSentence(_currentSentence, number);
_guiEnabled = true;
_vm->_allowLoadGame = true;
return _currentSentence;
}

View File

@ -982,7 +982,8 @@ Common::Error SupernovaEngine::loadGameState(int slot) {
}
bool SupernovaEngine::canSaveGameStateCurrently() {
return _allowSaveGame;
// Do not allow saving when either _allowSaveGame, _animationEnabled or _guiEnabled is false
return _allowSaveGame && _gm->_animationEnabled && _gm->_guiEnabled;
}
Common::Error SupernovaEngine::saveGameState(int slot, const Common::String &desc) {
@ -1024,6 +1025,13 @@ bool SupernovaEngine::loadGame(int slot) {
Graphics::skipThumbnail(*savefile);
_gm->deserialize(savefile, saveVersion);
if (saveVersion >= 5) {
_menuBrightness = savefile->readByte();
_brightness = savefile->readByte();
} else {
_menuBrightness = _brightness = 255;
}
delete savefile;
return true;
@ -1054,6 +1062,9 @@ bool SupernovaEngine::saveGame(int slot, const Common::String &description) {
Graphics::saveThumbnail(*savefile);
_gm->serialize(savefile);
savefile->writeByte(_menuBrightness);
savefile->writeByte(_brightness);
savefile->finalize();
delete savefile;

View File

@ -43,7 +43,7 @@
namespace Supernova {
#define SAVEGAME_HEADER MKTAG('M','S','N','1')
#define SAVEGAME_VERSION 4
#define SAVEGAME_VERSION 5
#define SUPERNOVA_DAT "supernova.dat"
#define SUPERNOVA_DAT_VERSION 1