[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse.cpp,1.3,1.4 dimuse.h,1.4,1.5 dimuse_sndmgr.cpp,1.5,1.6

Pawel Kolodziejski aquadran at users.sourceforge.net
Tue Jan 6 21:59:01 CET 2004


Update of /cvsroot/scummvm/scummvm/scumm/imuse_digi
In directory sc8-pr-cvs1:/tmp/cvs-serv4594

Modified Files:
	dimuse.cpp dimuse.h dimuse_sndmgr.cpp 
Log Message:
handle jumps

Index: dimuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.cpp,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- dimuse.cpp	7 Jan 2004 05:17:51 -0000	1.3
+++ dimuse.cpp	7 Jan 2004 05:58:12 -0000	1.4
@@ -188,13 +188,30 @@
 	}
 }
 
+int IMuseDigital::checkJumpByRegion(int track, int region) {
+	int num_jumps = _sound->getNumJumps(_track[track].soundHandle);
+	for (int l = 0; l < num_jumps; l++) {
+		return _sound->getJumpDestRegionId(_track[track].soundHandle, l);
+	}
+	return -1;
+}
+
 void IMuseDigital::switchToNextRegion(int track) {
-	// TODO - finish
 	int num_regions = _sound->getNumRegions(_track[track].soundHandle);
+	int num_jumps = _sound->getNumJumps(_track[track].soundHandle);
+	if ((_scumm->_gameId == GID_FT) && (num_jumps != 0)) {
+		_track[track].regionOffset = 0;
+		return;
+	}
+
 	if (++_track[track].curRegion == num_regions) {
 		_track[track].toBeRemoved = true;
 		return;
 	}
+
+	int region = checkJumpByRegion(track, _track[track].curRegion);
+	if (region != -1)
+		_track[track].curRegion = region;
 	_track[track].regionOffset = 0;
 }
 
@@ -503,8 +520,8 @@
 					if (_ftSeqMusicTable[l].audioname[0] != 0) {
 						for (r = 0; r < _scumm->_numAudioNames; r++) {
 							if (strcmp(_ftSeqMusicTable[l].audioname, &_scumm->_audioNames[r * 9]) == 0) {
-								startMusic(r);
-								parseScriptCmds(12, r, 0x600, _ftSeqMusicTable[l].volume, 0, 0, 0, 0);
+//								startMusic(r);
+//								parseScriptCmds(12, r, 0x600, _ftSeqMusicTable[l].volume, 0, 0, 0, 0);
 							}
 						}
 					}

Index: dimuse.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- dimuse.h	7 Jan 2004 05:17:51 -0000	1.4
+++ dimuse.h	7 Jan 2004 05:58:12 -0000	1.5
@@ -76,6 +76,7 @@
 	static void timer_handler(void *refConf);
 	void callback();
 	void switchToNextRegion(int track);
+	int checkJumpByRegion(int track, int region);
 	void startSound(int soundId, const char *soundName, int soundType, int soundGroup, AudioStream *input);
 
 public:

Index: dimuse_sndmgr.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- dimuse_sndmgr.cpp	7 Jan 2004 04:50:38 -0000	1.5
+++ dimuse_sndmgr.cpp	7 Jan 2004 05:58:12 -0000	1.6
@@ -46,7 +46,7 @@
 
 void ImuseDigiSndMgr::prepareSound(byte *ptr, int slot) {
 	if (READ_UINT32(ptr) == MKID('Crea')) {
-		int size, rate, loops;
+		int size = 0, rate = 0, loops = 0;
 		_sounds[slot].resPtr = readVOCFromMemory(ptr, size, rate, loops);
 		_sounds[slot].freeResPtr = true;
 		_sounds[slot].bits = 8;
@@ -54,7 +54,8 @@
 		_sounds[slot].channels = 1;
 		_sounds[slot].region[0].length = size;
 		_sounds[slot].numRegions++;
-		_sounds[slot].numJumps++;
+		if (loops != 0)
+			_sounds[slot].numJumps++;
 	} else if (READ_UINT32(ptr) == MKID('iMUS')) {
 		uint32 tag;
 		int32 size = 0;





More information about the Scummvm-git-logs mailing list