diff options
| -rw-r--r-- | engines/scumm/he/sound_he.cpp | 23 | 
1 files changed, 14 insertions, 9 deletions
| diff --git a/engines/scumm/he/sound_he.cpp b/engines/scumm/he/sound_he.cpp index 5f162defb0..873e6ef77e 100644 --- a/engines/scumm/he/sound_he.cpp +++ b/engines/scumm/he/sound_he.cpp @@ -370,11 +370,11 @@ void Sound::playHESound(int soundID, int heOffset, int heChannel, int heFlags) {  			strcpy(buf, buf1);  		}  		if (musicFile.open(buf) == false) { -			warning("playSound: Can't open music file %s", buf); +			warning("playHESound: Can't open music file %s", buf);  			return;  		}  		if (!getHEMusicDetails(soundID, music_offs, size)) { -			debug(0, "playSound: musicID %d not found", soundID); +			debug(0, "playHESound: musicID %d not found", soundID);  			return;  		} @@ -402,11 +402,6 @@ void Sound::playHESound(int soundID, int heOffset, int heChannel, int heFlags) {  		return;  	} -	// TODO: Extra sound flags -	if (heFlags & 1) { -		flags |= Audio::Mixer::FLAG_LOOP; -	} -  	// Support for sound in later Backyard sports games  	if (READ_BE_UINT32(ptr) == MKID_BE('RIFF') || READ_BE_UINT32(ptr) == MKID_BE('WSOU')) {  		uint16 compType; @@ -420,7 +415,7 @@ void Sound::playHESound(int soundID, int heOffset, int heChannel, int heFlags) {  		Common::MemoryReadStream stream(ptr, size);  		if (!loadWAVFromStream(stream, size, rate, flags, &compType, &blockAlign)) { -			error("playSound: Not a valid WAV file"); +			error("playHESound: Not a valid WAV file (%d)", soundID);  		}  		if (compType == 17) { @@ -435,6 +430,12 @@ void Sound::playHESound(int soundID, int heOffset, int heChannel, int heFlags) {  			sound = (char *)malloc(size);  			memcpy(sound, ptr + stream.pos(), size);  		} + +		// TODO: Extra sound flags +		if (heFlags & 1) { +			flags |= Audio::Mixer::FLAG_LOOP; +		} +  		_vm->_mixer->stopHandle(_heSoundChannels[heChannel]);  		_vm->_mixer->playRaw(&_heSoundChannels[heChannel], sound, size, rate, flags, soundID, 255, 0, 0,0, type);  	} @@ -466,7 +467,6 @@ void Sound::playHESound(int soundID, int heOffset, int heChannel, int heFlags) {  		size = READ_BE_UINT32(ptr + 4) - 8;  		if (heOffset < 0 || heOffset > size) {  			// Occurs when making fireworks in puttmoon -			debug(0, "playSound: Invalid sound offset (offset %d, size %d) in sound %d", heOffset, size, soundID);  			heOffset = 0;  		}  		size -= heOffset; @@ -477,6 +477,11 @@ void Sound::playHESound(int soundID, int heOffset, int heChannel, int heFlags) {  			_overrideFreq = 0;  		} +		// TODO: Extra sound flags +		if (heFlags & 1) { +			flags |= Audio::Mixer::FLAG_LOOP; +		} +  		_vm->_mixer->stopHandle(_heSoundChannels[heChannel]);  		_vm->_mixer->playRaw(&_heSoundChannels[heChannel], ptr + heOffset + 8, size, rate, flags, soundID, 255, 0, 0,0, type); | 
