[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