diff options
| author | m-kiewitz | 2013-09-15 22:14:35 +0200 | 
|---|---|---|
| committer | m-kiewitz | 2013-09-15 22:14:35 +0200 | 
| commit | 0367d40647128836c7ccecc1cd9e3682b871dbf8 (patch) | |
| tree | 8f7565063698d9444e20a2fe037eb150279c2dab | |
| parent | fcdaa86831a964b82b17bafc4c87bc86387ebf13 (diff) | |
| download | scummvm-rg350-0367d40647128836c7ccecc1cd9e3682b871dbf8.tar.gz scummvm-rg350-0367d40647128836c7ccecc1cd9e3682b871dbf8.tar.bz2 scummvm-rg350-0367d40647128836c7ccecc1cd9e3682b871dbf8.zip | |
SCI: disable signals when resuming music, so that debugger will work properly for longbow intro
| -rw-r--r-- | engines/sci/sound/midiparser_sci.cpp | 50 | ||||
| -rw-r--r-- | engines/sci/sound/music.cpp | 8 | ||||
| -rw-r--r-- | engines/sci/sound/music.h | 1 | 
3 files changed, 35 insertions, 24 deletions
| diff --git a/engines/sci/sound/midiparser_sci.cpp b/engines/sci/sound/midiparser_sci.cpp index 9653d9ccff..2570322e73 100644 --- a/engines/sci/sound/midiparser_sci.cpp +++ b/engines/sci/sound/midiparser_sci.cpp @@ -440,21 +440,21 @@ void MidiParser_SCI::sendToDriver(uint32 midi) {  }  void MidiParser_SCI::parseNextEvent(EventInfo &info) { -	// Set signal AFTER waiting for delta, otherwise we would set signal too soon resulting in all sorts of bugs +    // Set signal AFTER waiting for delta, otherwise we would set signal too soon resulting in all sorts of bugs  	if (_dataincAdd) { -		_dataincAdd = false; -		_pSnd->dataInc += _dataincToAdd; -		_pSnd->signal = 0x7f + _pSnd->dataInc; +    	_dataincAdd = false; +	    _pSnd->dataInc += _dataincToAdd; +	    _pSnd->signal = 0x7f + _pSnd->dataInc;  		debugC(4, kDebugLevelSound, "datainc %04x", _dataincToAdd);  	}  	if (_signalSet) { -		_signalSet = false; +    	_signalSet = false;  		_pSnd->setSignal(_signalToSet); -		debugC(4, kDebugLevelSound, "signal %04x", _signalToSet); +	    debugC(4, kDebugLevelSound, "signal %04x", _signalToSet);  	}  	if (_jumpToHoldTick) { -		_jumpToHoldTick = false; +    	_jumpToHoldTick = false;  		jumpToTick(_loopTick, false, false);  	} @@ -497,8 +497,10 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) {  				// immediately there.  				if (_soundVersion <= SCI_VERSION_0_LATE ||  					_position._playTick || info.delta) { -					_signalSet = true; -					_signalToSet = info.basic.param1; +                    if (!_pSnd->inFastForward) { +				    	_signalSet = true; +					    _signalToSet = info.basic.param1; +                    }  				}  			} else {  				_loopTick = _position._playTick + info.delta; @@ -552,20 +554,22 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) {  				}  				break;  			case kUpdateCue: -				_dataincAdd = true; -				switch (_soundVersion) { -				case SCI_VERSION_0_EARLY: -				case SCI_VERSION_0_LATE: -					_dataincToAdd = info.basic.param2; -					break; -				case SCI_VERSION_1_EARLY: -				case SCI_VERSION_1_LATE: -				case SCI_VERSION_2_1: -					_dataincToAdd = 1; -					break; -				default: -					error("unsupported _soundVersion"); -				} +                if (!_pSnd->inFastForward) { +    				_dataincAdd = true; +				    switch (_soundVersion) { +				    case SCI_VERSION_0_EARLY: +				    case SCI_VERSION_0_LATE: +                        _dataincToAdd = info.basic.param2; +					    break; +				    case SCI_VERSION_1_EARLY: +				    case SCI_VERSION_1_LATE: +				    case SCI_VERSION_2_1: +    				    _dataincToAdd = 1; +					    break; +				    default: +    					error("unsupported _soundVersion"); +				    } +                }  				break;  			case kResetOnPause:  				_resetOnPause = info.basic.param2; diff --git a/engines/sci/sound/music.cpp b/engines/sci/sound/music.cpp index 913ba32cba..7fdcac21a4 100644 --- a/engines/sci/sound/music.cpp +++ b/engines/sci/sound/music.cpp @@ -519,9 +519,14 @@ void SciMusic::soundPlay(MusicEntry *pSnd) {  			if (pSnd->status == kSoundStopped)  				pSnd->pMidiParser->jumpToTick(0); -			else +			else {  				// Fast forward to the last position and perform associated events when loading +                pSnd->inFastForward = true; +                // we set this flag, so that the midiparser doesn't set any signals for scripts +                // if we don't do this, at least accessing the debugger will reset previously set signals  				pSnd->pMidiParser->jumpToTick(pSnd->ticker, true, true, true); +                pSnd->inFastForward = false; +            }  			// Restore looping and hold  			pSnd->loop = prevLoop; @@ -760,6 +765,7 @@ MusicEntry::MusicEntry() {  	resourceId = 0;  	isQueued = false; +    inFastForward = false;  	dataInc = 0;  	ticker = 0; diff --git a/engines/sci/sound/music.h b/engines/sci/sound/music.h index 1f798c90d7..79de71d5c1 100644 --- a/engines/sci/sound/music.h +++ b/engines/sci/sound/music.h @@ -65,6 +65,7 @@ public:  	uint16 resourceId;  	bool isQueued; // for SCI0 only! +    bool inFastForward; // if we are currently fast-forwarding (disables any signals to scripts)  	uint16 dataInc;  	uint16 ticker; | 
