aboutsummaryrefslogtreecommitdiff
path: root/sound.cpp
diff options
context:
space:
mode:
authorJames Brown2002-05-05 02:28:35 +0000
committerJames Brown2002-05-05 02:28:35 +0000
commit9f699a21a131b50042144d3fb93a29baaf942d6c (patch)
treef1ab8ca749f2b4735d6ef9cb321ef027d33c4606 /sound.cpp
parenteeda732b3698c5e487dd1006009d37ab2a71377d (diff)
downloadscummvm-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.cpp26
1 files changed, 21 insertions, 5 deletions
diff --git a/sound.cpp b/sound.cpp
index b503cc2fa6..a1cee8e314 100644
--- a/sound.cpp
+++ b/sound.cpp
@@ -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);