aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWillem Jan Palenstijn2009-07-11 15:00:40 +0000
committerWillem Jan Palenstijn2009-07-11 15:00:40 +0000
commit8dd34921945ea0ce7f77e6c71ec5fbafaeb77622 (patch)
tree268cff1a95d4b1543cf8a474cf574ca26cbee3d5
parent1c02b93b7093c436978d8ad8916dabf43cd1591e (diff)
downloadscummvm-rg350-8dd34921945ea0ce7f77e6c71ec5fbafaeb77622.tar.gz
scummvm-rg350-8dd34921945ea0ce7f77e6c71ec5fbafaeb77622.tar.bz2
scummvm-rg350-8dd34921945ea0ce7f77e6c71ec5fbafaeb77622.zip
SCI: don't let TimerSongIterator loop forever, and don't immediately
signal completion when starting it. This fixes a sync issue with the departing spaceship at the start of SQ4CD (after the intro). svn-id: r42385
-rw-r--r--engines/sci/engine/ksound.cpp1
-rw-r--r--engines/sci/sfx/iterator.cpp4
2 files changed, 3 insertions, 2 deletions
diff --git a/engines/sci/engine/ksound.cpp b/engines/sci/engine/ksound.cpp
index 4ba8971397..95c2eaab1d 100644
--- a/engines/sci/engine/ksound.cpp
+++ b/engines/sci/engine/ksound.cpp
@@ -823,7 +823,6 @@ reg_t kDoSound_SCI1(EngineState *s, int funct_nr, int argc, reg_t *argv) {
sampleLen = s->_sound.startAudio(65535, number);
// Also create iterator, that will fire SI_FINISHED event, when the sound is done playing
s->_sound.sfx_add_song(build_timeriterator(s, sampleLen), 0, handle, number);
- PUT_SEL32V(obj, signal, sampleLen);
} else {
if (!s->resmgr->testResource(ResourceId(kResourceTypeSound, number))) {
warning("Could not open song number %d", number);
diff --git a/engines/sci/sfx/iterator.cpp b/engines/sci/sfx/iterator.cpp
index 6c5706a8c1..dc2979abda 100644
--- a/engines/sci/sfx/iterator.cpp
+++ b/engines/sci/sfx/iterator.cpp
@@ -1173,7 +1173,9 @@ TimerSongIterator::TimerSongIterator(int delta)
int TimerSongIterator::nextCommand(byte *buf, int *result) {
if (_delta) {
- return _delta;
+ int d = _delta;
+ _delta = 0;
+ return d;
}
return SI_FINISHED;
}