[Scummvm-cvs-logs] CVS: scummvm/scumm/imuse_digi dimuse.cpp,1.99,1.100 dimuse_sndmgr.cpp,1.44,1.45 dimuse_sndmgr.h,1.24,1.25 dimuse_track.cpp,1.23,1.24

Pawel Kolodziejski aquadran at users.sourceforge.net
Tue Jun 1 12:37:49 CEST 2004


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

Modified Files:
	dimuse.cpp dimuse_sndmgr.cpp dimuse_sndmgr.h dimuse_track.cpp 
Log Message:
fix for imuse digi bug 952775

Index: dimuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse.cpp,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -d -r1.99 -r1.100
--- dimuse.cpp	28 May 2004 20:46:50 -0000	1.99
+++ dimuse.cpp	1 Jun 2004 19:32:36 -0000	1.100
@@ -140,7 +140,8 @@
 
 			track->soundHandle = _sound->openSound(track->soundId,
 									track->soundName, track->soundType,
-									track->volGroupId);
+									track->volGroupId, -1);
+			assert(track->soundHandle);
 			int32 streamBufferSize = track->iteration;
 			int	freq = _sound->getFreq(track->soundHandle);
 			track->stream2 = NULL;

Index: dimuse_sndmgr.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.cpp,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -d -r1.44 -r1.45
--- dimuse_sndmgr.cpp	23 May 2004 19:44:10 -0000	1.44
+++ dimuse_sndmgr.cpp	1 Jun 2004 19:32:36 -0000	1.45
@@ -219,7 +219,7 @@
 	return -1;
 }
 
