diff options
| author | Travis Howell | 2002-10-28 08:46:35 +0000 |
|---|---|---|
| committer | Travis Howell | 2002-10-28 08:46:35 +0000 |
| commit | 2e027179e030600a58ee84cd52780b201f817232 (patch) | |
| tree | 56a649a103e2ce3c647475fb7547aed843743655 | |
| parent | 821798ad8d67ea0218de25b7ffc8da7c181e3a57 (diff) | |
| download | scummvm-rg350-2e027179e030600a58ee84cd52780b201f817232.tar.gz scummvm-rg350-2e027179e030600a58ee84cd52780b201f817232.tar.bz2 scummvm-rg350-2e027179e030600a58ee84cd52780b201f817232.zip | |
Fixes for voc support in simon 1 dos talkie, part of patch #629555
svn-id: r5340
| -rw-r--r-- | simon/simon.cpp | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/simon/simon.cpp b/simon/simon.cpp index 3f005e414d..c13288c28e 100644 --- a/simon/simon.cpp +++ b/simon/simon.cpp @@ -4727,11 +4727,12 @@ struct VocHeader { uint16 datablock_offset; uint16 version; uint16 id; - uint8 blocktype; } GCC_PACK; struct VocBlockHeader { - uint8 tc; + uint8 blocktype; + uint8 size[3]; + uint8 sr; uint8 pack; } GCC_PACK; @@ -4791,12 +4792,10 @@ void SimonState::playVoice(uint voice) return; } - _voice_file->read(&size, 4); - size = size & 0xffffff; - _voice_file->seek(-1, SEEK_CUR); _voice_file->read(&voc_block_hdr, sizeof(voc_block_hdr)); - uint32 samples_per_sec = 1000000L / (256L - (long)voc_block_hdr.tc); + size = voc_block_hdr.size[0] + (voc_block_hdr.size[1] << 8) + (voc_block_hdr.size[2] << 16) - 2; + uint32 samples_per_sec = 1000000L / (256L - (long)voc_block_hdr.sr); byte *buffer = (byte *)malloc(size); _voice_file->read(buffer, size); @@ -4824,14 +4823,10 @@ void SimonState::playSound(uint sound) return; } - _effects_file->read(&size, 4); - // FIXME - do we really want to read a block of 4 bytes, ignoring endian issues? - printf("FOO %08x / %d (please report this to Fingolfin)\n", size, size & 0xffffff); - size = size & 0xffffff; - _effects_file->seek(-1, SEEK_CUR); _effects_file->read(&voc_block_hdr, sizeof(voc_block_hdr)); - uint32 samples_per_sec = 1000000L / (256L - (long)voc_block_hdr.tc); + size = voc_block_hdr.size[0] + (voc_block_hdr.size[1] << 8) + (voc_block_hdr.size[2] << 16) - 2; + uint32 samples_per_sec = 1000000L / (256L - (long)voc_block_hdr.sr); byte *buffer = (byte *)malloc(size); _effects_file->read(buffer, size); |
