Skip to content

Commit

Permalink
SHERLOCK: RT: Don't error out if a speech resource doesn't exist
Browse files Browse the repository at this point in the history
  • Loading branch information
dreammaster committed Aug 12, 2015
1 parent 4ad53dc commit 237d114
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 5 deletions.
17 changes: 16 additions & 1 deletion engines/sherlock/sound.cpp
Expand Up @@ -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);
Expand All @@ -279,6 +293,7 @@ void Sound::playSpeech(const Common::String &name) {

void Sound::stopSpeech() {
_mixer->stopHandle(_speechHandle);
_speechPlaying = false;
}

bool Sound::isSpeechPlaying() {
Expand Down
3 changes: 1 addition & 2 deletions engines/sherlock/tattoo/tattoo_talk.cpp
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions engines/sherlock/tattoo/tattoo_user_interface.cpp
Expand Up @@ -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;
Expand Down

0 comments on commit 237d114

Please sign in to comment.