Fix Dig bundle 'clicking'

svn-id: r4197
This commit is contained in:
James Brown 2002-05-05 01:54:06 +00:00
parent ab0401242e
commit eeda732b36
2 changed files with 21 additions and 5 deletions

View File

@ -393,6 +393,7 @@ Credits:
Jonathan 'khalek' - Expert weaver in the Loom
Nicolas Noble - Config file support
Pawel Kolodziejski - Added missing Dig SMUSH codecs
Felix Jakschitsc - His hard work on Zak256
And to all the contributors, users, and beta testers we've missed.
Thanks!

View File

@ -684,7 +684,7 @@ typedef struct {int offset, size, codec;} COMP_table;
void Scumm::decompressBundleSound(int index) {
int i, z;
COMP_table table[50];
static unsigned char *CompInput, *CompOutput, *CompFinal;
unsigned char *CompInput, *CompOutput, *CompFinal, *Final;
int outputSize, finalSize;
fileSeek(_sfxFile, bundle_table[index].offset, SEEK_SET);
@ -759,10 +759,25 @@ void Scumm::decompressBundleSound(int index) {
free(CompOutput); CompOutput= NULL;
}
/* FIXME: This is nasty. We are actually sending the whole
decompressed packet to the mixer.. but the packet
actually contains further subblocks! (eg, sync) */
_mixer->play_raw(NULL, CompFinal, finalSize, 22050, SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE);
{ /* Parse decompressed data */
byte *ptr = CompFinal;
int tag, size;
tag = READ_BE_UINT32(ptr); ptr+=4;
if (tag != 'iMUS') {
warning("Decompression of bundle sound failed");
free(CompFinal);
return;
}
size = READ_BE_UINT32(ptr); ptr+=4;
tag = READ_BE_UINT32(ptr); ptr+=4;
size = READ_BE_UINT32(ptr); ptr+=size+4;
tag = READ_BE_UINT32(ptr); ptr+=4;
size = READ_BE_UINT32(ptr); ptr+=4;
Final = (unsigned char *)malloc(size);
memcpy(&Final[0], &ptr[0], size);
_mixer->play_raw(NULL, Final, size, 22050, SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE);
free(CompFinal);
}
}
void Scumm::playBundleSound(char *sound)