diff options
| -rw-r--r-- | engines/sci/sfx/music.cpp | 13 | ||||
| -rw-r--r-- | engines/sci/sfx/music.h | 3 | ||||
| -rw-r--r-- | engines/sci/sfx/soundcmd.cpp | 4 | 
3 files changed, 18 insertions, 2 deletions
diff --git a/engines/sci/sfx/music.cpp b/engines/sci/sfx/music.cpp index 102ef57372..9d002da929 100644 --- a/engines/sci/sfx/music.cpp +++ b/engines/sci/sfx/music.cpp @@ -448,6 +448,9 @@ void SciMusic::soundKill(MusicEntry *pSnd) {  }  void SciMusic::soundPause(MusicEntry *pSnd) { +	pSnd->pauseCounter++; +	if (pSnd->status == kSoundPaused) +		return;  	pSnd->status = kSoundPaused;  	if (pSnd->pStreamAud)  		_pMixer->pauseHandle(pSnd->hCurrentAud, true); @@ -455,6 +458,14 @@ void SciMusic::soundPause(MusicEntry *pSnd) {  		pSnd->pMidiParser->pause();  } +void SciMusic::soundResume(MusicEntry *pSnd) { +	pSnd->pauseCounter--; +	if (pSnd->pauseCounter != 0) +		return; +	if (pSnd->status != kSoundPaused) +		return; +	soundPlay(pSnd); +}  uint16 SciMusic::soundGetMasterVolume() {  	return (_pMixer->getVolumeForSoundType(Audio::Mixer::kMusicSoundType) + 8) * 0xF / Audio::Mixer::kMaxMixerVolume; @@ -527,6 +538,8 @@ MusicEntry::MusicEntry() {  	loop = 0;  	volume = 0; +	pauseCounter = 0; +  	fadeTo = 0;  	fadeStep = 0;  	fadeTicker = 0; diff --git a/engines/sci/sfx/music.h b/engines/sci/sfx/music.h index ddb67aaf51..0c648aac25 100644 --- a/engines/sci/sfx/music.h +++ b/engines/sci/sfx/music.h @@ -75,6 +75,8 @@ public:  	byte loop;  	int16 volume; +	int16 pauseCounter; +  	byte fadeTo;  	short fadeStep;  	uint32 fadeTicker; @@ -127,6 +129,7 @@ public:  	void soundStop(MusicEntry *pSnd);  	void soundKill(MusicEntry *pSnd);  	void soundPause(MusicEntry *pSnd); +	void soundResume(MusicEntry *pSnd);  	void soundSetVolume(MusicEntry *pSnd, byte volume);  	void soundSetPriority(MusicEntry *pSnd, byte prio);  	uint16 soundGetMasterVolume(); diff --git a/engines/sci/sfx/soundcmd.cpp b/engines/sci/sfx/soundcmd.cpp index 433ab38c3c..3f2308b736 100644 --- a/engines/sci/sfx/soundcmd.cpp +++ b/engines/sci/sfx/soundcmd.cpp @@ -538,7 +538,7 @@ void SoundCommandParser::cmdPauseHandle(reg_t obj, int16 value) {  			if (value)  				_music->soundPause(musicSlot);  			else -				_music->soundPlay(musicSlot); +				_music->soundResume(musicSlot);  		}  		if (slotLoop) {  			slotLoop = _music->enumPlayList(slotLoop); @@ -565,7 +565,7 @@ void SoundCommandParser::cmdResumeHandle(reg_t obj, int16 value) {  	}  	PUT_SEL32V(_segMan, obj, state, kSoundPlaying); -	_music->soundPlay(musicSlot); +	_music->soundResume(musicSlot);  #endif  }  | 
