[Scummvm-cvs-logs] CVS: scummvm/scumm bundle.cpp,1.6,1.7 bundle.h,1.3,1.4 imuse.cpp,2.10,2.11 sound.cpp,1.57,1.58

James Brown ender at users.sourceforge.net
Fri Dec 27 03:48:01 CET 2002


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

Modified Files:
	bundle.cpp bundle.h imuse.cpp sound.cpp 
Log Message:
Add skeleton music support for CMI (but codec not implemented)


Index: bundle.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/bundle.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- bundle.cpp	21 Oct 2002 13:23:24 -0000	1.6
+++ bundle.cpp	27 Dec 2002 11:47:00 -0000	1.7
@@ -221,7 +221,7 @@
 	return final_size;
 }
 
-int32 Bundle::decompressMusicSampleByName(char *name, int32 number, byte *comp_final) {
+int32 Bundle::decompressMusicSampleByName(char *name, int32 number, byte *comp_final, bool fuzzy=false) {
 	int32 final_size = 0, i;
 
 	if (!name) {
@@ -235,11 +235,18 @@
 	}
 
 	for (i = 0; i < _numMusicFiles; i++) {
-		if (!scumm_stricmp(name, _bundleMusicTable[i].filename)) {
-			final_size = decompressMusicSampleByIndex(i, number, comp_final);
-			return final_size;
-		}
+		if (fuzzy) // Fuzzy matching, only look at the first part of the song
+			if (strstr(_bundleMusicTable[i].filename, name) == _bundleMusicTable[i].filename) {
+				final_size = decompressMusicSampleByIndex(i, number, comp_final);
+				return final_size;
+			}
+		else
+			if (!scumm_stricmp(name, _bundleMusicTable[i].filename)) {
+				final_size = decompressMusicSampleByIndex(i, number, comp_final);
+				return final_size;
+			}
 	}
+	printf("Couldn't find sample %s\n", name);
 	return final_size;
 }
 
@@ -254,7 +261,7 @@
 	return _musicFile.readUint32BE();
 }
 
