[Scummvm-git-logs] scummvm master -> d3dd051e91fb8c48c24f6d211be4d973237f663b

criezy criezy at scummvm.org
Mon Jul 26 11:35:30 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:
d3dd051e91 CGE2: Adding TTS feature


Commit: d3dd051e91fb8c48c24f6d211be4d973237f663b
    https://github.com/scummvm/scummvm/commit/d3dd051e91fb8c48c24f6d211be4d973237f663b
Author: taylorzhancher (77198777+taylorzhancher at users.noreply.github.com)
Date: 2021-07-26T12:35:27+01:00

Commit Message:
CGE2: Adding TTS feature

Changed paths:
    engines/cge2/cge2.cpp
    engines/cge2/cge2.h
    engines/cge2/detection.cpp
    engines/cge2/snail.cpp
    engines/cge2/talk.cpp
    engines/cge2/vmenu.cpp
    engines/cge2/vmenu.h


diff --git a/engines/cge2/cge2.cpp b/engines/cge2/cge2.cpp
index 0da716e569..1b364079fd 100644
--- a/engines/cge2/cge2.cpp
+++ b/engines/cge2/cge2.cpp
@@ -25,7 +25,9 @@
  * Copyright (c) 1994-1997 Janusz B. Wisniewski and L.K. Avalon
  */
 
+#include "engines/advancedDetector.h"
 #include "engines/util.h"
+#include "common/text-to-speech.h"
 #include "common/config-manager.h"
 #include "common/debug.h"
 #include "common/debug-channels.h"
@@ -181,6 +183,9 @@ bool CGE2Engine::hasFeature(EngineFeature f) const {
 }
 
 Common::Error CGE2Engine::run() {
+	Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+	if (ttsMan != nullptr)
+		ttsMan->setLanguage(Common::getLanguageCode(getLanguage()));
 	syncSoundSettings();
 	initGraphics(kScrWidth, kScrHeight);
 
@@ -195,4 +200,8 @@ Common::Error CGE2Engine::run() {
 	return Common::kNoError;
 }
 
+Common::Language CGE2Engine::getLanguage() const {
+	return _gameDescription->language;
+}
+
 } // End of namespace CGE2
diff --git a/engines/cge2/cge2.h b/engines/cge2/cge2.h
index 2dcc670fb7..af20bdcb3c 100644
--- a/engines/cge2/cge2.h
+++ b/engines/cge2/cge2.h
@@ -157,6 +157,7 @@ public:
 	bool hasFeature(EngineFeature f) const override;
 	bool canSaveGameStateCurrently() override;
 	bool canLoadGameStateCurrently() override;
+	Common::Language getLanguage() const;
 	Common::Error saveGameState(int slot, const Common::String &desc, bool isAutosave = false) override;
 	Common::Error loadGameState(int slot) override;
 	Common::Error run() override;
