aboutsummaryrefslogtreecommitdiff
path: root/scumm/sound.cpp
diff options
context:
space:
mode:
authorJames Brown2002-10-18 11:45:57 +0000
committerJames Brown2002-10-18 11:45:57 +0000
commit80ce915f3da1173eb86af153d79a12aac556f564 (patch)
tree4b23ee8da447cd1e5ff6a4cc3e82ddc2d0924897 /scumm/sound.cpp
parentd0565061a08d93b5fe545740bb37dbc83c12ddfe (diff)
downloadscummvm-rg350-80ce915f3da1173eb86af153d79a12aac556f564.tar.gz
scummvm-rg350-80ce915f3da1173eb86af153d79a12aac556f564.tar.bz2
scummvm-rg350-80ce915f3da1173eb86af153d79a12aac556f564.zip
Fix Wait:forActorDraw and the 'infinite mouth movement' problem in The Dig.
Code assumed that the actor always starts talking in the same room it finishes talking in - this doesn't apply for several cutscene sequences in The Dig. Also added the usual talkChannel fallback code in for The Dig. svn-id: r5186
Diffstat (limited to 'scumm/sound.cpp')
-rw-r--r--scumm/sound.cpp16
1 files changed, 8 insertions, 8 deletions
diff --git a/scumm/sound.cpp b/scumm/sound.cpp
index 7f4b303833..d5fd792e98 100644
--- a/scumm/sound.cpp
+++ b/scumm/sound.cpp
@@ -416,9 +416,9 @@ void Sound::processSfxQueues() {
act = _scumm->_vars[_scumm->VAR_TALK_ACTOR];
if (_talkChannel < 0)
finished = false;
- else if (_scumm->_mixer->_channels[_talkChannel] == NULL)
+ else if (_scumm->_mixer->_channels[_talkChannel] == NULL) {
finished = true;
- else
+ } else
finished = false;
@@ -1044,17 +1044,17 @@ void Sound::bundleMusicHandler(Scumm * scumm) {
}
}
-void Sound::playBundleSound(char *sound) {
+int Sound::playBundleSound(char *sound) {
byte * ptr;
if (_scumm->_bundle->openVoiceFile("digvoice.bun", _scumm->getGameDataPath()) == false) {
- return;
+ return -1;
}
ptr = (byte *)malloc(1000000);
if (_scumm->_bundle->decompressVoiceSampleByName(sound, ptr) == 0) {
delete ptr;
- return;
+ return -1;
}
int rate = 22050;
@@ -1064,7 +1064,7 @@ void Sound::playBundleSound(char *sound) {
if (tag != MKID_BE('iMUS')) {
warning("Decompression of bundle sound failed");
free(ptr);
- return;
+ return -1;
}
ptr += 12;
@@ -1094,12 +1094,12 @@ void Sound::playBundleSound(char *sound) {
if (size < 0) {
warning("Decompression sound failed (no size field)");
free(ptr);
- return;
+ return -1;
}
byte * final = (byte *)malloc(size);
memcpy(final, ptr, size);
- _scumm->_mixer->playRaw(NULL, final, size, rate, SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE);
+ return _scumm->_mixer->playRaw(NULL, final, size, rate, SoundMixer::FLAG_UNSIGNED | SoundMixer::FLAG_AUTOFREE);
}
int Sound::playSfxSound(void *sound, uint32 size, uint rate, bool isUnsigned) {