mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-08 20:07:11 +00:00
SCI: disable signals when resuming music, so that debugger will work properly for longbow intro
This commit is contained in:
parent
fcdaa86831
commit
0367d40647
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user