diff options
-rw-r--r-- | engines/zvision/detection_tables.h | 2 | ||||
-rw-r--r-- | engines/zvision/scripting/scr_file_handling.cpp | 17 | ||||
-rw-r--r-- | engines/zvision/zvision.h | 4 |
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); |