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 workaround fixed a complete scene hang that any user could
trigger during a legitimate gameplay, and there's no point in letting
users hang the game… (if you're really curious for it, you know how to
build ScummVM or how to run an original interpreter).
Also make it explicit that the bug also happens with DREAMM, while
there.
The full context is documented in the original ticket, but we still need
this workaround if one plays with subtitles and voices and a slow text
speed, and this is indeed an original script issue since the small glitch
with the fishing line also happens with the original interpreters.
Since we're fixing an original, non-game-breaking bug, this qualifies as
an enhancement that one can disable if they want to be as close as
possible to the original experience.
There was a nasty bug in the fuel tower room, when the cops arrive at the
tower and the player regains control, in which the camera would be brought up
and then down again.
While I was there, since this is the same domain, I rechecked the v7-8 camera
code from the disasm, made some corrections, and properly fixed#1195 and
#1579. Another workaround bites the dust :)
In the French release of Full Throttle, when Ben looks at one of the
small pictures above the piano, a strange "piano-low-kick" string
appears in the subtitle. Just drop it and replace it with the missing
characters in order to match what he's saying (as done in the 2017
remaster).
This workaround was originally meant to address the case in which derefActor was called with
an id == 0. Originally, a value of 0 triggered a range error. As a matter of fact, we (correctly) accept
actors id == 0 now, so this workaround is never being triggered.
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 3b05a52588, 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.
If Sam tries buying something at Snuckey's without any having money, Max
will not always have enough time to finish his comment on capitalism,
because the employee will say "Anything else?" without any call to
waitForMessage() to make sure that Max is done speaking. But good jokes
from Max should never be cut!
This would happen if Sam only picked up the pecan-flavored candies, for
example.
Guybrush can read the clock of Puerto Pollo, but this was only enabled
in the English, Italian and (fan-made) Russian releases, probably
because the result was poor for the other languages.
The German, French, Spanish, Brazilian Portuguese and CJK releases
disabled this feature, but the check was done in the interpreter, not in
the scripts. This replicates this original behavior.
Findings and ScummEngine_v7::actorTalk() change by AndywinXp.
You can't make George Washington leave the main hall without starting a
fire, but this fire can't be started if George Washington's is not
wearing the chattering teeth.
So, when he comes back to that room, he should be wearing them, but
this is not the case during the associated cutscene (he does wear them
if you talk to him outside, or come back to this room again after this
cutscene). So, force costume 69 (chattering teeth) instead of costume
53 (no chattering teeth) for George Washington in this script.
When Dr. Fred receives a new diamond, he's supposed to report the status
of Hoagie's and Laverne's units, but these talkActor() lines don't have
any associated wait.waitForMessage(), so they were unseen and unheard in
the game until now.
I couldn't find a way of only targeting the impacted lines, so this is
applied to every line from Dr. Fred in this part of the script.
This is a bug in the original interpreter, so the following workaround is marked as an enhancement.
When Guybrush gets on the Sea Cucumber for the first time and the monkeys show up on deck, if the ESC key is pressed before the "Any last words, Threepwood?" dialogue, the music will continue playing indefinitely throughout the game (or until another "sequence" music is played). To amend this, we intercept this exact script override and we force the playback of sound 2277, which is the iMUSE sequence which would have been played after the dialogue.
This workaround has been stress-tested on all Steam available languages + Akella Russian.
When Bruno and Trixie leave Bumpusville, a new actor is used for their
escape animation, but the original script never removes this actor from the
scene, so some parts of Bruno can still be seen on the wall when the door
closes. So we force the removal of this actor just before that.
This workaround happens in some cases when Bernard interacts with the
chewing gum on the floor, where he will speak using Laverne's voice. See
bug #3803 for details. I've re-verified that it happens in the original
as well.
The original commit containing the Pete Wheeler hotfix for the Baseball gmaes has caused a regression where batting with any other bat as Pete Wheeler would slow down his swinging animation after hitting the ball. Whoops. This fixes the regression by adding another check to determine whether he is bunting or not.
curRect.left is assigned in the script, and it is not modified. right is
assigned with the screen width - original left.
This results in bad highlighting of the verbs all over the line width,
instead of being limited to the actual string.
Due to that, sometimes the selection range of the up/down arrows overlaps
with some of the verbs, and then these verbs cannot be selected.
Solve by storing the original left value, and using it as initial x
position for the string (the actual right-to-left manipulation is done in
drawString()), and modify the value of curRect.left to match the string
that was actually drawn.
This bug is similar to the one that was fixed in 58e921eb87, but the
solution that was done there for v7 and v8 cannot work here, because the
string logic is much more complicated.
This workaround fixes a script bug in Backyard Baseball 2001 and 2003 where bunting a foul ball as Pete Wheeler may softlock the game if the ball goes far left or right field.
The original Backyard Baseball 1997 release does not seem to have this bug in my testing.
Instead of returning to the launcher, a game may now specify a list
of "chained" games and optional save slots. The first game is popped
from the list and started. Quitting still quits the entire ScummVM.
It seemed like the sensible thing to do.
Previously, we had a couple of arrays of size N (where N = number of
resource types), one for each attribute of a resource type (such as as
the number of resources of that type.
Now, we have one array of size N, whose elements are a record
aggregating all the attributes of each resource type.
MKID_BE relied on unspecified behavior of the C++ compiler,
and as such was always a bit unsafe. The new MKTAG macro
is slightly less elegant, but does no longer depend on the
behavior of the compiler.
Inspired by FFmpeg, which has an almost identical macro.