mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-27 13:42:02 +00:00
SHERLOCK: RT: Don't error out if a speech resource doesn't exist
This commit is contained in:
parent
4ad53dced0
commit
237d1149b5
@ -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() {
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user