-bool ImuseDigiSndMgr::openMusicBundle(int slot) {
+bool ImuseDigiSndMgr::openMusicBundle(int slot, int disk) {
 	bool result = false;
 
 	_sounds[slot].bundle = new BundleMgr(_cacheBundleDir);
@@ -228,13 +228,16 @@
 			result = _sounds[slot].bundle->openFile("music.bun", _vm->getGameDataPath());
 		} else {
 			char musicfile[20];
-			sprintf(musicfile, "musdisk%d.bun", _vm->VAR(_vm->VAR_CURRENTDISK));
-			if (_disk != _vm->VAR(_vm->VAR_CURRENTDISK)) {
+			if (disk == -1)
+				sprintf(musicfile, "musdisk%d.bun", _vm->VAR(_vm->VAR_CURRENTDISK));
+			else
+				sprintf(musicfile, "musdisk%d.bun", disk);
+//			if (_disk != _vm->VAR(_vm->VAR_CURRENTDISK)) {
 //				_vm->_imuseDigital->parseScriptCmds(0x1000, 0, 0, 0, 0, 0, 0, 0);
 //				_vm->_imuseDigital->parseScriptCmds(0x2000, 0, 0, 0, 0, 0, 0, 0);
 //				_vm->_imuseDigital->stopAllSounds();
-				_sounds[slot].bundle->closeFile();
-			}
+//				_sounds[slot].bundle->closeFile();
+//			}
 
 			result = _sounds[slot].bundle->openFile(musicfile, _vm->getGameDataPath());
 
@@ -250,7 +253,7 @@
 	return result;
 }
 
-bool ImuseDigiSndMgr::openVoiceBundle(int slot) {
+bool ImuseDigiSndMgr::openVoiceBundle(int slot, int disk) {
 	bool result = false;
 
 	_sounds[slot].bundle = new BundleMgr(_cacheBundleDir);
@@ -259,13 +262,16 @@
 			result = _sounds[slot].bundle->openFile("voice.bun", _vm->getGameDataPath());
 		} else {
 			char voxfile[20];
-			sprintf(voxfile, "voxdisk%d.bun", _vm->VAR(_vm->VAR_CURRENTDISK));
-			if (_disk != _vm->VAR(_vm->VAR_CURRENTDISK)) {
+			if (disk == -1)
+				sprintf(voxfile, "voxdisk%d.bun", _vm->VAR(_vm->VAR_CURRENTDISK));
+			else
+				sprintf(voxfile, "voxdisk%d.bun", disk);
+//			if (_disk != _vm->VAR(_vm->VAR_CURRENTDISK)) {
 //				_vm->_imuseDigital->parseScriptCmds(0x1000, 0, 0, 0, 0, 0, 0, 0);
 //				_vm->_imuseDigital->parseScriptCmds(0x2000, 0, 0, 0, 0, 0, 0, 0);
 //				_vm->_imuseDigital->stopAllSounds();
-				_sounds[slot].bundle->closeFile();
-			}
+//				_sounds[slot].bundle->closeFile();
+//			}
 
 			result = _sounds[slot].bundle->openFile(voxfile, _vm->getGameDataPath());
 
@@ -281,7 +287,7 @@
 	return result;
 }
 
-ImuseDigiSndMgr::soundStruct *ImuseDigiSndMgr::openSound(int32 soundId, const char *soundName, int soundType, int volGroupId) {
+ImuseDigiSndMgr::soundStruct *ImuseDigiSndMgr::openSound(int32 soundId, const char *soundName, int soundType, int volGroupId, int disk) {
 	assert(soundId >= 0);
 	assert(soundType);
 
@@ -309,9 +315,9 @@
 		} else if (soundType == IMUSE_BUNDLE) {
 			bool header_outside = ((_vm->_gameId == GID_CMI) && !(_vm->_features & GF_DEMO));
 			if (volGroupId == IMUSE_VOLGRP_VOICE)
-				result = openVoiceBundle(slot);
+				result = openVoiceBundle(slot, disk);
 			else if (volGroupId == IMUSE_VOLGRP_MUSIC)
-				result = openMusicBundle(slot);
+				result = openMusicBundle(slot, disk);
 			else
 				error("ImuseDigiSndMgr::openSound() Don't know how load sound: %d", soundId);
 			if (!result) {
@@ -329,9 +335,9 @@
 		if (soundType == IMUSE_BUNDLE) {
 			bool header_outside = ((_vm->_gameId == GID_CMI) && !(_vm->_features & GF_DEMO));
 			if (volGroupId == IMUSE_VOLGRP_VOICE)
-				result = openVoiceBundle(slot);
+				result = openVoiceBundle(slot, disk);
 			else if (volGroupId == IMUSE_VOLGRP_MUSIC)
-				result = openMusicBundle(slot);
+				result = openMusicBundle(slot, disk);
 			else
 				error("ImuseDigiSndMgr::openSound() Don't know how load sound: %d", soundId);
 			if (!result) {
@@ -353,6 +359,7 @@
 			closeSound(&_sounds[slot]);
 			return NULL;
 		}
+		_sounds[slot].disk = _disk;
 		prepareSound(ptr, slot);
 		return &_sounds[slot];
 	}
@@ -378,7 +385,7 @@
 ImuseDigiSndMgr::soundStruct *ImuseDigiSndMgr::cloneSound(soundStruct *soundHandle) {
 	assert(soundHandle && checkForProperHandle(soundHandle));
 
-	return openSound(soundHandle->soundId, soundHandle->name, soundHandle->type, soundHandle->volGroupId);
+	return openSound(soundHandle->soundId, soundHandle->name, soundHandle->type, soundHandle->volGroupId, soundHandle->disk);
 }
 
 bool ImuseDigiSndMgr::checkForProperHandle(soundStruct *soundHandle) {

Index: dimuse_sndmgr.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_sndmgr.h,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -d -r1.24 -r1.25
--- dimuse_sndmgr.h	11 Apr 2004 14:48:50 -0000	1.24
+++ dimuse_sndmgr.h	1 Jun 2004 19:32:36 -0000	1.25
@@ -83,6 +83,7 @@
 		BundleMgr *bundle;
 		int type;
 		int volGroupId;
+		int disk;
 	};
 
 private:
@@ -97,8 +98,8 @@
 	byte _disk;
 	BundleDirCache *_cacheBundleDir;
 
-	bool openMusicBundle(int slot);
-	bool openVoiceBundle(int slot);
+	bool openMusicBundle(int slot, int disk);
+	bool openVoiceBundle(int slot, int disk);
 
 	void countElements(byte *ptr, int &numRegions, int &numJumps, int &numSyncs);
 
@@ -107,7 +108,7 @@
 	ImuseDigiSndMgr(ScummEngine *scumm);
 	~ImuseDigiSndMgr();
 
-	soundStruct *openSound(int32 soundId, const char *soundName, int soundType, int volGroupId);
+	soundStruct *openSound(int32 soundId, const char *soundName, int soundType, int volGroupId, int disk);
 	void closeSound(soundStruct *soundHandle);
 	soundStruct *cloneSound(soundStruct *soundHandle);
 

Index: dimuse_track.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse_digi/dimuse_track.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -d -r1.23 -r1.24
--- dimuse_track.cpp	28 May 2004 20:46:50 -0000	1.23
+++ dimuse_track.cpp	1 Jun 2004 19:32:36 -0000	1.24
@@ -115,7 +115,7 @@
 			} else {
 				track->souStream = false;
 				strcpy(track->soundName, soundName);
-				track->soundHandle = _sound->openSound(soundId, soundName, soundType, volGroupId);
+				track->soundHandle = _sound->openSound(soundId, soundName, soundType, volGroupId, -1);
 
 				if (track->soundHandle == NULL)
 					return;
@@ -297,6 +297,7 @@
 		strcpy(fadeTrack->soundName, track->soundName);
 		fadeTrack->soundType = track->soundType;
 		fadeTrack->soundHandle = _sound->cloneSound(track->soundHandle);
+		assert(fadeTrack->soundHandle);
 	}
 
 	fadeTrack->volFadeDelay = fadeDelay;





More information about the Scummvm-git-logs mailing list