The feature will now only be active if the user enables
game-specific enhancements, instead of being
permanently enabled.
(cherry picked from commit fc372c278b)
Room 80 only contains a cutscene, where Indy and his father escape
from the zeppelin with the biplane. But it is started with
`cutscene()` instead of `cutscene([1])` which also disables the verb
interface.
The FM-TOWNS version doesn't like this and some verb leftovers were
mixed with the graphics. Adding the missing `[1]` parameter should fix
the issue.
Confirmed to also happen with the original interpreter under UNZ.
Most lines in this cutscene miss their color parameter, which makes
both actors speak with the same color, which is confusing since one of
them suddenly appeared, and you can barely see them.
(For some reason, the PC VGA version also misses the color parameters,
but it works there, maybe because there's some palette-shifting going
on, which has been mostly removed in the FM-TOWNS version?).
We can fix this by always giving an explicit color to Indy's and his
father's lines. But the lines are not attached to any actor, and it's
hard to determine who's who, especially if we want to support
translations too. Henry Sr. is the only one using a wait() instruction
in his sentence, and he's the only one saying "Junior", so we try to
detect that.
The Talkie version of Indy4 changed Kerner's line when he uses the phone
booth in New York (reusing some words from the research lab scene), but
the text doesn't match with the voice in most releases: he says Ubermann
but the text mentions Fritz, in the English version.
The 1994 Talkie Macintosh release fixed this line, so we can replicate
this later, official fix as an enhancement for all the English talkie
releases.
According to the manual, you can execute commands by clicking on the
sentence line. But this doesn't work with the v1 or v2 DOS versions,
even though it works with the C64 demo. This is because the verb script
doesn't for this, so we have to do that ourselves. This is loosely based
on how Zak McKracken does it.
The Ultimate Talkie edition of Monkey Island 2 has a small script error
when you try to sell back your hub cap or your pirate hat to the antique
dealer. It wasn't doing a comparison with the proper object number, and
so it would play a fallback line with no voice.
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.
The original game always hides this first frame behind the second one,
probably so that this cutscene never starts with some previous frame
leftovers (since this animation will repeat as long as you pick up the
wrong Grail).
This is a bit unfortunate, especially since it also makes Indy appear
older if he drinks from the real Grail. So, restore this first frame
and just reset any previously drawn object when starting this animation.
The fire animation is sped up along with the rest of the game while the
messenger nymph is flying. Slow it down to make it appear to run at
constant speed throughout the intro. This does not apply to the VGA
talkie version, because there the fire isn't animated.
In Indy 3, some palette overrides were sometimes necessary to deal
with the 16-color limitation of EGA. When porting the game to the
FM-TOWNS, the palette overrides for the Nazis guards in the corridors
of Castle Brunwald weren't removed, and so their uniforms would be
gray there, although they were properly colored in green in all the
other rooms, including the zeppelin maze.
The PC VGA version doesn't have this problem, since they did remove
this palette override there.
This prints the number of the real Grail object when counting from the
left in the final room with the knight in Indy3.
May be useful since there are many Grails, choosing the wrong one kills
you and makes you restart the 3 trials again, and the hints to find it
require the original manual and taking notes during the game.
When Guybrush interacts with Dread, Dread should turn and face him if
he's not already looking at him. But the original script forgot to do
this check on Bit[129] if Guybrush already met him, tries giving him
an object and then immediately talks to him.
Since Dread's movement is always done by 32 bytes of opcodes, we can
just skip that if its first drawObject() call was done although
Bit[129] was set.