mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-11 21:55:27 +00:00
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:
parent
e0b8678482
commit
a16a1e57e2
@ -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();
|
||||
|
@ -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)},
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user