[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse_sndmgr.cpp,1.36,1.37

Pawel Kolodziejski aquadran at users.sourceforge.net
Sun Apr 25 12:53:04 CEST 2004


Update of /cvsroot/scummvm/scummvm/scumm/imuse_digi
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3611

Modified Files:
	dimuse_sndmgr.cpp 
Log Message:
- added workaround for strange regions length in some FT voc samples
- increased regions up to 70

Index: dimuse_sndmgr.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.cpp,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- dimuse_sndmgr.cpp	24 Apr 2004 20:41:30 -0000	1.36
+++ dimuse_sndmgr.cpp	25 Apr 2004 19:51:46 -0000	1.37
@@ -82,23 +82,31 @@
 void ImuseDigiSndMgr::prepareSound(byte *ptr, int slot) {
 	if (READ_UINT32(ptr) == MKID('Crea')) {
 		bool quit = false;
+		int len;
 
 		int32 offset = READ_LE_UINT16(ptr + 20);
 		int16 version = READ_LE_UINT16(ptr + 22);
 		int16 code = READ_LE_UINT16(ptr + 24);
-		assert(version == 0x010A || version == 0x0114);
-		assert(code == ~version + 0x1234);
 
-		_sounds[slot].region = (_region *)malloc(sizeof(_region) * 4);
+		_sounds[slot].region = (_region *)malloc(sizeof(_region) * 70);
 		_sounds[slot].jump = (_jump *)malloc(sizeof(_jump));
 		_sounds[slot].resPtr = ptr;
 		_sounds[slot].bits = 8;
 		_sounds[slot].channels = 1;
 
 		while (!quit) {
-			int len = READ_LE_UINT32(ptr + offset);
-			offset += 4;
+			len = READ_LE_UINT32(ptr + offset);
 			code = len & 0xFF;
+			if ((code != 0) && (code != 1) && (code != 6) && (code != 7)) {
+				// try again with 2 bytes forward (workaround for some FT sounds (ex.362, 363)
+				offset += 2;
+				len = READ_LE_UINT32(ptr + offset);
+				code = len & 0xFF;
+				if ((code != 0) && (code != 1) && (code != 6) && (code != 7)) {
+					error("Invalid code in VOC file : %d", code);
+				}
+			}
+			offset += 4;
 			len >>= 8;
 			switch(code) {
 			case 0:
@@ -132,7 +140,6 @@
 				quit = true;
 				break;
 			}
-			// FIXME some FT samples (ex. 362) has bad length, 2 bytes too short
 			offset += len;
 		}
 	} else if (READ_UINT32(ptr) == MKID('iMUS')) {





More information about the Scummvm-git-logs mailing list