[Scummvm-cvs-logs] CVS: scummex resource.cpp,1.6,1.7
Adrien Mercier
yoshizf at users.sourceforge.net
Sat Sep 20 17:00:02 CEST 2003
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/simon simon.cpp,1.296,1.297
- Next message: [Scummvm-cvs-logs] CVS: scummex resource.cpp,1.7,1.8 scummex.cpp,1.8,1.9 sound.cpp,1.3,1.4 sound.h,1.2,1.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/scummvm/scummex
In directory sc8-pr-cvs1:/tmp/cvs-serv12606
Modified Files:
resource.cpp
Log Message:
Improved VOC support (now we get the correct size). Now we need a mixer (I was using SDL_Mixer for the tests but it's clearly not what we need).
Index: resource.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummex/resource.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- resource.cpp 19 Sep 2003 11:10:17 -0000 1.6
+++ resource.cpp 20 Sep 2003 23:59:07 -0000 1.7
@@ -201,11 +201,16 @@
int z = 0;
byte c;
char name[256];
- int numFiles, offset, number;
+ int numFiles, number = 0;
int bufindex;
uint blockOffset, blockSize;
byte temp[8];
+ int32 offset;
+ int16 code;
+ int len;
+ bool quit = 0;
+
strcpy(_blockTable[index].blockDescription, blocksInfo[_blockTable[index].blockTypeID].description);
switch(_blockTable[index].blockTypeID) {
@@ -762,20 +767,50 @@
break;
case Crea:
- _input.seek(23, SEEK_CUR);
- _input.read(temp, 3);
- _blockTable[index].blockSize = (temp[0] | (temp[1] << 8) | (temp[2] << 16)) - 2;
- _blockTable[index].blockSize += 28;
- number = _input.readByte();
- if (number == 0xa5 || number == 0xa6) {
- _blockTable[index].variables = 11025;
- } else if (number == 0xd2 || number == 0xd3) {
- _blockTable[index].variables = 22050;
- } else {
- _blockTable[index].variables = 1000000L / (256L - number);
- }
-
- _input.seek(_blockTable[index].offset + _blockTable[index].blockSize, SEEK_SET);
+ _input.seek(22, SEEK_CUR);
+ offset = 0;
+ code = 0;
+ while (!quit) {
+ code = _input.readByte();
+ switch(code) {
+ case 0: quit = 1; break;
+ case 1: {
+ _input.read(&temp, 3);
+ len = (temp[0] | (temp[1] << 8) | (temp[2] << 16));
+ int rate = _input.readByte();
+ _input.readByte();
+ len -= 2;
+ if (rate == 0xa5 || rate == 0xa6) {
+ _blockTable[index].variables = 11025;
+ } else if (rate == 0xd2 || rate == 0xd3) {
+ _blockTable[index].variables = 22050;
+ } else {
+ _blockTable[index].variables = 1000000L / (256L - rate);
+ }
+ // FIXME some FT samples (ex. 362) has bad length, 2 bytes too short
+ _input.seek(len, SEEK_CUR);
+ } break;
+ case 5:
+ _input.seek(4, SEEK_CUR);
+ quit = 1;
+ break;
+ case 6: // begin of loop
+ _input.read(&temp, 3);
+ len = (temp[0] | (temp[1] << 8) | (temp[2] << 16));
+ _input.seek(len, SEEK_CUR);
+ break;
+ case 7: // end of loop
+ _input.read(&temp, 3);
+ len = (temp[0] | (temp[1] << 8) | (temp[2] << 16));
+ _input.seek(len, SEEK_CUR);
+ break;
+ default:
+ quit = 1;
+ break;
+ }
+ }
+ number = _input.pos();
+ _blockTable[index].blockSize = number - _blockTable[index].offset;
_gui->add_tree_elements(_blockTable[index].blockName, index, level, _blockTable[index].blockTypeID);
index++;
break;
- Previous message: [Scummvm-cvs-logs] CVS: scummvm/simon simon.cpp,1.296,1.297
- Next message: [Scummvm-cvs-logs] CVS: scummex resource.cpp,1.7,1.8 scummex.cpp,1.8,1.9 sound.cpp,1.3,1.4 sound.h,1.2,1.3
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Scummvm-git-logs
mailing list