Opened 11 years ago

Closed 11 years ago

#4027 closed defect (fixed)

DW2: Voices cut off

Reported by: lordhoto Owned by: dreammaster
Priority: high Component: Engine: Tinsel
Keywords: Cc:
Game: Discworld II

Description

Using r35291 on Linux/amd64 compiled with gcc 4.3.2. Game version: Discworld 2 German

Sometimes the end of speech from characters is just cut off.

I attached a savegame to reproduce the issue. Just use the death certificate on the door on the left side and wait till the club members will sing their anthem. The "verehren" at the end of the first verse is just cut off.

Ticket imported from: #2412336. Ticket imported from: bugs/4027.

Attachments (1)

dw2.024 (2.4 KB ) - added by lordhoto 11 years ago.
Savegame (from German version) named "Totenschein (Bug report!)"

Download all attachments as: .zip

Change History (10)

by lordhoto, 11 years ago

Attachment: dw2.024 added

Savegame (from German version) named "Totenschein (Bug report!)"

comment:1 by sev-, 11 years ago

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

comment:2 by sev-, 11 years ago

Owner: changed from DrMcCoy to dreammaster
Priority: normalhigh

comment:3 by dreammaster, 11 years ago

Whilst I appreciate people's confidence in my abilities, I'm afraid that I can't fix all Discworld related bugs. In regards to this bug, I don't have a copy of the German version of the game - the savegames are interchangable across language versions, but the English version doesn't exhibit this problem. I'm thus de-assigning myself from this bug.

My own gut feeling, though, is that like several other listed bugs, this is a script glitch in the German version of the game. I'm going to get technical below, in the hopes that it may be useful to someone with the German version of the game..

The way things work in this cutscene, probably, is that one script calls a 'PLAY' or 'SPLAY' command on each character to do the special animation for the singing, and also starts playing the appropriate voice sample. Now, there are two ways the sound could be cut off:

First, if the animation length is played out, and then the sound stopped. In this case, the problem would be that the animation of the characters moving (as well as their lips), isn't long enough for the German version - they probably didn't change the lip-syncing from the English version. The solution in that case will be to create a work-around that adds a check in the German version in the sound stop routine if it's the given script at the given offset, then do a CORO_SLEEP until the sound is actually finished. This would mean that the characters would freeze briefly, but since it's only a single word, it shouldn't matter much.

The other possibility is that an controlling 'cut-scene' script uses a specific 'WAITTIME' amount, and then kills off both the animation and sound sample at the same time, in which case, it might be possible to increase the wait amount for the German version, if it's the given script hCode and 'ip' offset.

In either case, someone with the German version of the game will have to experiment with the script execution in pcode and tinlib.cpp, and see if they can identify the script that stops the sound playing prematurely - it may hopefully be a simple case of identifying the routine that stops a currently playing sound sample (can't remember what it might be off the top of my head), and from there working back on the stack to identify the script routine (see the INT_CONTEXT.hCode property for the unique Id of the script, and the 'ip' for the current offset in the script).

From there, you would then need to replay the game with a breakpoint set for that particular 'hCode', and trace through the earlier library routine calls of that srcipt to try and identify a call to either a wait opcode or a PLAY/SPLAY opcode just prior to the call to stop the sound sample. Once found, you'd know which scenario it is, and then be able to put in place a workaround for this specific bug.

comment:4 by dreammaster, 11 years ago

Owner: dreammaster removed

comment:5 by sev-, 11 years ago

Owner: set to dreammaster

comment:6 by sev-, 11 years ago

Owner: dreammaster removed

comment:7 by dreammaster, 11 years ago

I had a look into this somewhat further. The singing is accomplished by a standard call to the TalkOrSay method (the same as normal voice samples). The TalkOrSay method loops until the voice sample is finished.

What this means is that the issue here is that the 'verehren' is more than likely physically not present in the voice sample in the German version. So it won't be able to be fixed

comment:8 by lordhoto, 11 years ago

Owner: set to dreammaster
Resolution: fixed
Status: newclosed

comment:9 by lordhoto, 11 years ago

Fixed in trunk with r43120, dreammaster came up with that one, thus I'm assigning it to him.

Note: See TracTickets for help on using tickets.