[Scummvm-git-logs] scummvm master -> cc5abf5ebb0ed8c657c1c58b552be4dd6f24ec9e
sev-
sev at scummvm.org
Wed May 27 10:43:53 UTC 2020
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
cc5abf5ebb TTS: Fix crash when TextToSpeechManager is unavailable, clean up formatting
Commit: cc5abf5ebb0ed8c657c1c58b552be4dd6f24ec9e
https://github.com/scummvm/scummvm/commit/cc5abf5ebb0ed8c657c1c58b552be4dd6f24ec9e
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2020-05-27T12:43:49+02:00
Commit Message:
TTS: Fix crash when TextToSpeechManager is unavailable, clean up formatting
Changed paths:
base/main.cpp
engines/engine.cpp
engines/lure/detection.cpp
engines/lure/surface.cpp
engines/mads/detection.cpp
engines/mads/detection_tables.h
engines/mads/dialogs.cpp
engines/sherlock/scalpel/scalpel_user_interface.cpp
engines/sherlock/talk.cpp
gui/widgets/popup.cpp
diff --git a/base/main.cpp b/base/main.cpp
index 3b80eed7d0..5307b76af1 100644
--- a/base/main.cpp
+++ b/base/main.cpp
@@ -553,13 +553,17 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) {
#endif
#ifdef USE_TTS
Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
- ttsMan->pushState();
+ if (ttsMan != nullptr) {
+ ttsMan->pushState();
+ }
#endif
// Try to run the game
Common::Error result = runGame(plugin, system, specialDebug);
#ifdef USE_TTS
- ttsMan->popState();
+ if (ttsMan != nullptr) {
+ ttsMan->popState();
+ }
#endif
#ifdef ENABLE_EVENTRECORDER
diff --git a/engines/engine.cpp b/engines/engine.cpp
index c660d69868..658bc47866 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -564,8 +564,10 @@ void Engine::openMainMenuDialog() {
_mainMenuDialog = new MainMenuDialog(this);
#ifdef USE_TTS
Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
- ttsMan->pushState();
- g_gui.initTextToSpeech();
+ if (ttsMan != nullptr) {
+ ttsMan->pushState();
+ g_gui.initTextToSpeech();
+ }
#endif
setGameToLoadSlot(-1);
@@ -590,7 +592,8 @@ void Engine::openMainMenuDialog() {
applyGameSettings();
syncSoundSettings();
#ifdef USE_TTS
- ttsMan->popState();
+ if (ttsMan != nullptr)
+ ttsMan->popState();
#endif
}
diff --git a/engines/lure/detection.cpp b/engines/lure/detection.cpp
index d733728263..9f397dcc45 100644
--- a/engines/lure/detection.cpp
+++ b/engines/lure/detection.cpp
@@ -93,11 +93,11 @@ static const LureGameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- #ifdef USE_TTS
- GUIO1(GAMEOPTION_TTS_NARRATOR)
- #else
- GUIO0()
- #endif
+#ifdef USE_TTS
+ GUIO1(GAMEOPTION_TTS_NARRATOR)
+#else
+ GUIO0()
+#endif
},
GF_FLOPPY,
},
@@ -110,12 +110,11 @@ static const LureGameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- #ifdef USE_TTS
- GUIO1(GAMEOPTION_TTS_NARRATOR)
- #else
- GUIO0()
- #endif
-
+#ifdef USE_TTS
+ GUIO1(GAMEOPTION_TTS_NARRATOR)
+#else
+ GUIO0()
+#endif
},
GF_FLOPPY | GF_EGA,
},
@@ -235,9 +234,9 @@ static const LureGameDescription gameDescriptions[] = {
class LureMetaEngine : public AdvancedMetaEngine {
public:
LureMetaEngine() : AdvancedMetaEngine(Lure::gameDescriptions, sizeof(Lure::LureGameDescription), lureGames
- #ifdef USE_TTS
+#ifdef USE_TTS
, optionsList
- #endif
+#endif
) {
_md5Bytes = 1024;
diff --git a/engines/lure/surface.cpp b/engines/lure/surface.cpp
index 9881256502..ad5d0e4d96 100644
--- a/engines/lure/surface.cpp
+++ b/engines/lure/surface.cpp
@@ -472,27 +472,29 @@ Surface *Surface::newDialog(uint16 width, uint8 numLines, const char **lines, bo
Surface *s = new Surface(width, size.y);
s->createDialog();
- #ifdef USE_TTS
+#ifdef USE_TTS
Common::String text;
- #endif
+#endif
uint16 yP = Surface::textY();
for (uint8 ctr = 0; ctr < numLines; ++ctr) {
- #ifdef USE_TTS
+#ifdef USE_TTS
text += lines[ctr];
- #endif
+#endif
s->writeString(Surface::textX(), yP, lines[ctr], true, color, varLength);
yP += squashedLines ? FONT_HEIGHT - 1 : FONT_HEIGHT;
}
- #ifdef USE_TTS
+#ifdef USE_TTS
if (ConfMan.getBool("tts_narrator")) {
- Common::TextToSpeechManager *_ttsMan = g_system->getTextToSpeechManager();
- _ttsMan->stop();
- _ttsMan->say(text.c_str());
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ if (ttsMan != nullptr) {
+ ttsMan->stop();
+ ttsMan->say(text.c_str());
+ }
}
- #endif
+#endif
return s;
}
diff --git a/engines/mads/detection.cpp b/engines/mads/detection.cpp
index 6cd44c107a..fe65446cac 100644
--- a/engines/mads/detection.cpp
+++ b/engines/mads/detection.cpp
@@ -138,7 +138,7 @@ static const ADExtraGuiOptionsMap optionsList[] = {
}
},*/
- #ifdef USE_TTS
+#ifdef USE_TTS
{
GAMEOPTION_TTS_NARRATOR,
{
@@ -148,7 +148,7 @@ static const ADExtraGuiOptionsMap optionsList[] = {
false
}
},
- #endif
+#endif
AD_EXTRA_GUI_OPTIONS_TERMINATOR
};
diff --git a/engines/mads/detection_tables.h b/engines/mads/detection_tables.h
index ad2a4ca228..14ca68ca3d 100644
--- a/engines/mads/detection_tables.h
+++ b/engines/mads/detection_tables.h
@@ -56,11 +56,11 @@ static const MADSGameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- #ifdef USE_TTS
+#ifdef USE_TTS
GUIO6(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE, GAMEOPTION_TTS_NARRATOR)
- #else
+#else
GUIO5(GUIO_NOSPEECH, GAMEOPTION_EASY_MOUSE, GAMEOPTION_ANIMATED_INVENTORY, GAMEOPTION_ANIMATED_INTERFACE, GAMEOPTION_NAUGHTY_MODE)
- #endif
+#endif
},
GType_RexNebular,
0
diff --git a/engines/mads/dialogs.cpp b/engines/mads/dialogs.cpp
index 5141e31718..cadb7ae0f0 100644
--- a/engines/mads/dialogs.cpp
+++ b/engines/mads/dialogs.cpp
@@ -201,8 +201,9 @@ int TextDialog::estimatePieces(int maxLen) {
TextDialog::~TextDialog() {
#ifdef USE_TTS
if (ConfMan.getBool("tts_narrator")) {
- Common::TextToSpeechManager* _ttsMan = g_system->getTextToSpeechManager();
- _ttsMan->stop();
+ Common::TextToSpeechManager* ttsMan = g_system->getTextToSpeechManager();
+ if (ttsMan != nullptr)
+ ttsMan->stop();
}
#endif
@@ -350,9 +351,9 @@ void TextDialog::draw() {
// Draw the text lines
int lineYp = _position.y + 5;
- #ifdef USE_TTS
+#ifdef USE_TTS
Common::String text;
- #endif
+#endif
for (int lineNum = 0; lineNum <= _numLines; ++lineNum) {
if (_lineXp[lineNum] == -1) {
// Draw a line across the entire dialog
@@ -387,13 +388,15 @@ void TextDialog::draw() {
lineYp += _font->getHeight() + 1;
}
- #ifdef USE_TTS
+#ifdef USE_TTS
if (ConfMan.getBool("tts_narrator")) {
- Common::TextToSpeechManager *_ttsMan = g_system->getTextToSpeechManager();
- _ttsMan->stop();
- _ttsMan->say(text.c_str());
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ if (ttsMan != nullptr) {
+ ttsMan->stop();
+ ttsMan->say(text.c_str());
+ }
}
- #endif
+#endif
}
void TextDialog::calculateBounds() {
diff --git a/engines/sherlock/scalpel/scalpel_user_interface.cpp b/engines/sherlock/scalpel/scalpel_user_interface.cpp
index 20ba4f53fa..f819acf7f1 100644
--- a/engines/sherlock/scalpel/scalpel_user_interface.cpp
+++ b/engines/sherlock/scalpel/scalpel_user_interface.cpp
@@ -2064,13 +2064,15 @@ void ScalpelUserInterface::printObjectDesc(const Common::String &str, bool first
SHERLOCK_SCREEN_HEIGHT));
}
- #ifdef USE_TTS
+#ifdef USE_TTS
if (ConfMan.getBool("tts_narrator")) {
- Common::TextToSpeechManager *_ttsMan = g_system->getTextToSpeechManager();
- _ttsMan->stop();
- _ttsMan->say(str.c_str());
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ if (ttsMan != nullptr) {
+ ttsMan->stop();
+ ttsMan->say(str.c_str());
+ }
}
- #endif
+#endif
}
void ScalpelUserInterface::printObjectDesc() {
diff --git a/engines/sherlock/talk.cpp b/engines/sherlock/talk.cpp
index ec20f807df..f92b7c142a 100644
--- a/engines/sherlock/talk.cpp
+++ b/engines/sherlock/talk.cpp
@@ -356,14 +356,16 @@ void Talk::talkTo(const Common::String filename) {
// Make a copy of the statement (in case the script frees the statement list), and then execute it
Statement statement = _statements[select];
-
- #ifdef USE_TTS
+
+#ifdef USE_TTS
if (_talkTo == -1 && ConfMan.getBool("tts_narrator")) {
- Common::TextToSpeechManager *_ttsMan = g_system->getTextToSpeechManager();
- _ttsMan->stop();
- _ttsMan->say(_statements[select]._reply.c_str());
- }
- #endif
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ if (ttsMan != nullptr) {
+ ttsMan->stop();
+ ttsMan->say(_statements[select]._reply.c_str());
+ }
+ }
+#endif
doScript(_statements[select]._reply);
diff --git a/gui/widgets/popup.cpp b/gui/widgets/popup.cpp
index aa87e1e835..1931cb28de 100644
--- a/gui/widgets/popup.cpp
+++ b/gui/widgets/popup.cpp
@@ -200,7 +200,8 @@ void PopUpDialog::read(Common::String str) {
if (ConfMan.hasKey("tts_enabled", "scummvm") &&
ConfMan.getBool("tts_enabled", "scummvm")) {
Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
- ttsMan->say(str);
+ if (ttsMan != nullptr)
+ ttsMan->say(str);
}
#endif
}
More information about the Scummvm-git-logs
mailing list