diff --git a/engines/drascula/drascula.cpp b/engines/drascula/drascula.cpp index 358aecc2950..9ac9031fb72 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 d0f16aa9415..e67ada50fa0 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; }