diff options
| author | Paweł Kołodziejski | 2002-10-11 08:35:12 +0000 | 
|---|---|---|
| committer | Paweł Kołodziejski | 2002-10-11 08:35:12 +0000 | 
| commit | 4cf42ae9a8fbd122f268e8eb9dcce088ee0522be (patch) | |
| tree | 579ed2b246c5142f1b91738da9de0fa59fe6c353 | |
| parent | fec2879a0788a3d1d6248f5f76f41f943ee93f40 (diff) | |
| download | scummvm-rg350-4cf42ae9a8fbd122f268e8eb9dcce088ee0522be.tar.gz scummvm-rg350-4cf42ae9a8fbd122f268e8eb9dcce088ee0522be.tar.bz2 scummvm-rg350-4cf42ae9a8fbd122f268e8eb9dcce088ee0522be.zip | |
added FT imuse music
svn-id: r5127
| -rw-r--r-- | scumm/imuse.cpp | 37 | ||||
| -rw-r--r-- | scumm/resource.cpp | 7 | ||||
| -rw-r--r-- | scumm/scumm.h | 3 | ||||
| -rw-r--r-- | scumm/scummvm.cpp | 3 | 
4 files changed, 46 insertions, 4 deletions
| diff --git a/scumm/imuse.cpp b/scumm/imuse.cpp index f5fda63dd8..b1e95b75ff 100644 --- a/scumm/imuse.cpp +++ b/scumm/imuse.cpp @@ -5555,7 +5555,7 @@ void IMuseDigital::stopAll() {  int32 IMuseDigital::doCommand(int a, int b, int c, int d, int e, int f, int g, int h) {  	byte cmd = a & 0xFF;  	byte param = a >> 8; -	int32 sample = b; +	int32 sample = b, r;  	byte sub_cmd = c >> 8;  	int8 channel = -1, l;  	int8 tmp; @@ -5652,13 +5652,12 @@ int32 IMuseDigital::doCommand(int a, int b, int c, int d, int e, int f, int g, i  		switch (cmd) {  		case 0: // play music (state)  			debug(1, "IMuseDigital::doCommand 0x1000 (%d)", b); -			return 0;  			if (_scumm->_gameId == GID_DIG) {  				for(l = 0;; l++) {  					if (_digStateMusicMap[l].room == -1) {  						return 1;  					} -					if ((_digStateMusicMap[l].room == b)) { +					if (_digStateMusicMap[l].room == b) {  						int16 music = _digStateMusicMap[l].table_index;  						debug(1, "Play imuse music: %s, %s, %s", _digStateMusicTable[music].name, _digStateMusicTable[music].title, _digStateMusicTable[music].filename);  						if (_digStateMusicTable[music].filename[0] != 0) { @@ -5668,6 +5667,22 @@ int32 IMuseDigital::doCommand(int a, int b, int c, int d, int e, int f, int g, i  					}  				}  			} else if (_scumm->_gameId == GID_FT) { +				for(l = 0;; l++) { +					if (_ftStateMusicTable[l].index == -1) { +						return 1; +					} +					if (_ftStateMusicTable[l].index == b) { +						debug(1, "Play imuse music: %s, %s", _ftStateMusicTable[l].name, _ftStateMusicTable[l].audioname); +						if (_ftStateMusicTable[l].audioname[0] != 0) { +							for(r = 0; r < _scumm->_numAudioNames; r++) { +								if (strcmp(_ftStateMusicTable[l].audioname, &_scumm->_audioNames[r * 9]) == 0) { +									startSound(r); +									doCommand(12, r, 1536, _ftStateMusicTable[l].volume, 0, 0, 0, 0); +								} +							} +						} +					} +				}  			}  			return 0;  		case 1: // play music (seq) @@ -5686,6 +5701,22 @@ int32 IMuseDigital::doCommand(int a, int b, int c, int d, int e, int f, int g, i  					}  				}  			} else if (_scumm->_gameId == GID_FT) { +				for(l = 0;; l++) { +					if (_ftSeqMusicTable[l].index == -1) { +						return 1; +					} +					if (_ftSeqMusicTable[l].index == b) { +						debug(1, "Play imuse music: %s, %s", _ftSeqMusicTable[l].name, _ftSeqMusicTable[l].audioname); +						if (_ftSeqMusicTable[l].audioname[0] != 0) { +							for(r = 0; r < _scumm->_numAudioNames; r++) { +								if (strcmp(_ftSeqMusicTable[l].audioname, &_scumm->_audioNames[r * 9]) == 0) { +									startSound(r); +									doCommand(12, r, 1536, _ftSeqMusicTable[l].volume, 0, 0, 0, 0); +								} +							} +						} +					} +				}  			}  			return 0;  		case 2: // dummy in DIG and CMI diff --git a/scumm/resource.cpp b/scumm/resource.cpp index 05d6cdd5a0..073d0f47eb 100644 --- a/scumm/resource.cpp +++ b/scumm/resource.cpp @@ -298,10 +298,15 @@ void Scumm::readIndexFile()  			break;  		case MKID('RNAM'): -		case MKID('ANAM'):  			_fileHandle.seek(itemsize - 8, SEEK_CUR);  			break; +		case MKID('ANAM'): +			_numAudioNames = _fileHandle.readWordLE(); +			_audioNames = (char*)malloc(_numAudioNames * 9); +			_fileHandle.read(_audioNames, _numAudioNames * 9); +			break; +  		case MKID('DROO'):  			readResTypeList(rtRoom, MKID('ROOM'), "room");  			break; diff --git a/scumm/scumm.h b/scumm/scumm.h index 33c973aa8a..da71ab1e1a 100644 --- a/scumm/scumm.h +++ b/scumm/scumm.h @@ -447,6 +447,9 @@ public:  	int _numCharsets, _numCostumes, _numNewNames, _numGlobalScripts;  	int NUM_ACTORS; +	char *_audioNames; +	int32 _numAudioNames; +  	/* Current objects - can go in their respective classes */  	byte _curActor;  	int _curVerb; diff --git a/scumm/scummvm.cpp b/scumm/scummvm.cpp index 9612a59b68..f7a1adbd7f 100644 --- a/scumm/scummvm.cpp +++ b/scumm/scummvm.cpp @@ -163,6 +163,7 @@ Scumm::Scumm (GameDetector *detector, OSystem *syst)  		_saveLoadCompatible = false;  	}  	loadLanguageBundle(); +	_audioNames = NULL;  }  Scumm::~Scumm () @@ -186,6 +187,8 @@ Scumm::~Scumm ()  		delete _imuseDigital;  	if (_existLanguageFile)  		delete _languageBuffer; +	if (_audioNames) +		delete _audioNames;  }  void Scumm::scummInit() | 
