From d4a747705fa06be9a02a0fea2c5705f421ddd516 Mon Sep 17 00:00:00 2001 From: Thierry Crozat Date: Mon, 11 Apr 2016 03:40:17 +0100 Subject: DRASCULA: Fix random crash when loading pendulum scene savegame When saving from the pendulum scene the curX and curY values are negative while the curWidth and curHeight values are unset. This causes random crashes as we may do an array out of bound access when enterRoom() is called at the end of the load. --- engines/drascula/saveload.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'engines/drascula') diff --git a/engines/drascula/saveload.cpp b/engines/drascula/saveload.cpp index 9063fbc792..94c4e817ee 100644 --- a/engines/drascula/saveload.cpp +++ b/engines/drascula/saveload.cpp @@ -300,6 +300,16 @@ bool DrasculaEngine::loadGame(int slot) { if (!sscanf(currentData, "%d.ald", &roomNum)) { error("Bad save format"); } + + // When loading room 102 while being attached below the pendulum Some variables + // are not correctly set and can cause random crashes when calling enterRoom below. + // The crash occurs in moveCharacters() when accessing factor_red[curY + curHeight]. + if (roomNum == 102 && flags[1] == 2) { + curX = 103; + curY = 108; + curWidth = curHeight = 0; + } + enterRoom(roomNum); selectVerb(kVerbNone); -- cgit v1.2.3