-int32 Bundle::getNumberOfMusicSamplesByName(char *name) {
+int32 Bundle::getNumberOfMusicSamplesByName(char *name, bool fuzzy = false) {
 	int32 number = 0, i;
 
 	if (_musicFile.isOpen() == false) {
@@ -263,11 +270,19 @@
 	}
 
 	for (i = 0; i < _numMusicFiles; i++) {
-		if (!scumm_stricmp(name, _bundleMusicTable[i].filename)) {
-			number = getNumberOfMusicSamplesByIndex(i);
-			return number;
-		}
+		if (fuzzy) // Fuzzy matching, only look at the first part of the song
+			if (strstr(_bundleMusicTable[i].filename, name) == _bundleMusicTable[i].filename) {
+				number = getNumberOfMusicSamplesByIndex(i);
+				return number;
+			}
+		else
+			if (!scumm_stricmp(name, _bundleMusicTable[i].filename)) {
+				number = getNumberOfMusicSamplesByIndex(i);
+				return number;
+			}
+
 	}
+	printf("Couldn't find numsample %s\n", name);
 	return number;
 }
 

Index: bundle.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/bundle.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- bundle.h	15 Sep 2002 19:28:34 -0000	1.3
+++ bundle.h	27 Dec 2002 11:47:00 -0000	1.4
@@ -60,10 +60,10 @@
 	bool openMusicFile(const char *filename, const char *directory);
 	int32 decompressVoiceSampleByName(char *name, byte *comp_final);
 	int32 decompressVoiceSampleByIndex(int32 index, byte *comp_final);
-	int32 decompressMusicSampleByName(char *name, int32 number, byte *comp_final);
+	int32 decompressMusicSampleByName(char *name, int32 number, byte *comp_final, bool fuzzy=false);
 	int32 decompressMusicSampleByIndex(int32 index, int32 number, byte *comp_final);
 	int32 getNumberOfMusicSamplesByIndex(int32 index);
-	int32 getNumberOfMusicSamplesByName(char *name);
+	int32 getNumberOfMusicSamplesByName(char *name, bool fuzzy=false);
 };
 
 #endif

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 2.10
retrieving revision 2.11
diff -u -d -r2.10 -r2.11
--- imuse.cpp	25 Dec 2002 12:34:50 -0000	2.10
+++ imuse.cpp	27 Dec 2002 11:47:00 -0000	2.11
@@ -4580,7 +4580,12 @@
 		switch (cmd) {
 		case 0: // play music (state)
 			debug(2, "IMuseDigital::doCommand 0x1000 (%d)", b);
-			if (_scumm->_gameId == GID_DIG) {
+			if (_scumm->_gameId == GID_CMI) {
+					char musicName[255];
+					sprintf(musicName, "%d-", b);
+					_scumm->_sound->playBundleMusic(strdup(musicName));
+					return 0;
+			} else if (_scumm->_gameId == GID_DIG) {
 				for(l = 0;; l++) {
 					if (_digStateMusicMap[l].room == -1) {
 						return 1;

Index: sound.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/sound.cpp,v
retrieving revision 1.57
retrieving revision 1.58
diff -u -d -r1.57 -r1.58
--- sound.cpp	26 Dec 2002 22:02:58 -0000	1.57
+++ sound.cpp	27 Dec 2002 11:47:00 -0000	1.58
@@ -961,10 +961,14 @@
 
 	if (_nameBundleMusic == NULL) {
 		// FIXME: we have MUSDISK1.BUN and MUSDISK2.BUN in COMI.
-		if (_scumm->_bundle->openMusicFile("digmusic.bun", _scumm->getGameDataPath()) == false) {
-			return;
+		if (_scumm->_gameId == GID_CMI) {
+			printf("Opening bundle\n");
+			if (_scumm->_bundle->openMusicFile("musdisk1.bun", _scumm->getGameDataPath()) == false)
+				return;
+		} else {
+			if (_scumm->_bundle->openMusicFile("digmusic.bun", _scumm->getGameDataPath()) == false)
+				return;
 		}
-
 		_musicBundleBufFinal = (byte*)malloc(OUTPUT_SIZE);
 		_musicBundleBufOutput = (byte*)malloc(10 * 0x2000);
 		_currentSampleBundleMusic = 0;
@@ -974,7 +978,7 @@
 		_musicBundleToBeRemoved = false;
 		_musicBundleToBeChanged = false;
 		_bundleMusicTrack = -1;
-		_numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByName(song);
+		_numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByName(song, (_scumm->_gameId == GID_CMI));
 		_nameBundleMusic = song;
 		_scumm->_timer->installProcedure(&music_handler, 1000);
 		return;
@@ -1023,7 +1027,7 @@
 
 	if (_musicBundleToBeChanged == true) {
 		_nameBundleMusic = _newNameBundleMusic;
-		_numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByName(_nameBundleMusic);
+		_numberSamplesBundleMusic = _scumm->_bundle->getNumberOfMusicSamplesByName(_nameBundleMusic, (_scumm->_gameId == GID_CMI));
 		_currentSampleBundleMusic = 0;
 		_offsetSampleBundleMusic = 0;
 		_offsetBufBundleMusic = 0;
@@ -1033,7 +1037,7 @@
 	ptr = _musicBundleBufOutput;
 
 	for (k = 0, l = _currentSampleBundleMusic; l < num; k++) {
-		length = _scumm->_bundle->decompressMusicSampleByName(_nameBundleMusic, l, (_musicBundleBufOutput + ((k * 0x2000) + _offsetBufBundleMusic)));
+		length = _scumm->_bundle->decompressMusicSampleByName(_nameBundleMusic, l, (_musicBundleBufOutput + ((k * 0x2000) + _offsetBufBundleMusic)), (_scumm->_gameId == GID_CMI));
 		_offsetSampleBundleMusic += length;
 
 		if (l == 0) {





More information about the Scummvm-git-logs mailing list