diff options
author | James Brown | 2002-05-05 02:28:35 +0000 |
---|---|---|
committer | James Brown | 2002-05-05 02:28:35 +0000 |
commit | 9f699a21a131b50042144d3fb93a29baaf942d6c (patch) | |
tree | f1ab8ca749f2b4735d6ef9cb321ef027d33c4606 /sound.cpp | |
parent | eeda732b3698c5e487dd1006009d37ab2a71377d (diff) | |
download | scummvm-rg350-9f699a21a131b50042144d3fb93a29baaf942d6c.tar.gz scummvm-rg350-9f699a21a131b50042144d3fb93a29baaf942d6c.tar.bz2 scummvm-rg350-9f699a21a131b50042144d3fb93a29baaf942d6c.zip |
Make the bundle parser code a little cleaner :)
svn-id: r4198
Diffstat (limited to 'sound.cpp')
-rw-r--r-- | sound.cpp | 26 |
1 files changed, 21 insertions, 5 deletions
@@ -768,11 +768,27 @@ void Scumm::decompressBundleSound(int index) { 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; + + ptr+=12; /* Skip header */ + while(tag != 'DATA') { + tag = READ_BE_UINT32(ptr); ptr+=4; + switch(tag) { + case 'FRMT': + case 'TEXT': + case 'REGN': + case 'STOP': + size = READ_BE_UINT32(ptr); ptr+=size+4; + break; + + case 'DATA': + size = READ_BE_UINT32(ptr); ptr+=4; + break; + + default: + error("Unknown bundle header %c%c%c%c", tag>>24, tag>>16, tag>>8, tag); + } + } + Final = (unsigned char *)malloc(size); memcpy(&Final[0], &ptr[0], size); _mixer->play_raw(NULL, Final, size, 22050, SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE); |