SCUMM: Make Dig crypt subtitle workaround an optional waitForActor()

When Low finds the meaning of the crypt inside the tomb, subtitles are
not printed because of a missing waitForActor() call. This also happens
in the original interpreters.

In Trac#4410 and commit 3b05a52588fc92885d7cae0c96be7eb516d27e5c, this
was implemented as an actor.cpp workaround, but doing it this way make
Low glide on the floor instead of having his usual walking animation.

Having him wait finishing his sentence before he moves to the crypt may
feel a bit odd too, but Low already does that in some other parts of the
game, and he just reacts at a very slow pace in general.

Moving this to o6_talkActor() also means that it's next to the other
waitForActor() workarounds, where we try to only target the impacted
lines when we can.

Also make this workaround use `_enableEnhancements` while there.
This commit is contained in:
Donovan Watteau 2022-10-06 23:03:39 +02:00 committed by Filippos Karapetis
parent e0b8678482
commit a16a1e57e2
3 changed files with 21 additions and 6 deletions

View File

@ -2915,11 +2915,8 @@ void ScummEngine_v7::actorTalk(const byte *msg) {
playSpeech((byte *)_lastStringTag);
if (!usingOldSystem) {
if (VAR(VAR_HAVE_MSG)) {
if (_game.id == GID_DIG && _roomResource == 58 && msg[0] == ' ' && !msg[1])
return;
if (VAR(VAR_HAVE_MSG))
stopTalk();
}
} else {
if (!_keepText)
stopTalk();

View File

@ -218,9 +218,9 @@ static const GameSettings gameVariantsTable[] = {
{"ft", "", 0, GID_FT, 7, 0, MDT_NONE, 0, UNK, GUIO2(GUIO_NOMIDI, GUIO_ORIGINALGUI)},
{"ft", "Demo", 0, GID_FT, 7, 0, MDT_NONE, GF_DEMO, UNK, GUIO2(GUIO_NOMIDI, GUIO_ORIGINALGUI)},
{"dig", "", 0, GID_DIG, 7, 0, MDT_NONE, 0, UNK, GUIO2(GUIO_NOMIDI, GUIO_ORIGINALGUI)},
{"dig", "", 0, GID_DIG, 7, 0, MDT_NONE, 0, UNK, GUIO3(GUIO_NOMIDI, GUIO_ENHANCEMENTS, GUIO_ORIGINALGUI)},
{"dig", "Demo", 0, GID_DIG, 7, 0, MDT_NONE, GF_DEMO, UNK, GUIO2(GUIO_NOMIDI, GUIO_ORIGINALGUI)},
{"dig", "Steam", "steam", GID_DIG, 7, 0, MDT_NONE, 0, UNK, GUIO2(GUIO_NOMIDI, GUIO_ORIGINALGUI)},
{"dig", "Steam", "steam", GID_DIG, 7, 0, MDT_NONE, 0, UNK, GUIO3(GUIO_NOMIDI, GUIO_ENHANCEMENTS, GUIO_ORIGINALGUI)},
{"comi", "", 0, GID_CMI, 8, 0, MDT_NONE, 0, Common::kPlatformWindows, GUIO3(GUIO_NOMIDI, GUIO_NOASPECT, GUIO_ORIGINALGUI)},
{"comi", "Demo", 0, GID_CMI, 8, 0, MDT_NONE, GF_DEMO, Common::kPlatformWindows, GUIO3(GUIO_NOMIDI, GUIO_NOASPECT, GUIO_ORIGINALGUI)},

View File

@ -2443,6 +2443,24 @@ void ScummEngine_v6::o6_talkActor() {
return;
}
}
// WORKAROUND bug #4410: Restore a missing subtitle when Low is inside the
// tomb and he finds the purpose of the crypt ("/TOMB.022/Now that I know
// what I'm looking for"...). Also happens in the original interpreters.
// We used to do this in actorTalk(), but then Low's proper walking
// animation was lost and he would just glide over the floor. Having him
// wait before he moves is less disturbing, since that's something he
// already does in the game.
if (_game.id == GID_DIG && _roomResource == 58 && vm.slot[_currentScript].number == 402
&& _actorToPrintStrFor == 3 && vm.localvar[_currentScript][0] == 0
&& readVar(0x8000 + 94) && readVar(0x8000 + 78) && !readVar(0x8000 + 97)
&& _scummVars[269] == 3 && getState(388) == 2 && _enableEnhancements) {
_forcedWaitForMessage = true;
_scriptPointer--;
return;
}
_scriptPointer += resStrLen(_scriptPointer) + 1;
}