diff --git a/engines/cge2/detection.cpp b/engines/cge2/detection.cpp
index f5c8c7cb79..8146ae2d2d 100644
--- a/engines/cge2/detection.cpp
+++ b/engines/cge2/detection.cpp
@@ -38,6 +38,8 @@ static const DebugChannelDef debugFlagList[] = {
 namespace CGE2 {
 
 #define GAMEOPTION_COLOR_BLIND_DEFAULT_OFF  GUIO_GAMEOPTIONS1
+#define GAMEOPTION_TTS_OBJECTS				GUIO_GAMEOPTIONS2
+#define GAMEOPTION_TTS_SPEECH				GUIO_GAMEOPTIONS3
 
 static const PlainGameDescriptor CGE2Games[] = {
 		{ "sfinx", "Sfinx" },
@@ -49,42 +51,42 @@ static const ADGameDescription gameDescriptions[] = {
 			"sfinx", "Freeware",
 			AD_ENTRY2s("vol.cat", "21197b287d397c53261b6616bf0dd880", 129024,
 					   "vol.dat", "de14291869a8eb7c2732ab783c7542ef", 34180844),
-			Common::PL_POL, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO1(GAMEOPTION_COLOR_BLIND_DEFAULT_OFF)
+			Common::PL_POL, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO2(GAMEOPTION_COLOR_BLIND_DEFAULT_OFF, GAMEOPTION_TTS_OBJECTS)
 		},
 
 		{
 			"sfinx", "Freeware v1.0",
 			AD_ENTRY2s("vol.cat", "aa402aed24a72c53a4d1211c456b79dd", 129024,
 					   "vol.dat", "5966ac26d91d664714349669f9dd09b5", 34180164),
-			Common::PL_POL, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO1(GAMEOPTION_COLOR_BLIND_DEFAULT_OFF)
+			Common::PL_POL, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO2(GAMEOPTION_COLOR_BLIND_DEFAULT_OFF, GAMEOPTION_TTS_OBJECTS)
 		},
 
 		{
 			"sfinx", "Freeware v1.1",
 			AD_ENTRY2s("vol.cat", "aa402aed24a72c53a4d1211c456b79dd", 129024,
 					   "vol.dat", "5966ac26d91d664714349669f9dd09b5", 34180367),
-			Common::PL_POL, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO1(GAMEOPTION_COLOR_BLIND_DEFAULT_OFF)
+			Common::PL_POL, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO2(GAMEOPTION_COLOR_BLIND_DEFAULT_OFF, GAMEOPTION_TTS_OBJECTS)
 		},
 
 		{
 			"sfinx", "Freeware v0.3",
 			AD_ENTRY2s("vol.cat", "f158e469dccbebc5a632eb848df89779", 129024,
 					   "vol.dat", "d40a6b4ae173d6930be54ba56bee15d5", 34183430),
-			Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO1(GAMEOPTION_COLOR_BLIND_DEFAULT_OFF)
+			Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO3(GAMEOPTION_COLOR_BLIND_DEFAULT_OFF, GAMEOPTION_TTS_OBJECTS, GAMEOPTION_TTS_SPEECH)
 		},
 
 		{
 			"sfinx", "Freeware v1.0",
 			AD_ENTRY2s("vol.cat", "f158e469dccbebc5a632eb848df89779", 129024,
 					   "vol.dat", "d40a6b4ae173d6930be54ba56bee15d5", 34183443),
-			Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO1(GAMEOPTION_COLOR_BLIND_DEFAULT_OFF)
+			Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO3(GAMEOPTION_COLOR_BLIND_DEFAULT_OFF, GAMEOPTION_TTS_OBJECTS, GAMEOPTION_TTS_SPEECH)
 		},
 
 		{
 			"sfinx", "Freeware v1.1",
 			AD_ENTRY2s("vol.cat", "f158e469dccbebc5a632eb848df89779", 129024,
 					   "vol.dat", "d40a6b4ae173d6930be54ba56bee15d5", 34182773),
-			Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO1(GAMEOPTION_COLOR_BLIND_DEFAULT_OFF)
+			Common::EN_ANY, Common::kPlatformDOS, ADGF_NO_FLAGS, GUIO3(GAMEOPTION_COLOR_BLIND_DEFAULT_OFF, GAMEOPTION_TTS_OBJECTS, GAMEOPTION_TTS_SPEECH)
 		},
 
 		AD_TABLE_END_MARKER
@@ -101,6 +103,28 @@ static const ADExtraGuiOptionsMap optionsList[] = {
 			}
 		},
 
+#ifdef USE_TTS
+	{
+		GAMEOPTION_TTS_OBJECTS,
+		{
+			_s("Enable Text to Speech for Objects and Options"),
+			_s("Use TTS to read the descriptions (if TTS is available)"),
+			"tts_enabled_objects",
+			false
+		}
+	},
+
+	{
+		GAMEOPTION_TTS_SPEECH,
+		{
+			_s("Enable Text to Speech for Subtitles"),
+			_s("Use TTS to read the subtitles (if TTS is available)"),
+			"tts_enabled_speech",
+			false
+		}
+	},
+#endif
+
 		AD_EXTRA_GUI_OPTIONS_TERMINATOR
 };
 
diff --git a/engines/cge2/snail.cpp b/engines/cge2/snail.cpp
index eb95b9cd52..e8e30ac6c9 100644
--- a/engines/cge2/snail.cpp
+++ b/engines/cge2/snail.cpp
@@ -31,6 +31,7 @@
 #include "cge2/text.h"
 #include "cge2/sound.h"
 #include "cge2/events.h"
+#include "common/config-manager.h"
 
 namespace CGE2 {
 
@@ -656,7 +657,8 @@ void CGE2Engine::snSay(Sprite *spr, int val) {
 				i -= 100;
 			int16 oldRepeat = _sound->getRepeat();
 			_sound->setRepeat(1);
-			snSound(spr, i, Audio::Mixer::kSpeechSoundType);
+			if (!ConfMan.getBool("tts_enabled_speech") || getLanguage() == Common::PL_POL)
+				snSound(spr, i, Audio::Mixer::kSpeechSoundType);
 			_sound->setRepeat(oldRepeat);
 			_soundStat._wait = &_sound->_smpinf._counter;
 		}
diff --git a/engines/cge2/talk.cpp b/engines/cge2/talk.cpp
index 8bd55220f8..9ea8e2c678 100644
--- a/engines/cge2/talk.cpp
+++ b/engines/cge2/talk.cpp
@@ -28,6 +28,9 @@
 #include "cge2/general.h"
 #include "cge2/talk.h"
 
+#include "common/config-manager.h"
+#include "common/text-to-speech.h"
+
 namespace CGE2 {
 
 void CGE2Engine::setAutoColors() {
@@ -111,6 +114,10 @@ uint16 Font::width(const char *text) {
 
 Talk::Talk(CGE2Engine *vm, const char *text, TextBoxStyle mode, ColorBank color, bool wideSpace)
 	: Sprite(vm), _mode(mode), _created(false), _wideSpace(wideSpace), _vm(vm) {
+	Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+	if (ttsMan != nullptr && ConfMan.getBool("tts_enabled_speech"))
+		ttsMan->say(text);
+
 	_color = _vm->_font->_colorSet[color];
 
 	if (color == kCBRel)
@@ -259,6 +266,10 @@ void InfoLine::update(const char *text) {
 
 	_oldText = text;
 
+	Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+	if (text && ttsMan != nullptr && ConfMan.getBool("tts_enabled_objects"))
+		ttsMan->say(text);
+
 	uint16 w = _ext->_shpList->_w;
 	uint16 h = _ext->_shpList->_h;
 	uint8 *v = _ext->_shpList->_v;
diff --git a/engines/cge2/vmenu.cpp b/engines/cge2/vmenu.cpp
index 07b33a8c8f..95a6bb913d 100644
--- a/engines/cge2/vmenu.cpp
+++ b/engines/cge2/vmenu.cpp
@@ -25,6 +25,8 @@
  * Copyright (c) 1994-1997 Janusz B. Wisniewski and L.K. Avalon
  */
 
+#include "common/config-manager.h"
+#include "common/text-to-speech.h"
 #include "cge2/text.h"
 #include "cge2/vmenu.h"
 #include "cge2/events.h"
@@ -83,7 +85,7 @@ MenuBar::MenuBar(CGE2Engine *vm, uint16 w, byte *c) : Talk(vm) {
 VMenu *VMenu::_addr = nullptr;
 
 VMenu::VMenu(CGE2Engine *vm, Common::Array<Choice *> list, V2D pos, ColorBank col)
-	: Talk(vm, vmGather(list), kTBRect, col), _menu(list), _bar(nullptr), _items(list.size()), _vm(vm) {
+	: Talk(vm, vmGather(list), kTBRect, col), _menu(list), _bar(nullptr), _items(list.size()), _vm(vm), _lastN(2) {
 	delete[] _vmgt; // Lefotver of vmGather.
 
 	_addr = this;
@@ -151,6 +153,12 @@ void VMenu::touch(uint16 mask, V2D pos, Common::KeyCode keyCode) {
 		_bar->gotoxyz(V2D(_vm, _pos2D.x, _pos2D.y + kTextVMargin + n * h - kMenuBarVerticalMargin));
 		n = _items - 1 - n;
 
+		Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+		if (_lastN != n) {
+			ttsMan->say(_menu[n]->_text, Common::TextToSpeechManager::INTERRUPT);
+			_lastN = n;
+		}
+
 		if (ok && (mask & kMouseLeftUp)) {
 			_items = 0;
 			_vm->_commandHandlerTurbo->addCommand(kCmdKill, -1, 0, this);
diff --git a/engines/cge2/vmenu.h b/engines/cge2/vmenu.h
index 883fcd2f1a..cb9303952d 100644
--- a/engines/cge2/vmenu.h
+++ b/engines/cge2/vmenu.h
@@ -76,6 +76,7 @@ public:
 	char *_vmgt;
 	static VMenu *_addr;
 	int _recent;
+	int _lastN;
 	MenuBar *_bar;
 
 	VMenu(CGE2Engine *vm, Common::Array<Choice *> list, V2D pos, ColorBank col);




More information about the Scummvm-git-logs mailing list