SCUMM: Fix randomly unreachable fire in DOTT (WORKAROUND)

In DOTT, script 13-21 calls `startScript(1,106,[91,5])` when Jefferson
builds the fire, but this script continuously changes the state of the
fire object to a random value between 1 and 5 (this stops when you exit
his room), and so if Hoagie tries interacting with it, he'll say "I
can't reach it." instead of the intended "No. Fire bad." line, most of
the time.  This also happens with the original DOS interpreter, the
2002 Aaron Giles Windows interpreter, and the Remastered version.

Ignoring this script fixes this problem and it doesn't seem to cause any
regression with the fire itself. My hypothesis is that the game designers
wanted to have an "early fire" animation when the fire has just been lit
by Jefferson, but then they dropped the idea and used the same unique fire
animation but forgot to turn off this script.
This commit is contained in:
Donovan Watteau 2022-06-14 17:42:40 +02:00 committed by Filippos Karapetis
parent d988cd7398
commit 96a800ef5c

View File

@ -739,6 +739,21 @@ void ScummEngine_v6::o6_startScript() {
script = pop();
flags = pop();
// WORKAROUND: In DOTT, when Jefferson builds the fire, `startScript(1,106,[91,5])`
// is called, which randomly changes the state of the fire object between 1 and 5,
// as long as Hoagie doesn't exit this room. This makes him randomly fail
// interacting with it, saying "I can't reach it." instead of the intended "No.
// Fire bad." line. It looks like the 1-5 states for the fire object are useless
// leftovers which can be safely ignored in order to make sure that Hoagie's
// comment is always available (maybe the fire was meant to be displayed
// differently when it's just been lit, but then the idea was dropped?).
// This also happens with the original interpreters and with the remaster.
if (_game.id == GID_TENTACLE && _roomResource == 13 &&
vm.slot[_currentScript].number == 21 && script == 106 &&
args[0] == 91 && _enableEnhancements) {
return;
}
// WORKAROUND for a bug also present in the original EXE: After greasing (or oiling?)
// the cannonballs in the Plunder Town Theater, during the juggling show, the game
// cuts from room 18 (backstage) to room 19 (stage).