aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTorbjörn Andersson2018-06-30 16:54:39 +0200
committerEugene Sandulenko2018-07-29 09:48:19 +0200
commit2982792eb1498962db855f7213bc2306d24e73cb (patch)
treef6dd0ab47887bdb18b5baa0c456554d8b3818dd2
parent8120a22a40ae0ae330c3306bf6543bb8895551bd (diff)
downloadscummvm-rg350-2982792eb1498962db855f7213bc2306d24e73cb.tar.gz
scummvm-rg350-2982792eb1498962db855f7213bc2306d24e73cb.tar.bz2
scummvm-rg350-2982792eb1498962db855f7213bc2306d24e73cb.zip
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.
-rw-r--r--engines/zvision/detection_tables.h2
-rw-r--r--engines/zvision/scripting/scr_file_handling.cpp17
-rw-r--r--engines/zvision/zvision.h4
3 files changed, 22 insertions, 1 deletions
diff --git a/engines/zvision/detection_tables.h b/engines/zvision/detection_tables.h
index cb813e6d5b..32c51040b7 100644
--- a/engines/zvision/detection_tables.h
+++ b/engines/zvision/detection_tables.h
@@ -246,7 +246,7 @@ static const ZVisionGameDescription gameDescriptions[] = {
AD_ENTRY1s("SCRIPTS.ZFS", "03157a3399513bfaaf8dc6d5ab798b36", 8433326),
Common::EN_ANY,
Common::kPlatformWindows,
- ADGF_NO_FLAGS,
+ GF_DVD,
GUIO4(GAMEOPTION_ORIGINAL_SAVELOAD, GAMEOPTION_DOUBLE_FPS, GAMEOPTION_DISABLE_ANIM_WHILE_TURNING, GAMEOPTION_USE_HIRES_MPEG_MOVIES)
},
GID_GRANDINQUISITOR
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));
}
diff --git a/engines/zvision/zvision.h b/engines/zvision/zvision.h
index 5df8e820c3..2ada66c45d 100644
--- a/engines/zvision/zvision.h
+++ b/engines/zvision/zvision.h
@@ -92,6 +92,10 @@ enum ZVisionGameId {
GID_GRANDINQUISITOR = 2
};
+enum ZVisionFeatures {
+ GF_DVD = (1 << 0) // ZGI DVD version
+};
+
class ZVision : public Engine {
public:
ZVision(OSystem *syst, const ZVisionGameDescription *gameDesc);