From 2982792eb1498962db855f7213bc2306d24e73cb Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Sat, 30 Jun 2018 16:54:39 +0200 Subject: ZVISION: Add workaround for bug #10604 It was possible to render the game unplayable simply by looking at Jack's cigar box while waiting for him to return to examine the lamp. Note that this bug is only present in the DVD version. For whatever reason, it adds a dummy location for playing the cutscene. Applying the bugfix in the CD version actually breaks the game. --- engines/zvision/scripting/scr_file_handling.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'engines/zvision/scripting/scr_file_handling.cpp') diff --git a/engines/zvision/scripting/scr_file_handling.cpp b/engines/zvision/scripting/scr_file_handling.cpp index c8952cde01..cc845424c7 100644 --- a/engines/zvision/scripting/scr_file_handling.cpp +++ b/engines/zvision/scripting/scr_file_handling.cpp @@ -95,6 +95,23 @@ void ScriptManager::parsePuzzle(Puzzle *puzzle, Common::SeekableReadStream &stre // Fixes bug #6803. if (_engine->getGameId() == GID_NEMESIS && puzzle->key == 19398) puzzle->resultActions.push_back(new ActionAssign(_engine, 11, "19397, 0")); + + // WORKAROUND for bug #10604. If the player is looking at the + // cigar box when Antharia Jack returns to examine the lamp, + // pp1f_video_flag remains 1. Later, when the player returns + // to pick up the lantern, the game will try to play the + // cutscene again, but since that script has already been + // run the player gets stuck in a dark room instead. We have + // to add the assignment action to the front, or it won't be + // reached because changing the location terminates the script. + // + // Fixing it this way only keeps the bug from happening. It + // will not repair old savegames. + // + // Note that the bug only affects the DVD version. The CD + // version doesn't have a separate room for the cutscene. + else if (_engine->getGameId() == GID_GRANDINQUISITOR && (_engine->getFeatures() & GF_DVD) && puzzle->key == 10836) + puzzle->resultActions.push_front(new ActionAssign(_engine, 11, "10803, 0")); } else if (line.matchString("flags {", true)) { setStateFlag(puzzle->key, parseFlags(stream)); } -- cgit v1.2.3