From 1c0362d22f2d16fa87ff4789001e6a4f549eb3ec Mon Sep 17 00:00:00 2001 From: Thierry Crozat Date: Mon, 11 Apr 2016 00:09:35 +0100 Subject: DRASCULA: Improve loading savegames in Pendulum scene The previous fix only fixed the incomplete state when loading from the launcher. Now this is fixed when loading from the game as well. It also fixes loading a savegame from the first stage of the pendulum scene (when the protagonist is not visible) to any other scene in chapter 6. The protagonist was not made visible again when loading the savegame. --- engines/drascula/drascula.cpp | 4 ---- engines/drascula/saveload.cpp | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/engines/drascula/drascula.cpp b/engines/drascula/drascula.cpp index 358aecc295..9ac9031fb7 100644 --- a/engines/drascula/drascula.cpp +++ b/engines/drascula/drascula.cpp @@ -534,10 +534,6 @@ bool DrasculaEngine::runCurrentChapter() { if (!loadGame(_currentSaveSlot)) { return true; } - // When loading room 102 while being attached below the pendulum we - // need to call activatePendulum() to properly initialized the scene. - if (_roomNumber == 102 && flags[1] == 2) - activatePendulum(); loadPic("auxdr.alg", drawSurface2); } } diff --git a/engines/drascula/saveload.cpp b/engines/drascula/saveload.cpp index d0f16aa941..e67ada50fa 100644 --- a/engines/drascula/saveload.cpp +++ b/engines/drascula/saveload.cpp @@ -255,6 +255,19 @@ bool DrasculaEngine::loadGame(int slot) { if (!(in = _saveFileMan->openForLoading(saveFileName))) { error("missing savegame file %s", saveFileName.c_str()); } + + // If we currently are in room 102 while being attached below the pendulum + // the character is invisible and some surface are temporarily used for other + // things. Reset those before loading the savegame otherwise we may have some + // issues such as the protagonist being invisible after reloading a savegame. + if (_roomNumber == 102 && flags[1] == 2) { + hare_se_ve = 1; + loadPic(96, frontSurface); + loadPic(97, frontSurface); + loadPic(97, extraSurface); + loadPic(99, backSurface); + } + loadMetaData(in, slot, true); Graphics::skipThumbnail(*in); @@ -289,6 +302,11 @@ bool DrasculaEngine::loadGame(int slot) { } enterRoom(roomNum); selectVerb(kVerbNone); + + // When loading room 102 while being attached below the pendulum we + // need to call activatePendulum() to properly initialized the scene. + if (_roomNumber == 102 && flags[1] == 2) + activatePendulum(); return true; } -- cgit v1.2.3