aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock
diff options
context:
space:
mode:
authorPaul Gilbert2015-08-11 20:30:04 -0400
committerPaul Gilbert2015-08-11 20:30:04 -0400
commit237d1149b5ab8cd00baa902ad951a01889383362 (patch)
tree836b2a758dcaaeb52cb3352a27f125ffc39804e9 /engines/sherlock
parent4ad53dced0e6031f9f634e50dd7bae96b8d7f0f1 (diff)
downloadscummvm-rg350-237d1149b5ab8cd00baa902ad951a01889383362.tar.gz
scummvm-rg350-237d1149b5ab8cd00baa902ad951a01889383362.tar.bz2
scummvm-rg350-237d1149b5ab8cd00baa902ad951a01889383362.zip
SHERLOCK: RT: Don't error out if a speech resource doesn't exist
Diffstat (limited to 'engines/sherlock')
-rw-r--r--engines/sherlock/sound.cpp17
-rw-r--r--engines/sherlock/tattoo/tattoo_talk.cpp3
-rw-r--r--engines/sherlock/tattoo/tattoo_user_interface.cpp4
3 files changed, 19 insertions, 5 deletions
diff --git a/engines/sherlock/sound.cpp b/engines/sherlock/sound.cpp
index d4907e041a..013b0fdb70 100644
--- a/engines/sherlock/sound.cpp
+++ b/engines/sherlock/sound.cpp
@@ -267,10 +267,24 @@ void Sound::playSpeech(const Common::String &name) {
Scene &scene = *_vm->_scene;
stopSpeech();
+ // Figure out which speech library to use
Common::String libraryName = Common::String::format("speech%02d.lib", scene._currentScene);
+ if ((!scumm_strnicmp(name.c_str(), "SLVE12S", 7)) || (!scumm_strnicmp(name.c_str(), "WATS12X", 7))
+ || (!scumm_strnicmp(name.c_str(), "HOLM12X", 7)))
+ libraryName = "SPEECH12.LIB";
+
+ // If the speech library file doesn't even exist, then we can't play anything
+ Common::File f;
+ if (!f.exists(libraryName))
+ return;
+
+ // Ensure the given library is in the cache
res.addToCache(libraryName);
- // TODO: Doesn't seem to be WAV files. Need to find out what format it is..
+ if (!res.exists(name))
+ // No voice resource for the given name, so we have nothing to play
+ return;
+
Common::SeekableReadStream *stream = res.load(name, libraryName);
Audio::AudioStream *audioStream = Audio::makeRawStream(stream, 11025, Audio::FLAG_UNSIGNED);
_mixer->playStream(Audio::Mixer::kSpeechSoundType, &_speechHandle, audioStream, -1, Audio::Mixer::kMaxChannelVolume);
@@ -279,6 +293,7 @@ void Sound::playSpeech(const Common::String &name) {
void Sound::stopSpeech() {
_mixer->stopHandle(_speechHandle);
+ _speechPlaying = false;
}
bool Sound::isSpeechPlaying() {
diff --git a/engines/sherlock/tattoo/tattoo_talk.cpp b/engines/sherlock/tattoo/tattoo_talk.cpp
index d16e26fcea..816e0e2b13 100644
--- a/engines/sherlock/tattoo/tattoo_talk.cpp
+++ b/engines/sherlock/tattoo/tattoo_talk.cpp
@@ -186,11 +186,10 @@ TattooTalk::TattooTalk(SherlockEngine *vm) : Talk(vm), _talkWidget(vm), _passwor
void TattooTalk::talkInterface(const byte *&str) {
TattooEngine &vm = *(TattooEngine *)_vm;
Sound &sound = *_vm->_sound;
- Talk &talk = *_vm->_talk;
TattooUserInterface &ui = *(TattooUserInterface *)_vm->_ui;
const byte *s = str;
- if (!vm._textWindowsOn && sound._speechOn && talk._speaker != -1)
+ if (!vm._textWindowsOn && sound._speechOn && _speaker != -1)
return;
// Move to past the end of the text string
diff --git a/engines/sherlock/tattoo/tattoo_user_interface.cpp b/engines/sherlock/tattoo/tattoo_user_interface.cpp
index 275ba2f0a0..f9d6194a84 100644
--- a/engines/sherlock/tattoo/tattoo_user_interface.cpp
+++ b/engines/sherlock/tattoo/tattoo_user_interface.cpp
@@ -132,14 +132,14 @@ void TattooUserInterface::lookAtObject() {
while ((*p == ' ') || (*p == '='))
++p;
- // If it's not "NONE", play the Sound File
+ // If it's not "NONE", play the speech File
Common::String soundName(p);
if (soundName.compareToIgnoreCase("NONE")) {
soundName.toLowercase();
if (!soundName.contains('.'))
soundName += ".wav";
- sound.playSound(soundName, WAIT_RETURN_IMMEDIATELY);
+ sound.playSpeech(soundName);
}
break;