Ended up fixing a fun little bug in ScummVM. This game was consistently cutting off voice lines in the middle, and I tracked it down to this line of Lingo code:
go (the frame) 0
Turns out ScummVM was being a bit too strict about types and the “correctness” of the call. I've found that's a pretty common problem working on this; Lingo is extremely loose with how you can call stuff, and it's very tolerant of "wrong" behaviour that would be an error in most languages. This isn't the first time I've had to make sure ScummVM was as lax as the original game.
go is a builtin function used to switch which "movie" or "frame" (different resource types) are currently active. There’s a few different ways you can call it. You can pass a single param that’s the name of a movie to switch to, like so:
go "e2"
Or you can go to a specific frame of the current movie:
go 16
Or to a frame of a movie:
go 16 “e2”
But a problem: ScummVM assumed that if it got two arguments, it was the frame-and-movie form. So if you tried to call:
go 16 0
It would throw an error because the movie reference wasn’t a string. What’s the original Director do? Turns out, if you give it two arguments that are both integers, it just silently discards the second one and treats it as though you’d passed a single number. So
go (the frame) 0
and
go (the frame)
Actually do the same thing as each other! It was a simple tweak to the body of ScummVM’s version of the go function, and no more type errors or incorrect jumps interrupting sound playback. Surprisingly easy fix, but effective.

