Opened 11 years ago

Closed 11 years ago

Last modified 11 years ago

#3803 closed defect (fixed)

DOTT: Bernard impersonating LaVerne

Reported by: raziel- Owned by: fingolfin
Priority: low Component: Engine: SCUMM
Keywords: original Cc:
Game: Day of the Tentacle

Description

ScummVM 0.12.0svn (Jul 12 2008 07:07:53)
Features compiled in: Vorbis FLAC MP3 zLib MPEG2

For a good laugh (as it looks really hillarious) load
the provided savegame, "Walk to upstairs" and
"Use Fork with Gum with a Dime stuck in it".
Bernard will start saying:
"I'm not chewing gum with shoemarks in it"
with LaVerne's voice :-)

Day of the Tentacle (CD/English)

AmigaOS4
gcc version 4.0.2 (AmigaOS build 20051012)

Ticket imported from: #2016521. Ticket imported from: bugs/3803.

Attachments (1)

tentacle.s04 (31.0 KB ) - added by raziel- 11 years ago.
Walk upstairs

Download all attachments as: .zip

Change History (11)

by raziel-, 11 years ago

Attachment: tentacle.s04 added

Walk upstairs

comment:1 by sev-, 11 years ago

Raising priority. This bug is nice to get fixed before the release.

comment:2 by sev-, 11 years ago

Priority: normalhigh

comment:3 by salty-horse, 11 years ago

I confirm.
Also, clicking on the floor near the gum before using the fork on it plays the correct sound.

comment:4 by eriktorbjorn, 11 years ago

The problem happens with the original interpreter as well. The script is rather strange. Here's a fragment from it:

[01D2] (5D) } else if (dup[6] == 199) {
[01DD] (BA) talkActor(:sound:"It's REALLY stuck to the floor.",1)
[0212] (73) /* jump 216; */
[0215] (**) }
[0215] (5D) if (VAR_EGO == 3) {
[0220] (68) beginCutscene([2])
[0227] (BA) talkActor(:sound:"Way gross!",3)
[0246] (A9) wait.waitForMessage()
[0248] (67) endCutscene()
[0249] (BA) talkActor(:sound:"I'm not chewin' that!",3)
[0273] (73) } else {
[0276] (BA) talkActor(:sound:"I'm not chewing gum with shoe marks in it.",2)
[02B5] (**) }

So each time, it first requests to play "It's REALLY stuck ..." and then, *immediately* afterwards, "I'm not chewing gum ...". I haven't managed to figure out why it picks LaVerne's line sometimes, and in such a predictable way.

comment:5 by fingolfin, 11 years ago

It might be nice to get fixed, but since it also occurs in the original, I don't think it deserves prio 7; rather, normally "nice to get fixed" stuff is more like prio 3.

Torbjörn: Indeed, that script is it... actor 1 = Bernhard, actor 2 = LaVerne, actor 3 = Hoagie. So the LaVerne line is missing an "if VAR_EGO == 3". Suggested workaround: If we detect that particular talkActor call, only execute it if VAR_EGO==2. Are you up to that? :)

comment:6 by fingolfin, 11 years ago

Keywords: original added

comment:7 by eriktorbjorn, 11 years ago

Do we have any way of identifying that talkActor() call, other than by the text itself? If not, then I would only be able to do it for the English version.

Anyway, the odd thing is that the bug only seems to happen the *first* time you use the fork on the chewing gum, and only (?) if it's right after entering the room from the basement, or from upstairs. If I do something else to the gum first, or enter from another room, Bernard will say "It's REALLY stuck to the floor." in his own voice.

I don't know why it behaves this way.

comment:8 by sev-, 11 years ago

Priority: highlow

comment:9 by fingolfin, 11 years ago

OK, found the problem: The script is always doing 100% exactly the same: It firsts asks to print the text for Bernhard, then for Laverne. Normally, the first talkActor executes and thus blocks the second. However, in this particular savegame, what happens if you do "use fork on gum" is that Bernhard walks to the left, causing the camera to scroll. Then, when the first actorTalk is executed, the scrolling is not yet done. Then this code in CHARSET_1 aborts the talk:
if (_game.version >= 4 && _game.version <= 6) {
// Do nothing while the camera is moving
if ((camera._dest.x / 8) != (camera._cur.x / 8) || camera._cur.x != camera._last.x)
return;
}
which causes the second, normally hidden, actorTalk to take effect. It only happens when scrolling is involved.

So the bug really is that the script does not check for VAR_EGO==2 before issuing that second actorTalk. I commited a fix to the repos. It might not work in international versions if they changed the object numbering, but usually they don't; anyway, I'll check the german version later when I am back home.

comment:10 by fingolfin, 11 years ago

Owner: set to fingolfin
Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.