Opened 16 years ago

Closed 16 years ago

Last modified 8 months ago

#8233 closed patch

Zak&MM: Sound support

Reported by: SF/hoenicke Owned by: SF/jamieson630
Priority: normal Component: Engine: SCUMM
Keywords: Cc:
Game: Zak McKracken


This patch adds sound and music support for zak and
maniac mansion. The patch may break loom and other
games that are GF_OLD_BUNDLE if they are not using the
same format (is a GF_AFTER_V2 check needed?)

The patch consists of a small diff and two new files which
should be copied to the scumm subdirectory.

Known bugs:
When sound is idle there is a constant pulse.
The intro doesn't sound completely right (it doesn't
sound the same as my test program).
Sometimes sound samples are omitted.

Ticket imported from: #743121. Ticket imported from: patches/338.

Attachments (2) (8.8 KB) - added by SF/hoenicke 16 years ago.
sound patch archive
spk2wav.c (26.4 KB) - added by (none) 16 years ago.
spk2wav (or rather spk2dsp :)

Download all attachments as: .zip

Change History (12)

Changed 16 years ago by SF/hoenicke

Attachment: added

sound patch archive

comment:1 Changed 16 years ago by SF/khalek

yes a GF_AFTER_V2 check should be used,
another bug to add to your list...
when playing maniac when you press a button on the keypad
and it plays sound 64 I think ScummVM seems to lock up and
needs to be manually killed.

nice work though, will be great once all the bugs are sorted
out :)

comment:2 Changed 16 years ago by SF/khalek

ah keypad bit not related to sound patch at all it would
seem oops

comment:3 Changed 16 years ago by SF/jamieson630

Owner: set to SF/jamieson630

comment:4 Changed 16 years ago by SF/jamieson630

Fingolfin and I have been going over the source from which
this patch is based (thanks for all the info on your Web site,
Hoenicke). Due to the unusual pointer-based parameter
access used by the music scripts, this code is not endian-
safe. Furthermore, the fact that the pointers are treating a the
ChannelInfo struct as a flat array causes problems on
systems that align structure members differently. Finally,
some of the global arrays are generating more than 1,300
warnings under Microsoft Visual C++.

I'm going to go through the original source (NOT the patch)
and try to clean up the pointers and make everything endian-
safe (with Fingolfin's help). After we get the original utility
working across platforms, my recommendation is that the
functionality be encapsulated into the MidiDriver and
MidiParser classes we have now. The V2 games don't
necessarily have to go through iMuse (it might just
complicate things needlessly), but the waveform generator in
this code should be made available to post-V2 games such
as MI2, so that we can offer support for the 'SPK' PC-speaker-
based music resources therein.

Changed 16 years ago by (none)

Attachment: spk2wav.c added

spk2wav (or rather spk2dsp :)

comment:5 Changed 16 years ago by SF/hoenicke

Jamieson630: I think the problem you had with spk2wav.c and
AUTHENTIC_SOUND was that level wasn't declared static. I
fixed that now.

Also the freqmod_table should be uint8, which should fix most
of the warnings. The hulls array has both int16 and uint16
entries. Maybe some explicit casts will fix the warnings.

The channel_info struct should become an array with some
predefined constant indices to fix the struct-alignment issues.

I think only place where READ_LE_INT16 was missing is
execute_cmd() (several places, look for (int16*)script_ptr).

comment:6 Changed 16 years ago by fingolfin

Yeah we discussed all that last night (see #scummvm channel logs).
Jamieson already made a version which also works on my BE system
and fixes those issues, but he's asleep right now I guess (well I hope,
for his health :-)


comment:7 Changed 16 years ago by SF/hoenicke

To correct myself: freqmod_table must be signed, i.e. int8
I corrected spk2wav.cpp (which khalek published) and put it at

You only need to copy the array constants.

comment:8 Changed 16 years ago by SF/jamieson630

I've added the player to CVS. Any upgrades (I believe you
were working on loom script commands, Hoenicke?) can be
patched against that. I'll continue looking into doing a
MidiDriver encapsulation of this code.

comment:9 Changed 16 years ago by SF/jamieson630

Status: newclosed

comment:10 Changed 8 months ago by digitall

Component: Engine: SCUMM
Game: Zak McKracken
Note: See TracTickets for help on using tickets.