[Scummvm-git-logs] scummvm master -> fa8845e36719bb44affdbda1280bc89abe6e88b4
criezy
criezy at scummvm.org
Sat Sep 4 18:24:15 UTC 2021
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:
fa8845e367 SUPERNOVA: Add Text To Speech support
Commit: fa8845e36719bb44affdbda1280bc89abe6e88b4
https://github.com/scummvm/scummvm/commit/fa8845e36719bb44affdbda1280bc89abe6e88b4
Author: taylorzhancher (77198777+taylorzhancher at users.noreply.github.com)
Date: 2021-09-04T19:24:12+01:00
Commit Message:
SUPERNOVA: Add Text To Speech support
Changed paths:
engines/supernova/detection.cpp
engines/supernova/game-manager.cpp
engines/supernova/game-manager.h
engines/supernova/screen.cpp
engines/supernova/supernova.cpp
diff --git a/engines/supernova/detection.cpp b/engines/supernova/detection.cpp
index 40c7a88acd..9095f5211a 100644
--- a/engines/supernova/detection.cpp
+++ b/engines/supernova/detection.cpp
@@ -28,6 +28,7 @@
#include "supernova/supernova.h"
#define GAMEOPTION_IMPROVED GUIO_GAMEOPTIONS1
+#define GAMEOPTION_TTS GUIO_GAMEOPTIONS2
static const DebugChannelDef debugFlagList[] = {
{Supernova::kDebugGeneral, "general", "Supernova general debug channel"},
@@ -45,6 +46,16 @@ static const ADExtraGuiOptionsMap optionsList[] = {
}
},
+ {
+ GAMEOPTION_TTS,
+ {
+ _s("Enable Text to Speech"),
+ _s("Use TTS to read the descriptions (if TTS is available)"),
+ "tts_enabled",
+ false
+ }
+ },
+
AD_EXTRA_GUI_OPTIONS_TERMINATOR
};
@@ -64,7 +75,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::DE_DEU,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- GUIO2(GAMEOPTION_IMPROVED, GUIO_NOMIDI)
+ GUIO3(GAMEOPTION_TTS, GAMEOPTION_IMPROVED, GUIO_NOMIDI)
},
{
"msn1",
@@ -73,7 +84,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- GUIO2(GAMEOPTION_IMPROVED, GUIO_NOMIDI)
+ GUIO3(GAMEOPTION_TTS, GAMEOPTION_IMPROVED, GUIO_NOMIDI)
},
{
"msn1",
@@ -82,7 +93,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::IT_ITA,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- GUIO2(GAMEOPTION_IMPROVED, GUIO_NOMIDI)
+ GUIO3(GAMEOPTION_TTS, GAMEOPTION_IMPROVED, GUIO_NOMIDI)
},
// Mission Supernova 2
{
@@ -92,7 +103,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::DE_DEU,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- GUIO2(GAMEOPTION_IMPROVED, GUIO_NOMIDI)
+ GUIO3(GAMEOPTION_TTS, GAMEOPTION_IMPROVED, GUIO_NOMIDI)
},
{
"msn2",
@@ -101,7 +112,7 @@ static const ADGameDescription gameDescriptions[] = {
Common::EN_ANY,
Common::kPlatformDOS,
ADGF_NO_FLAGS,
- GUIO2(GAMEOPTION_IMPROVED, GUIO_NOMIDI)
+ GUIO3(GAMEOPTION_TTS, GAMEOPTION_IMPROVED, GUIO_NOMIDI)
},
AD_TABLE_END_MARKER
};
diff --git a/engines/supernova/game-manager.cpp b/engines/supernova/game-manager.cpp
index 2c8eba5772..9489211a91 100644
--- a/engines/supernova/game-manager.cpp
+++ b/engines/supernova/game-manager.cpp
@@ -21,6 +21,8 @@
*/
#include "common/system.h"
+#include "common/config-manager.h"
+#include "common/text-to-speech.h"
#include "graphics/cursorman.h"
#include "graphics/palette.h"
#include "gui/message.h"
@@ -360,6 +362,8 @@ void GameManager::processInput() {
onInventoryArrowDown
} mouseLocation;
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+
if (_mouseField >= 0 && _mouseField < 256)
mouseLocation = onObject;
else if (_mouseField >= 256 && _mouseField < 512)
@@ -529,12 +533,18 @@ void GameManager::processInput() {
case onInventory:
_guiInventory[_mouseField - 512].setHighlight(true);
_currentInputObject = _inventory.get(_mouseField - 512 + _inventoryScroll);
+ if (ttsMan != nullptr && ConfMan.getBool("tts_enabled") && !isNullObject(_currentInputObject))
+ ttsMan->say(_vm->getGameString(_currentInputObject->_name), Common::kDos850);
break;
case onCmdButton:
_guiCommandButton[_mouseField - 256].setHighlight(true);
+ if (ttsMan != nullptr && ConfMan.getBool("tts_enabled"))
+ ttsMan->say(_guiCommandButton[_mouseField - 256].getText(), Common::kDos850);
break;
case onObject:
_currentInputObject = _currentRoom->getObject(_mouseField);
+ if (ttsMan != nullptr && ConfMan.getBool("tts_enabled") && !isNullObject(_currentInputObject))
+ ttsMan->say(_vm->getGameString(_currentInputObject->_name), Common::kDos850);
break;
case onNone:
default:
@@ -555,13 +565,23 @@ bool GameManager::isNullObject(Object *obj) {
void GameManager::sentence(int number, bool brightness) {
if (number < 0)
return;
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ Common::String string;
+
_vm->renderBox(0, 141 + _rowsStart[number] * 10, 320, _rows[number] * 10 - 1, brightness ? kColorWhite44 : kColorWhite25);
- if (_texts[_rowsStart[number]] == kStringDialogSeparator)
+ if (_texts[_rowsStart[number]] == kStringDialogSeparator) {
_vm->renderText(kStringConversationEnd, 1, 142 + _rowsStart[number] * 10, brightness ? kColorRed : kColorDarkRed);
- else {
- for (int r = _rowsStart[number]; r < _rowsStart[number] + _rows[number]; ++r)
+ string = _vm->getGameString(kStringConversationEnd);
+ } else {
+ for (int r = _rowsStart[number]; r < _rowsStart[number] + _rows[number]; ++r) {
_vm->renderText(_texts[r], 1, 142 + r * 10, brightness ? kColorGreen : kColorDarkGreen);
+ if (!string.empty())
+ string += " ";
+ string += _vm->getGameString(_texts[r]);
+ }
}
+ if (ttsMan != nullptr && ConfMan.getBool("tts_enabled") && brightness)
+ ttsMan->say(string, Common::TextToSpeechManager::QUEUE_NO_REPEAT, Common::kDos850);
}
void GameManager::say(int textId) {
diff --git a/engines/supernova/game-manager.h b/engines/supernova/game-manager.h
index 2ea8d7b9c0..39f697a57d 100644
--- a/engines/supernova/game-manager.h
+++ b/engines/supernova/game-manager.h
@@ -101,6 +101,7 @@ private:
class GameManager {
public:
+
GameManager(SupernovaEngine *vm, Sound *sound);
virtual ~GameManager();
diff --git a/engines/supernova/screen.cpp b/engines/supernova/screen.cpp
index 83694addb2..9dec302672 100644
--- a/engines/supernova/screen.cpp
+++ b/engines/supernova/screen.cpp
@@ -27,6 +27,7 @@
#include "graphics/palette.h"
#include "graphics/surface.h"
#include "common/config-manager.h"
+#include "common/text-to-speech.h"
#include "supernova/imageid.h"
#include "supernova/resman.h"
@@ -286,6 +287,7 @@ void Screen::renderMessage(int stringId, MessagePosition position,
text = Common::String::format(text.c_str(), var1.c_str());
}
+
renderMessage(text, position);
}
@@ -530,6 +532,10 @@ void Screen::renderMessage(const char *text, MessagePosition position, int posit
int y = 0;
byte textColor = 0;
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ if (ttsMan != nullptr && ConfMan.getBool("tts_enabled"))
+ ttsMan->say(text, Common::TextToSpeechManager::QUEUE_NO_REPEAT, Common::kDos850);
+
while (*p != '\0') {
row[numRows] = p;
++numRows;
diff --git a/engines/supernova/supernova.cpp b/engines/supernova/supernova.cpp
index d981efdd4b..b10183e211 100644
--- a/engines/supernova/supernova.cpp
+++ b/engines/supernova/supernova.cpp
@@ -33,7 +33,9 @@
#include "common/str.h"
#include "common/system.h"
#include "common/translation.h"
+#include "common/text-to-speech.h"
#include "engines/util.h"
+#include "engines/advancedDetector.h"
#include "graphics/cursorman.h"
#include "graphics/surface.h"
#include "graphics/screen.h"
@@ -99,6 +101,7 @@ SupernovaEngine::SupernovaEngine(OSystem *syst)
_MSPart = 0;
_improved = ConfMan.getBool("improved");
+
}
SupernovaEngine::~SupernovaEngine() {
@@ -110,6 +113,10 @@ SupernovaEngine::~SupernovaEngine() {
}
Common::Error SupernovaEngine::run() {
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ if (ttsMan != nullptr)
+ ttsMan->setLanguage(ConfMan.get("language"));
+
init();
while (!shouldQuit()) {
@@ -830,5 +837,4 @@ void SupernovaEngine::stopSound() {
_sound->stop();
}
-
}
More information about the Scummvm-git-logs
mailing list