mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-31 07:53:36 +00:00
SCI/new music code: Don't stop notes when looping for a hold
svn-id: r46897
This commit is contained in:
parent
0b3d3c37a5
commit
13a242838f
@ -146,16 +146,9 @@ void MidiParser_SCI::parseNextEvent(EventInfo &info) {
|
||||
case kMidiHold:
|
||||
// Check if the hold ID marker is the same as the hold ID
|
||||
// marker set for that song by cmdSetSoundHold.
|
||||
// If it is, loop back
|
||||
|
||||
// FIXME: this is currently broken, as seen in the
|
||||
// scene in LSL5 where Larry first arrives at the airport
|
||||
// in the limo. The engine sound is stopped instead of
|
||||
// continuing. As a possible direction to look at for a fix,
|
||||
// removing the allNotesOff() call in jumpToTick() lets the
|
||||
// engine sound continue.
|
||||
// If it is, loop back, but don't stop notes when jumping.
|
||||
if (info.basic.param2 == _pSnd->hold)
|
||||
jumpToTick(_loopTick);
|
||||
jumpToTick(_loopTick, false, false);
|
||||
break;
|
||||
case kUpdateCue:
|
||||
switch (_soundVersion) {
|
||||
|
@ -353,7 +353,7 @@ void MidiParser::hangAllActiveNotes() {
|
||||
}
|
||||
}
|
||||
|
||||
bool MidiParser::jumpToTick(uint32 tick, bool fireEvents) {
|
||||
bool MidiParser::jumpToTick(uint32 tick, bool fireEvents, bool stopNotes) {
|
||||
if (_active_track >= _num_tracks)
|
||||
return false;
|
||||
|
||||
@ -402,18 +402,20 @@ bool MidiParser::jumpToTick(uint32 tick, bool fireEvents) {
|
||||
}
|
||||
}
|
||||
|
||||
if (!_smartJump || !currentPos._play_pos) {
|
||||
allNotesOff();
|
||||
} else {
|
||||
EventInfo targetEvent(_next_event);
|
||||
Tracker targetPosition(_position);
|
||||
if (stopNotes) {
|
||||
if (!_smartJump || !currentPos._play_pos) {
|
||||
allNotesOff();
|
||||
} else {
|
||||
EventInfo targetEvent(_next_event);
|
||||
Tracker targetPosition(_position);
|
||||
|
||||
_position = currentPos;
|
||||
_next_event = currentEvent;
|
||||
hangAllActiveNotes();
|
||||
_position = currentPos;
|
||||
_next_event = currentEvent;
|
||||
hangAllActiveNotes();
|
||||
|
||||
_next_event = targetEvent;
|
||||
_position = targetPosition;
|
||||
_next_event = targetEvent;
|
||||
_position = targetPosition;
|
||||
}
|
||||
}
|
||||
|
||||
_abort_parse = true;
|
||||
|
@ -379,7 +379,7 @@ public:
|
||||
void stopPlaying();
|
||||
|
||||
bool setTrack(int track);
|
||||
bool jumpToTick(uint32 tick, bool fireEvents = false);
|
||||
bool jumpToTick(uint32 tick, bool fireEvents = false, bool stopNotes = true);
|
||||
|
||||
uint32 getPPQN() { return _ppqn; }
|
||||
virtual uint32 getTick() { return _position._play_tick; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user