[Scummvm-git-logs] scummvm master -> 3b6d25da1468b188498f695ce5b73529701917a9
sev-
noreply at scummvm.org
Thu Aug 21 08:28:15 UTC 2025
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
3b6d25da14 SCUMM: Add text-to-speech (TTS)
Commit: 3b6d25da1468b188498f695ce5b73529701917a9
https://github.com/scummvm/scummvm/commit/3b6d25da1468b188498f695ce5b73529701917a9
Author: ellm135 (ellm13531 at gmail.com)
Date: 2025-08-21T10:28:12+02:00
Commit Message:
SCUMM: Add text-to-speech (TTS)
Changed paths:
engines/scumm/actor.cpp
engines/scumm/charset-fontdata.cpp
engines/scumm/charset.h
engines/scumm/detection.h
engines/scumm/detection_tables.h
engines/scumm/dialogs.cpp
engines/scumm/dialogs.h
engines/scumm/gfx_gui.cpp
engines/scumm/input.cpp
engines/scumm/metaengine.cpp
engines/scumm/room.cpp
engines/scumm/script.cpp
engines/scumm/script_v0.cpp
engines/scumm/script_v2.cpp
engines/scumm/script_v5.cpp
engines/scumm/scumm.cpp
engines/scumm/scumm.h
engines/scumm/scumm_v7.h
engines/scumm/sound.cpp
engines/scumm/string.cpp
engines/scumm/string_v7.cpp
engines/scumm/verbs.cpp
diff --git a/engines/scumm/actor.cpp b/engines/scumm/actor.cpp
index 1770e4a0bc5..7c48e4923aa 100644
--- a/engines/scumm/actor.cpp
+++ b/engines/scumm/actor.cpp
@@ -3532,6 +3532,9 @@ void ScummEngine::actorTalk(const byte *msg) {
if (VAR_CHARCOUNT != 0xFF)
VAR(VAR_CHARCOUNT) = 0;
_haveActorSpeechMsg = true;
+#ifdef USE_TTS
+ stopTextToSpeech();
+#endif
displayDialog();
}
@@ -3589,6 +3592,9 @@ void ScummEngine::stopTalk() {
setTalkingActor(0);
}
+#ifdef USE_TTS
+ stopTextToSpeech();
+#endif
_keepText = false;
if (_game.version >= 7) {
#ifdef ENABLE_SCUMM_7_8
diff --git a/engines/scumm/charset-fontdata.cpp b/engines/scumm/charset-fontdata.cpp
index f9c84c90654..7633ef58b63 100644
--- a/engines/scumm/charset-fontdata.cpp
+++ b/engines/scumm/charset-fontdata.cpp
@@ -654,6 +654,17 @@ static const byte specialCharsetData[] = {
0x10, 0x08, 0x00, 0x3c, 0x66, 0x66, 0x3c, 0x00,
};
+#ifdef USE_TTS
+
+static const uint16 specialCharactersEncoding[] = {
+ 0x0024, 0x0025, 0x0060, 0x0040, 0xc3bc, 0xc3a4, 0xc39c, 0xc3b6, // $, %, `, @, ü, ä, Ã, ö
+ 0xc384, 0xc396, 0xc39f, 0xc396, 0xc39f, 0xc384, 0xc39c, 0x0020, // Ã, Ã, Ã, Ã, Ã, Ã, Ã, â (replaced with space)
+ 0xc3a0, 0xc3a2, 0xc3a7, 0xc3a9, 0xc3a8, 0xc3aa, 0xc3af, 0xc3ae, // à , â, ç, é, è, ê, ï, î
+ 0xc3b4, 0xc3b9, 0xc3bb, 0xc3a1, 0xc3ac, 0xc3b2 // ô, ù, û, á, ì, ò
+};
+
+#endif
+
CharsetRendererV2::CharsetRendererV2(ScummEngine *vm, Common::Language language)
: CharsetRendererV3(vm) {
@@ -762,6 +773,126 @@ CharsetRendererV2::CharsetRendererV2(ScummEngine *vm, Common::Language language)
#endif
}
+#ifdef USE_TTS
+
+Common::U32String CharsetRendererV2::convertText(const Common::String &text, Common::Language language) const {
+ const byte *map = nullptr;
+ int mapLen = 0;
+ Common::CodePage encoding;
+
+ switch (language) {
+ case Common::EN_ANY:
+ case Common::EN_GRB:
+ case Common::EN_USA:
+ if (_vm->_game.version == 1 && !(_vm->_game.features & GF_DEMO)) {
+ map = englishCharsetDataV1;
+ mapLen = ARRAYSIZE(englishCharsetDataV1);
+ encoding = Common::CodePage::kUtf8;
+ } else {
+ return Common::U32String(text, Common::CodePage::kDos850);
+ }
+ break;
+ case Common::DE_DEU:
+ if (_vm->_game.version == 0) {
+ map = germanCharsetDataV0;
+ mapLen = ARRAYSIZE(germanCharsetDataV0);
+ } else {
+ map = germanCharsetDataV2;
+ mapLen = ARRAYSIZE(germanCharsetDataV2);
+ }
+ encoding = Common::CodePage::kUtf8;
+ break;
+ case Common::FR_FRA:
+ map = frenchCharsetDataV2;
+ mapLen = ARRAYSIZE(frenchCharsetDataV2);
+ encoding = Common::CodePage::kUtf8;
+ break;
+ case Common::IT_ITA:
+ map = italianCharsetDataV2;
+ mapLen = ARRAYSIZE(italianCharsetDataV2);
+ encoding = Common::CodePage::kUtf8;
+ break;
+ case Common::ES_ESP:
+ map = spanishCharsetDataV2;
+ mapLen = ARRAYSIZE(spanishCharsetDataV2);
+ encoding = Common::CodePage::kUtf8;
+ break;
+ case Common::RU_RUS:
+ map = russCharsetDataV2;
+ mapLen = ARRAYSIZE(russCharsetDataV2);
+ encoding = Common::CodePage::kDos866;
+
+ if ((_vm->_game.id != GID_MANIAC && _vm->_game.id != GID_ZAK) || _vm->_game.version != 2) {
+ return Common::U32String(text, Common::CodePage::kDos866);
+ }
+ break;
+ case Common::HE_ISR:
+ encoding = Common::CodePage::kDos862;
+ break;
+ default:
+ return Common::U32String(text, _vm->getDialogCodePage());
+ }
+
+ const byte *bytes = (const byte *)text.c_str();
+ byte *convertedBytes = new byte[text.size() * 2 + 1];
+
+ int i = 0;
+ for (const byte *b = bytes; *b; ++b) {
+ if (map) {
+ // Change DOS 850 code for © to UTF-8
+ if (language != Common::RU_RUS && *b == 0xb8) {
+ convertedBytes[i] = 0xc2;
+ convertedBytes[i + 1] = 0xa9;
+ i += 2;
+ continue;
+ }
+
+ bool inMap = false;
+ for (int j = 0; j < mapLen; j += 2) {
+ if (*b == map[j]) {
+ if (language != Common::RU_RUS) {
+ byte firstByte = (specialCharactersEncoding[map[j + 1]] >> 8) & 0xff;
+
+ if (firstByte != 0) {
+ convertedBytes[i] = firstByte;
+ convertedBytes[i + 1] = specialCharactersEncoding[map[j + 1]] & 0xff;
+ i++;
+ } else {
+ convertedBytes[i] = specialCharactersEncoding[map[j + 1]] & 0xff;
+ }
+ } else {
+ convertedBytes[i] = map[j + 1];
+ }
+
+ inMap = true;
+ break;
+ }
+ }
+
+ if (!inMap) {
+ convertedBytes[i] = *b;
+ }
+ } else {
+ convertedBytes[i] = *b;
+
+ if (language == Common::HE_ISR) {
+ convertedBytes[i] += 63;
+ }
+ }
+
+ i++;
+ }
+
+ convertedBytes[i] = 0;
+
+ Common::U32String result((char *)convertedBytes, encoding);
+ delete[] convertedBytes;
+
+ return result;
+}
+
+#endif
+
CharsetRendererV2::~CharsetRendererV2() {
if (_deleteFontPtr)
delete[] _fontPtr;
diff --git a/engines/scumm/charset.h b/engines/scumm/charset.h
index 77742e15662..7f288d7b4df 100644
--- a/engines/scumm/charset.h
+++ b/engines/scumm/charset.h
@@ -115,6 +115,10 @@ public:
virtual byte getColor() { return _color; }
void saveLoadWithSerializer(Common::Serializer &ser);
+
+#ifdef USE_TTS
+ virtual Common::U32String convertText(const Common::String &text, Common::Language language) const { return Common::U32String(text, _vm->getDialogCodePage()); }
+#endif
};
class CharsetRendererCommon : public CharsetRenderer {
@@ -281,6 +285,10 @@ public:
void setCurID(int32 id) override {}
int getCharWidth(uint16 chr) const override { return 8; }
+
+#ifdef USE_TTS
+ Common::U32String convertText(const Common::String &text, Common::Language language) const override;
+#endif
};
class CharsetRendererMac : public CharsetRendererCommon {
diff --git a/engines/scumm/detection.h b/engines/scumm/detection.h
index ae5f5efabfa..19eaea2e458 100644
--- a/engines/scumm/detection.h
+++ b/engines/scumm/detection.h
@@ -37,6 +37,7 @@ namespace Scumm {
#define GAMEOPTION_NETWORK GUIO_GAMEOPTIONS6
#define GAMEOPTION_COPY_PROTECTION GUIO_GAMEOPTIONS7
#define GAMEOPTION_USE_REMASTERED_AUDIO GUIO_GAMEOPTIONS8
+#define GAMEOPTION_TTS GUIO_GAMEOPTIONS9
/**
* Descriptor of a specific SCUMM game. Used internally to store
diff --git a/engines/scumm/detection_tables.h b/engines/scumm/detection_tables.h
index 942847b8e16..4deb7273769 100644
--- a/engines/scumm/detection_tables.h
+++ b/engines/scumm/detection_tables.h
@@ -154,241 +154,241 @@ static const PlainGameDescriptor gameDescriptions[] = {
// only a single unique variant. This is used to help the detector quickly
// decide whether it has to worry about distinguishing multiple variants or not.
static const GameSettings gameVariantsTable[] = {
- {"maniac", "Apple II", 0, GID_MANIAC, 0, 0, MDT_APPLEIIGS, 0, Common::kPlatformApple2GS, GUIO4(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ORIGINALGUI, GAMEOPTION_ENHANCEMENTS)},
- {"maniac", "C64", 0, GID_MANIAC, 0, 0, MDT_C64, 0, Common::kPlatformC64, GUIO3(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ORIGINALGUI) },
- {"maniac", "C64 Demo", 0, GID_MANIAC, 0, 0, MDT_C64, GF_DEMO, Common::kPlatformC64, GUIO3(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ORIGINALGUI) },
- {"maniac", "V1", "v1", GID_MANIAC, 1, 0, MDT_PCSPK | MDT_PCJR, 0, Common::kPlatformDOS, GUIO10(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGABW, GUIO_RENDERCGACOMP, GUIO_RENDERCGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION)},
- {"maniac", "V1 Demo", "v1", GID_MANIAC, 1, 0, MDT_PCSPK | MDT_PCJR, GF_DEMO, Common::kPlatformDOS, GUIO8(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGABW, GUIO_RENDERCGACOMP, GUIO_RENDERCGA, GAMEOPTION_ORIGINALGUI)},
- {"maniac", "NES", 0, GID_MANIAC, 1, 0, MDT_NONE, 0, Common::kPlatformNES, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"maniac", "V2", "v2", GID_MANIAC, 2, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO9(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION)},
- {"maniac", "V2 Demo", "v2", GID_MANIAC, 2, 0, MDT_PCSPK | MDT_PCJR, GF_DEMO, Common::kPlatformDOS, GUIO7(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ORIGINALGUI)},
- {"maniac", "Remastered", 0, GID_MANIAC, 2, 0, MDT_PCSPK | MDT_PCJR, GF_DOUBLEFINE_PAK, Common::kPlatformDOS, GUIO9(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION)},
-
- {"zak", "V1", "v1", GID_ZAK, 1, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO9(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGABW, GUIO_RENDERCGACOMP, GUIO_RENDERCGA, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION)},
- {"zak", "V2", "v2", GID_ZAK, 2, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO8(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION)},
- {"zak", "FM-TOWNS", 0, GID_ZAK, 3, 0, MDT_TOWNS, GF_OLD256 | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"zakloom", "FM-TOWNS", 0, GID_ZAK, 3, 0, MDT_TOWNS, GF_OLD256 | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ORIGINALGUI)},
- {"indyloom", "FM-TOWNS", 0, GID_ZAK, 3, 0, MDT_TOWNS, GF_OLD256 | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ORIGINALGUI)},
- {"indyzak", "FM-TOWNS", 0, GID_ZAK, 3, 0, MDT_TOWNS, GF_OLD256 | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ORIGINALGUI)},
-
- {"indy3", "EGA", "ega", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, 0, UNK, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"indy3", "Mac", "ega", GID_INDY3, 3, 0, MDT_MACINTOSH, 0, UNK, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERMACINTOSHBW, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GUIO_NOASPECT)},
- {"indy3", "No AdLib", "ega", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERCGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"indy3", "VGA", "vga", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, GF_OLD256 | GF_FEW_LOCALS, Common::kPlatformDOS, GUIO4(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"indy3", "Steam", "steam", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, GF_OLD256 | GF_FEW_LOCALS, UNK, GUIO4(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"indy3", "FM-TOWNS", 0, GID_INDY3, 3, 0, MDT_TOWNS, GF_OLD256 | GF_FEW_LOCALS | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
-
- {"loom", "EGA", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO6(GUIO_NOSPEECH, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION)},
- {"loom", "Mac", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO6(GUIO_NOSPEECH, GUIO_RENDERMACINTOSHBW, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GUIO_NOASPECT)},
- {"loom", "No AdLib", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS, 0, UNK, GUIO4(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"loom", "PC-Engine", 0, GID_LOOM, 3, 0, MDT_NONE, GF_AUDIOTRACKS | GF_OLD256 | GF_16BIT_COLOR, Common::kPlatformPCEngine, GUIO3(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS)},
- {"loom", "FM-TOWNS", 0, GID_LOOM, 3, 0, MDT_TOWNS, GF_AUDIOTRACKS | GF_OLD256, Common::kPlatformFMTowns, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GUIO_NOASPECT, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"loom", "VGA", "vga", GID_LOOM, 4, 0, MDT_NONE, GF_AUDIOTRACKS, Common::kPlatformDOS, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"loom", "Steam", "steam", GID_LOOM, 4, 0, MDT_NONE, GF_AUDIOTRACKS, UNK, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"loom", "Demo", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_DEMO, UNK, GUIO4(GUIO_NOSPEECH, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ORIGINALGUI)},
-
- {"pass", 0, 0, GID_PASS, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, GF_16COLOR, Common::kPlatformDOS, GUIO5(GUIO_NOSPEECH, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GUIO_NOMIDI, GAMEOPTION_ORIGINALGUI)},
-
- {"monkey", "VGA", "vga", GID_MONKEY_VGA, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO5(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION)},
- {"monkey", "VGA Demo", "vga", GID_MONKEY_VGA, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_DEMO, UNK, GUIO3(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ORIGINALGUI)},
- {"monkey", "EGA", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_16COLOR, Common::kPlatformDOS, GUIO7(GUIO_NOSPEECH, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"monkey", "No AdLib", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_PCJR, GF_16COLOR, Common::kPlatformAtariST, GUIO4(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"monkey", "Demo", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, GF_16COLOR | GF_DEMO, Common::kPlatformDOS, GUIO7(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ORIGINALGUI)},
- {"monkey", "CD", 0, GID_MONKEY, 5, 0, MDT_ADLIB, GF_AUDIOTRACKS, UNK, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"monkey", "SE", 0, GID_MONKEY, 5, 0, MDT_ADLIB, GF_AUDIOTRACKS | GF_DOUBLEFINE_PAK, UNK, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_USE_REMASTERED_AUDIO)},
- {"monkey", "Mac", 0, GID_MONKEY, 5, 0, MDT_MACINTOSH, 0, UNK, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GUIO_NOASPECT)},
- {"monkey", "FM-TOWNS", 0, GID_MONKEY, 5, 0, MDT_TOWNS, GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"monkey", "SEGA", 0, GID_MONKEY, 5, 0, MDT_NONE, GF_AUDIOTRACKS, Common::kPlatformSegaCD, GUIO4(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"monkey", "SE Talkie", 0, GID_MONKEY, 5, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_AUDIOTRACKS | GF_ULTIMATE_TALKIE, UNK, GUIO2(GUIO_RENDEREGA, GAMEOPTION_ORIGINALGUI)},
- {"monkey2", "", 0, GID_MONKEY2, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO5(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION)},
- {"monkey2", "SE", 0, GID_MONKEY2, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_DOUBLEFINE_PAK, UNK, GUIO6(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_USE_REMASTERED_AUDIO)},
- {"monkey2", "Demo", 0, GID_MONKEY2, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_DEMO, UNK, GUIO2(GUIO_NOSPEECH, GAMEOPTION_ENHANCEMENTS)},
- {"monkey2", "Amiga", 0, GID_MONKEY2, 5, 0, MDT_AMIGA, 0, Common::kPlatformAmiga, GUIO5(GUIO_NOSPEECH, GUIO_MIDIAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION)},
- {"monkey2", "Mac", 0, GID_MONKEY2, 5, 0, MDT_MACINTOSH, 0, UNK, GUIO5(GUIO_NOSPEECH, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GUIO_NOASPECT)},
- {"monkey2", "FM-TOWNS", 0, GID_MONKEY2, 5, 0, MDT_PCSPK | MDT_TOWNS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, Common::kPlatformFMTowns, GUIO7(GUIO_NOSPEECH, GUIO_MIDITOWNS, GUIO_MIDIADLIB, GUIO_MIDIMT32, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"monkey2", "SE Talkie",0, GID_MONKEY2, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_ULTIMATE_TALKIE, UNK, GUIO2(GUIO_RENDEREGA, GAMEOPTION_ORIGINALGUI)},
- {"atlantis", "", 0, GID_INDY4, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO3(GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"atlantis", "Steam", "steam", GID_INDY4, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO3(GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"atlantis", "Floppy", 0, GID_INDY4, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO5(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION)},
- {"atlantis", "Amiga", 0, GID_INDY4, 5, 0, MDT_AMIGA, 0, Common::kPlatformAmiga, GUIO5(GUIO_NOSPEECH, GUIO_MIDIAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION)},
- {"atlantis", "Mac", 0, GID_INDY4, 5, 0, 0, 0, UNK, GUIO3(GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GUIO_NOASPECT)},
- {"atlantis", "Mac Floppy", 0, GID_INDY4, 5, 0, 0, 0, UNK, GUIO5(GUIO_NOSPEECH, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GUIO_NOASPECT)},
- {"atlantis", "FM-TOWNS", 0, GID_INDY4, 5, 0, MDT_TOWNS | MDT_ADLIB, 0, Common::kPlatformFMTowns, GUIO5(GUIO_MIDITOWNS, GUIO_MIDIADLIB, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
-
- {"tentacle", "", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_GM, GF_USE_KEY, UNK, GUIO3(GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"tentacle", "Remastered", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_GM, GF_USE_KEY | GF_DOUBLEFINE_PAK, UNK, GUIO4(GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_USE_REMASTERED_AUDIO)},
- {"tentacle", "Floppy", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_GM, GF_USE_KEY, UNK, GUIO4(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
-
- {"samnmax", "", 0, GID_SAMNMAX, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_GM, GF_USE_KEY, UNK, GUIO3(GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
- {"samnmax", "Floppy", 0, GID_SAMNMAX, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_GM, GF_USE_KEY, UNK, GUIO4(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI)},
-
- {"ft", "", 0, GID_FT, 7, 0, MDT_NONE, 0, UNK, GUIO4(GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO)},
- {"ft", "Remastered", 0, GID_FT, 7, 0, MDT_NONE, GF_DOUBLEFINE_PAK, UNK, GUIO4(GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO)},
- {"ft", "Demo", 0, GID_FT, 7, 0, MDT_NONE, GF_DEMO, UNK, GUIO3(GUIO_NOMIDI, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO)},
-
- {"dig", "", 0, GID_DIG, 7, 0, MDT_NONE, 0, UNK, GUIO4(GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO)},
- {"dig", "Demo", 0, GID_DIG, 7, 0, MDT_NONE, GF_DEMO, UNK, GUIO3(GUIO_NOMIDI, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO)},
- {"dig", "Steam", "steam", GID_DIG, 7, 0, MDT_NONE, 0, UNK, GUIO4(GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO)},
-
- {"comi", "", 0, GID_CMI, 8, 0, MDT_NONE, 0, Common::kPlatformWindows, GUIO5(GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO)},
- {"comi", "Demo", 0, GID_CMI, 8, 0, MDT_NONE, GF_DEMO, Common::kPlatformWindows, GUIO5(GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO)},
+ {"maniac", "Apple II", 0, GID_MANIAC, 0, 0, MDT_APPLEIIGS, 0, Common::kPlatformApple2GS, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ORIGINALGUI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_TTS)},
+ {"maniac", "C64", 0, GID_MANIAC, 0, 0, MDT_C64, 0, Common::kPlatformC64, GUIO4(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS) },
+ {"maniac", "C64 Demo", 0, GID_MANIAC, 0, 0, MDT_C64, GF_DEMO, Common::kPlatformC64, GUIO4(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS) },
+ {"maniac", "V1", "v1", GID_MANIAC, 1, 0, MDT_PCSPK | MDT_PCJR, 0, Common::kPlatformDOS, GUIO11(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGABW, GUIO_RENDERCGACOMP, GUIO_RENDERCGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_TTS)},
+ {"maniac", "V1 Demo", "v1", GID_MANIAC, 1, 0, MDT_PCSPK | MDT_PCJR, GF_DEMO, Common::kPlatformDOS, GUIO9(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGABW, GUIO_RENDERCGACOMP, GUIO_RENDERCGA, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"maniac", "NES", 0, GID_MANIAC, 1, 0, MDT_NONE, 0, Common::kPlatformNES, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"maniac", "V2", "v2", GID_MANIAC, 2, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO10(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_TTS)},
+ {"maniac", "V2 Demo", "v2", GID_MANIAC, 2, 0, MDT_PCSPK | MDT_PCJR, GF_DEMO, Common::kPlatformDOS, GUIO8(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"maniac", "Remastered", 0, GID_MANIAC, 2, 0, MDT_PCSPK | MDT_PCJR, GF_DOUBLEFINE_PAK, Common::kPlatformDOS, GUIO10(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_TTS)},
+
+ {"zak", "V1", "v1", GID_ZAK, 1, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO10(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGABW, GUIO_RENDERCGACOMP, GUIO_RENDERCGA, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_TTS)},
+ {"zak", "V2", "v2", GID_ZAK, 2, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO9(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_TTS)},
+ {"zak", "FM-TOWNS", 0, GID_ZAK, 3, 0, MDT_TOWNS, GF_OLD256 | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO7(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"zakloom", "FM-TOWNS", 0, GID_ZAK, 3, 0, MDT_TOWNS, GF_OLD256 | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"indyloom", "FM-TOWNS", 0, GID_ZAK, 3, 0, MDT_TOWNS, GF_OLD256 | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"indyzak", "FM-TOWNS", 0, GID_ZAK, 3, 0, MDT_TOWNS, GF_OLD256 | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+
+ {"indy3", "EGA", "ega", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, 0, UNK, GUIO7(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"indy3", "Mac", "ega", GID_INDY3, 3, 0, MDT_MACINTOSH, 0, UNK, GUIO7(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERMACINTOSHBW, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GUIO_NOASPECT, GAMEOPTION_TTS)},
+ {"indy3", "No AdLib", "ega", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERCGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"indy3", "VGA", "vga", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, GF_OLD256 | GF_FEW_LOCALS, Common::kPlatformDOS, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"indy3", "Steam", "steam", GID_INDY3, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, GF_OLD256 | GF_FEW_LOCALS, UNK, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"indy3", "FM-TOWNS", 0, GID_INDY3, 3, 0, MDT_TOWNS, GF_OLD256 | GF_FEW_LOCALS | GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO7(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+
+ {"loom", "EGA", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO7(GUIO_NOSPEECH, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_TTS)},
+ {"loom", "Mac", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_PCJR, 0, UNK, GUIO7(GUIO_NOSPEECH, GUIO_RENDERMACINTOSHBW, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GUIO_NOASPECT, GAMEOPTION_TTS)},
+ {"loom", "No AdLib", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS, 0, UNK, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"loom", "PC-Engine", 0, GID_LOOM, 3, 0, MDT_NONE, GF_AUDIOTRACKS | GF_OLD256 | GF_16BIT_COLOR, Common::kPlatformPCEngine, GUIO4(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_TTS)},
+ {"loom", "FM-TOWNS", 0, GID_LOOM, 3, 0, MDT_TOWNS, GF_AUDIOTRACKS | GF_OLD256, Common::kPlatformFMTowns, GUIO7(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GUIO_NOASPECT, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"loom", "VGA", "vga", GID_LOOM, 4, 0, MDT_NONE, GF_AUDIOTRACKS, Common::kPlatformDOS, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"loom", "Steam", "steam", GID_LOOM, 4, 0, MDT_NONE, GF_AUDIOTRACKS, UNK, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"loom", "Demo", "ega", GID_LOOM, 3, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_DEMO, UNK, GUIO5(GUIO_NOSPEECH, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+
+ {"pass", 0, 0, GID_PASS, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, GF_16COLOR, Common::kPlatformDOS, GUIO6(GUIO_NOSPEECH, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GUIO_NOMIDI, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+
+ {"monkey", "VGA", "vga", GID_MONKEY_VGA, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO6(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_TTS)},
+ {"monkey", "VGA Demo", "vga", GID_MONKEY_VGA, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_DEMO, UNK, GUIO4(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"monkey", "EGA", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_16COLOR, Common::kPlatformDOS, GUIO8(GUIO_NOSPEECH, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"monkey", "No AdLib", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_PCJR, GF_16COLOR, Common::kPlatformAtariST, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"monkey", "Demo", "ega", GID_MONKEY_EGA, 4, 0, MDT_PCSPK | MDT_PCJR | MDT_CMS | MDT_ADLIB, GF_16COLOR | GF_DEMO, Common::kPlatformDOS, GUIO8(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDERHERCGREEN, GUIO_RENDERHERCAMBER, GUIO_RENDERCGA, GUIO_RENDERAMIGA, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"monkey", "CD", 0, GID_MONKEY, 5, 0, MDT_ADLIB, GF_AUDIOTRACKS, UNK, GUIO6(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"monkey", "SE", 0, GID_MONKEY, 5, 0, MDT_ADLIB, GF_AUDIOTRACKS | GF_DOUBLEFINE_PAK, UNK, GUIO7(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_USE_REMASTERED_AUDIO, GAMEOPTION_TTS)},
+ {"monkey", "Mac", 0, GID_MONKEY, 5, 0, MDT_MACINTOSH, 0, UNK, GUIO7(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GUIO_NOASPECT, GAMEOPTION_TTS)},
+ {"monkey", "FM-TOWNS", 0, GID_MONKEY, 5, 0, MDT_TOWNS, GF_AUDIOTRACKS, Common::kPlatformFMTowns, GUIO7(GUIO_NOSPEECH, GUIO_NOMIDI, GUIO_MIDITOWNS, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"monkey", "SEGA", 0, GID_MONKEY, 5, 0, MDT_NONE, GF_AUDIOTRACKS, Common::kPlatformSegaCD, GUIO5(GUIO_NOSPEECH, GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"monkey", "SE Talkie", 0, GID_MONKEY, 5, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_AUDIOTRACKS | GF_ULTIMATE_TALKIE, UNK, GUIO3(GUIO_RENDEREGA, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"monkey2", "", 0, GID_MONKEY2, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO6(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_TTS)},
+ {"monkey2", "SE", 0, GID_MONKEY2, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_DOUBLEFINE_PAK, UNK, GUIO7(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_USE_REMASTERED_AUDIO, GAMEOPTION_TTS)},
+ {"monkey2", "Demo", 0, GID_MONKEY2, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_DEMO, UNK, GUIO3(GUIO_NOSPEECH, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_TTS)},
+ {"monkey2", "Amiga", 0, GID_MONKEY2, 5, 0, MDT_AMIGA, 0, Common::kPlatformAmiga, GUIO6(GUIO_NOSPEECH, GUIO_MIDIAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_TTS)},
+ {"monkey2", "Mac", 0, GID_MONKEY2, 5, 0, MDT_MACINTOSH, 0, UNK, GUIO6(GUIO_NOSPEECH, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GUIO_NOASPECT, GAMEOPTION_TTS)},
+ {"monkey2", "FM-TOWNS", 0, GID_MONKEY2, 5, 0, MDT_PCSPK | MDT_TOWNS | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, Common::kPlatformFMTowns, GUIO8(GUIO_NOSPEECH, GUIO_MIDITOWNS, GUIO_MIDIADLIB, GUIO_MIDIMT32, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"monkey2", "SE Talkie",0, GID_MONKEY2, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, GF_ULTIMATE_TALKIE, UNK, GUIO3(GUIO_RENDEREGA, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"atlantis", "", 0, GID_INDY4, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO4(GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"atlantis", "Steam", "steam", GID_INDY4, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO4(GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"atlantis", "Floppy", 0, GID_INDY4, 5, 0, MDT_PCSPK | MDT_ADLIB | MDT_MIDI | MDT_PREFER_MT32, 0, UNK, GUIO6(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_TTS)},
+ {"atlantis", "Amiga", 0, GID_INDY4, 5, 0, MDT_AMIGA, 0, Common::kPlatformAmiga, GUIO6(GUIO_NOSPEECH, GUIO_MIDIAMIGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GAMEOPTION_TTS)},
+ {"atlantis", "Mac", 0, GID_INDY4, 5, 0, 0, 0, UNK, GUIO4(GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GUIO_NOASPECT, GAMEOPTION_TTS)},
+ {"atlantis", "Mac Floppy", 0, GID_INDY4, 5, 0, 0, 0, UNK, GUIO6(GUIO_NOSPEECH, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_COPY_PROTECTION, GUIO_NOASPECT, GAMEOPTION_TTS)},
+ {"atlantis", "FM-TOWNS", 0, GID_INDY4, 5, 0, MDT_TOWNS | MDT_ADLIB, 0, Common::kPlatformFMTowns, GUIO6(GUIO_MIDITOWNS, GUIO_MIDIADLIB, GAMEOPTION_TRIM_FMTOWNS_TO_200_PIXELS, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+
+ {"tentacle", "", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_GM, GF_USE_KEY, UNK, GUIO4(GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"tentacle", "Remastered", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_GM, GF_USE_KEY | GF_DOUBLEFINE_PAK, UNK, GUIO5(GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_USE_REMASTERED_AUDIO, GAMEOPTION_TTS)},
+ {"tentacle", "Floppy", 0, GID_TENTACLE, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_GM, GF_USE_KEY, UNK, GUIO5(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+
+ {"samnmax", "", 0, GID_SAMNMAX, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_GM, GF_USE_KEY, UNK, GUIO4(GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+ {"samnmax", "Floppy", 0, GID_SAMNMAX, 6, 0, MDT_ADLIB | MDT_MIDI | MDT_PREFER_GM, GF_USE_KEY, UNK, GUIO5(GUIO_NOSPEECH, GUIO_RENDEREGA, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_TTS)},
+
+ {"ft", "", 0, GID_FT, 7, 0, MDT_NONE, 0, UNK, GUIO5(GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO, GAMEOPTION_TTS)},
+ {"ft", "Remastered", 0, GID_FT, 7, 0, MDT_NONE, GF_DOUBLEFINE_PAK, UNK, GUIO5(GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO, GAMEOPTION_TTS)},
+ {"ft", "Demo", 0, GID_FT, 7, 0, MDT_NONE, GF_DEMO, UNK, GUIO4(GUIO_NOMIDI, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO, GAMEOPTION_TTS)},
+
+ {"dig", "", 0, GID_DIG, 7, 0, MDT_NONE, 0, UNK, GUIO5(GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO, GAMEOPTION_TTS)},
+ {"dig", "Demo", 0, GID_DIG, 7, 0, MDT_NONE, GF_DEMO, UNK, GUIO4(GUIO_NOMIDI, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO, GAMEOPTION_TTS)},
+ {"dig", "Steam", "steam", GID_DIG, 7, 0, MDT_NONE, 0, UNK, GUIO5(GUIO_NOMIDI, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO, GAMEOPTION_TTS)},
+
+ {"comi", "", 0, GID_CMI, 8, 0, MDT_NONE, 0, Common::kPlatformWindows, GUIO6(GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO, GAMEOPTION_TTS)},
+ {"comi", "Demo", 0, GID_CMI, 8, 0, MDT_NONE, GF_DEMO, Common::kPlatformWindows, GUIO6(GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_ORIGINALGUI, GAMEOPTION_LOWLATENCYAUDIO, GAMEOPTION_TTS)},
// Humongous Entertainment Scumm Version 6
- {"activity", "", 0, GID_HEGAME, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO2(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE)},
- {"funpack", 0, 0, GID_FUNPACK, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO2(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE)},
- {"fbpack", 0, 0, GID_HEGAME, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO2(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"activity", "", 0, GID_HEGAME, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"funpack", 0, 0, GID_FUNPACK, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"fbpack", 0, 0, GID_HEGAME, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
- {"brstorm", 0, 0, GID_FBEAR, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO2(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE)},
- {"fbear", "HE 62", 0, GID_FBEAR, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO2(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE)},
- {"fbear", "HE 70", 0, GID_FBEAR, 6, 70, MDT_NONE, GF_USE_KEY, Common::kPlatformWindows, GUIO3(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"brstorm", 0, 0, GID_FBEAR, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"fbear", "HE 62", 0, GID_FBEAR, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"fbear", "HE 70", 0, GID_FBEAR, 6, 70, MDT_NONE, GF_USE_KEY, Common::kPlatformWindows, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
- {"puttmoon", "", 0, GID_PUTTMOON, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO2(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE)},
- {"puttmoon", "Demo", 0, GID_HEGAME, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO2(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE)},
- {"puttmoon", "HE 70", 0, GID_PUTTMOON, 6, 70, MDT_NONE, GF_USE_KEY, Common::kPlatformWindows, GUIO3(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"puttmoon", "", 0, GID_PUTTMOON, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"puttmoon", "Demo", 0, GID_HEGAME, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"puttmoon", "HE 70", 0, GID_PUTTMOON, 6, 70, MDT_NONE, GF_USE_KEY, Common::kPlatformWindows, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
- {"puttputt", "HE 60", 0, GID_HEGAME, 6, 60, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO2(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE)},
- {"puttputt", "HE 61", 0, GID_HEGAME, 6, 61, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO2(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE)},
- {"puttputt", "HE 62", 0, GID_HEGAME, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO2(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE)},
- {"puttputt", "Demo", 0, GID_PUTTDEMO, 6, 60, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO2(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"puttputt", "HE 60", 0, GID_HEGAME, 6, 60, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"puttputt", "HE 61", 0, GID_HEGAME, 6, 61, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"puttputt", "HE 62", 0, GID_HEGAME, 6, 62, MDT_ADLIB | MDT_MIDI, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"puttputt", "Demo", 0, GID_PUTTDEMO, 6, 60, MDT_ADLIB | MDT_MIDI, GF_USE_KEY, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// The following are meant to be generic HE game variants and as such do
// not specify a game ID. Make sure that these are last in the table, else
// they'll override more specific entries that follow later on.
- {"", "HE 70", 0, GID_HEGAME, 6, 70, MDT_NONE, GF_USE_KEY, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"", "HE 70", 0, GID_HEGAME, 6, 70, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// HE CUP demos
- {"", "HE CUP", 0, GID_HECUP, 6, 200, MDT_NONE, 0, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOSPEECH)},
+ {"", "HE CUP", 0, GID_HECUP, 6, 200, MDT_NONE, 0, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOSPEECH, GAMEOPTION_TTS)},
// Humongous Entertainment Scumm Version 7.1
// The first version to use 640x480 resolution and wizImages
// There are also 7.1 versions of freddemo, airdemo and farmdemo
- {"catalog", "", 0, GID_HEGAME, 6, 71, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"farm", "", 0, GID_HEGAME, 6, 71, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"freddi", "", 0, GID_HEGAME, 6, 71, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"freddi", "HE 71", 0, GID_FREDDI, 6, 71, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"freddi", "HE 73", 0, GID_FREDDI, 6, 73, MDT_NONE, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"catalog", "", 0, GID_HEGAME, 6, 71, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"farm", "", 0, GID_HEGAME, 6, 71, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"freddi", "", 0, GID_HEGAME, 6, 71, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"freddi", "HE 71", 0, GID_FREDDI, 6, 71, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"freddi", "HE 73", 0, GID_FREDDI, 6, 73, MDT_NONE, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// Humongous Entertainment Scumm Version 7.2
- {"airport", "", 0, GID_HEGAME, 6, 72, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"airport", "", 0, GID_HEGAME, 6, 72, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// Changed o_getResourceSize to cover all resource types
- {"puttzoo", "", 0, GID_PUTTZOO, 6, 73, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"puttzoo", "HE 72", 0, GID_PUTTZOO, 6, 72, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"puttzoo", "HE 98.5", 0, GID_PUTTZOO, 6, 98, MDT_NONE, GF_USE_KEY | GF_HE_985, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"puttzoo", "HE 99", 0, GID_PUTTZOO, 6, 99, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"puttzoo", "HE 100", 0, GID_PUTTZOO, 6, 100, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"puttzoo", "", 0, GID_PUTTZOO, 6, 73, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"puttzoo", "HE 72", 0, GID_PUTTZOO, 6, 72, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"puttzoo", "HE 98.5", 0, GID_PUTTZOO, 6, 98, MDT_NONE, GF_USE_KEY | GF_HE_985, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"puttzoo", "HE 99", 0, GID_PUTTZOO, 6, 99, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"puttzoo", "HE 100", 0, GID_PUTTZOO, 6, 100, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// Added VAR_PLATFORM variable
- {"jungle", "", 0, GID_HEGAME, 6, 74, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"jungle", "", 0, GID_HEGAME, 6, 74, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// Humongous Entertainment Scumm Version 8.0 ? Scummsrc.80
- {"freddi2", "", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"pajama", "", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"freddi2", "", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"pajama", "", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
- {"balloon", "", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"dog", "", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"maze", "", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"balloon", "", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"dog", "", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"maze", "", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
- {"water", "", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"water", "", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// condMaskCode value changed in setUserCondition & setTalkCondition
- {"putttime", "", 0, GID_HEGAME, 6, 85, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"socks", "", 0, GID_HEGAME, 6, 85, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"putttime", "", 0, GID_HEGAME, 6, 85, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"socks", "", 0, GID_HEGAME, 6, 85, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// Humongous Entertainment Scumm Version 9.0 ? Scummsys.90
- {"baseball", "", 0, GID_HEGAME, 6, 90, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"thinkerk", "", 0, GID_HEGAME, 6, 90, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"thinker1", "", 0, GID_HEGAME, 6, 90, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"spyfox", "", 0, GID_HEGAME, 6, 90, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"baseball", "", 0, GID_HEGAME, 6, 90, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"thinkerk", "", 0, GID_HEGAME, 6, 90, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"thinker1", "", 0, GID_HEGAME, 6, 90, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"spyfox", "", 0, GID_HEGAME, 6, 90, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
- {"freddi3", "", 0, GID_FREDDI3, 6, 90, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_ENHANCEMENTS)},
- {"freddi3", "HE 99", 0, GID_FREDDI3, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"freddi3", "", 0, GID_FREDDI3, 6, 90, MDT_NONE, GF_USE_KEY, UNK, GUIO6(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_TTS)},
+ {"freddi3", "HE 99", 0, GID_FREDDI3, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// Humongous Entertainment Scumm Version 9.5 ? Scummsys.95
- {"pajama2", "", 0, GID_HEGAME, 6, 95, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"pajama2", "HE 99", 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"chase", "", 0, GID_HEGAME, 6, 95, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"pajama2", "", 0, GID_HEGAME, 6, 95, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"pajama2", "HE 99", 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_NO_BIDI, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"chase", "", 0, GID_HEGAME, 6, 95, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// Humongous Entertainment Scumm Version 9.8 ? Scummsys.98
// these and later games can easily be identified by the .(a) file instead of a .he1
// and INIB chunk in the .he0
- {"lost", "", 0, GID_HEGAME, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"lost", "", 0, GID_HEGAME, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
- {"puttrace", "HE 98", 0, GID_PUTTRACE, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"puttrace", "HE 98.5", 0, GID_PUTTRACE, 6, 98, MDT_NONE, GF_USE_KEY | GF_HE_985, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"puttrace", "HE 99", 0, GID_PUTTRACE, 6, 99, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"puttrace", "HE 98", 0, GID_PUTTRACE, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"puttrace", "HE 98.5", 0, GID_PUTTRACE, 6, 98, MDT_NONE, GF_USE_KEY | GF_HE_985, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"puttrace", "HE 99", 0, GID_PUTTRACE, 6, 99, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
- {"bluesabctime", "", 0, GID_HEGAME, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"BluesBirthday", "", 0, GID_HEGAME, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"BluesBirthday", "Red", 0, GID_BIRTHDAYRED, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"BluesBirthday", "Yellow", 0, GID_BIRTHDAYYELLOW, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"soccer", "", 0, GID_SOCCER, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"bluesabctime", "", 0, GID_HEGAME, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"BluesBirthday", "", 0, GID_HEGAME, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"BluesBirthday", "Red", 0, GID_BIRTHDAYRED, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"BluesBirthday", "Yellow", 0, GID_BIRTHDAYYELLOW, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"soccer", "", 0, GID_SOCCER, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// Global scripts increased to 2048
- {"blues123time", "", 0, GID_HEGAME, 6, 98, MDT_NONE, GF_USE_KEY | GF_HE_985, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"freddi4", "", 0, GID_FREDDI4, 6, 98, MDT_NONE, GF_USE_KEY | GF_HE_985, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_ENHANCEMENTS)},
- {"freddi4", "unenc", 0, GID_FREDDI4, 6, 98, MDT_NONE, GF_HE_985, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_ENHANCEMENTS)},
- {"freddi4", "HE 99", 0, GID_FREDDI4, 6, 99, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_ENHANCEMENTS)},
+ {"blues123time", "", 0, GID_HEGAME, 6, 98, MDT_NONE, GF_USE_KEY | GF_HE_985, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"freddi4", "", 0, GID_FREDDI4, 6, 98, MDT_NONE, GF_USE_KEY | GF_HE_985, UNK, GUIO6(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_TTS)},
+ {"freddi4", "unenc", 0, GID_FREDDI4, 6, 98, MDT_NONE, GF_HE_985, UNK, GUIO6(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_TTS)},
+ {"freddi4", "HE 99", 0, GID_FREDDI4, 6, 99, MDT_NONE, GF_USE_KEY, UNK, GUIO6(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_ENHANCEMENTS, GAMEOPTION_TTS)},
// Humongous Entertainment Scumm Version 9.9 ? Scummsys.99
- {"football", 0, 0, GID_FOOTBALL, 6, 99, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_NETWORK)},
- {"pajama3", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"puttcircus", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_HE_NO_BIDI, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"spyfox2", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"mustard", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"football", 0, 0, GID_FOOTBALL, 6, 99, MDT_NONE, GF_USE_KEY, UNK, GUIO6(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_NETWORK, GAMEOPTION_TTS)},
+ {"pajama3", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"puttcircus", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_HE_NO_BIDI, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"spyfox2", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"mustard", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// Added the use of fonts
- {"FreddisFunShop", 0, 0, GID_FUNSHOP, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"SamsFunShop", 0, 0, GID_FUNSHOP, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"PuttsFunShop", 0, 0, GID_FUNSHOP, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"FreddisFunShop", 0, 0, GID_FUNSHOP, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"SamsFunShop", 0, 0, GID_FUNSHOP, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"PuttsFunShop", 0, 0, GID_FUNSHOP, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// Added the use of smacker videos
- {"BluesTreasureHunt", 0, 0, GID_TREASUREHUNT, 6, 99, MDT_NONE, GF_HE_LOCALIZED | GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"BluesTreasureHunt", 0, 0, GID_TREASUREHUNT, 6, 99, MDT_NONE, GF_HE_LOCALIZED | GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// Added 16bit color
- {"arttime", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"baseball2001", 0, 0, GID_BASEBALL2001, 6, 99, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR | GF_HE_995, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_NETWORK)},
- {"readtime", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"SoccerMLS", 0, 0, GID_SOCCERMLS, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR | GF_HE_995, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"spyozon", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR | GF_HE_995, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"arttime", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"baseball2001", 0, 0, GID_BASEBALL2001, 6, 99, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR | GF_HE_995, UNK, GUIO6(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_NETWORK, GAMEOPTION_TTS)},
+ {"readtime", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"SoccerMLS", 0, 0, GID_SOCCERMLS, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR | GF_HE_995, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"spyozon", 0, 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR | GF_HE_995, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
- {"freddicove", "", 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR | GF_HE_995, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"freddicove", "unenc", 0, GID_HEGAME, 6, 99, MDT_NONE, GF_HE_LOCALIZED | GF_16BIT_COLOR | GF_HE_995, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"freddicove", "HE 100", 0, GID_HEGAME, 6, 100, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"freddicove", "", 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR | GF_HE_995, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"freddicove", "unenc", 0, GID_HEGAME, 6, 99, MDT_NONE, GF_HE_LOCALIZED | GF_16BIT_COLOR | GF_HE_995, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"freddicove", "HE 100", 0, GID_HEGAME, 6, 100, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// Restructured the Scumm engine
- {"pjgames", 0, 0, GID_PJGAMES, 6, 100, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"pjgames", 0, 0, GID_PJGAMES, 6, 100, MDT_NONE, GF_USE_KEY | GF_HE_LOCALIZED | GF_16BIT_COLOR, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
// Added the use of bink videos
- {"Soccer2004", 0, 0, GID_SOCCER2004, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT)},
+ {"Soccer2004", 0, 0, GID_SOCCER2004, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_TTS)},
// U32 code required, for testing only
- {"moonbase", "1.0", 0, GID_MOONBASE, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_NETWORK)},
- {"moonbase", "1.1", 0, GID_MOONBASE, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_NETWORK)},
- {"moonbase", "Demo", 0, GID_MOONBASE, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR | GF_DEMO, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_NETWORK)},
+ {"moonbase", "1.0", 0, GID_MOONBASE, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_NETWORK, GAMEOPTION_TTS)},
+ {"moonbase", "1.1", 0, GID_MOONBASE, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_NETWORK, GAMEOPTION_TTS)},
+ {"moonbase", "Demo", 0, GID_MOONBASE, 6, 100, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR | GF_DEMO, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_NETWORK, GAMEOPTION_TTS)},
// HE100 games, which use older o72_debugInput code
- {"Baseball2003", 0, 0, GID_BASEBALL2003, 6, 101, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT)},
- {"basketball", 0, 0, GID_BASKETBALL, 6, 101, MDT_NONE, GF_USE_KEY| GF_16BIT_COLOR, UNK, GUIO3(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT)},
- {"football2002", 0, 0, GID_FOOTBALL2002, 6, 101, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_NETWORK)},
+ {"Baseball2003", 0, 0, GID_BASEBALL2003, 6, 101, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_TTS)},
+ {"basketball", 0, 0, GID_BASKETBALL, 6, 101, MDT_NONE, GF_USE_KEY| GF_16BIT_COLOR, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_TTS)},
+ {"football2002", 0, 0, GID_FOOTBALL2002, 6, 101, MDT_NONE, GF_USE_KEY | GF_16BIT_COLOR, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_NETWORK, GAMEOPTION_TTS)},
// The following are meant to be generic HE game variants and as such do
// not specify a game ID. Make sure that these are last in the table, else
// they'll override more specific entries that follow later on.
- {"", "HE 71", 0, GID_HEGAME, 6, 71, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"", "HE 72", 0, GID_HEGAME, 6, 72, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"", "HE 73", 0, GID_HEGAME, 6, 73, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"", "HE 74", 0, GID_HEGAME, 6, 74, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"", "HE 80", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"", "HE 85", 0, GID_HEGAME, 6, 85, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"", "HE 90", 0, GID_HEGAME, 6, 90, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"", "HE 95", 0, GID_HEGAME, 6, 95, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"", "HE 98", 0, GID_HEGAME, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"", "HE 98.5", 0, GID_HEGAME, 6, 98, MDT_NONE, GF_USE_KEY | GF_HE_985, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"", "HE 99", 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"", "HE 99.5", 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_995, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"", "HE 100", 0, GID_HEGAME, 6, 100, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
- {"", "HE 101", 0, GID_HEGAME, 6, 100, MDT_NONE, GF_USE_KEY, UNK, GUIO4(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE)},
+ {"", "HE 71", 0, GID_HEGAME, 6, 71, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"", "HE 72", 0, GID_HEGAME, 6, 72, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"", "HE 73", 0, GID_HEGAME, 6, 73, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"", "HE 74", 0, GID_HEGAME, 6, 74, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"", "HE 80", 0, GID_HEGAME, 6, 80, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"", "HE 85", 0, GID_HEGAME, 6, 85, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"", "HE 90", 0, GID_HEGAME, 6, 90, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"", "HE 95", 0, GID_HEGAME, 6, 95, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"", "HE 98", 0, GID_HEGAME, 6, 98, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"", "HE 98.5", 0, GID_HEGAME, 6, 98, MDT_NONE, GF_USE_KEY | GF_HE_985, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"", "HE 99", 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"", "HE 99.5", 0, GID_HEGAME, 6, 99, MDT_NONE, GF_USE_KEY | GF_HE_995, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"", "HE 100", 0, GID_HEGAME, 6, 100, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
+ {"", "HE 101", 0, GID_HEGAME, 6, 100, MDT_NONE, GF_USE_KEY, UNK, GUIO5(GUIO_NOLAUNCHLOAD, GUIO_NOMIDI, GUIO_NOASPECT, GAMEOPTION_AUDIO_OVERRIDE, GAMEOPTION_TTS)},
{NULL, NULL, 0, 0, 0, MDT_NONE, 0, 0, UNK, 0}
};
diff --git a/engines/scumm/dialogs.cpp b/engines/scumm/dialogs.cpp
index 33e4744d84d..807df6b3daf 100644
--- a/engines/scumm/dialogs.cpp
+++ b/engines/scumm/dialogs.cpp
@@ -1204,6 +1204,27 @@ GUI::CheckboxWidget *ScummOptionsContainerWidget::createCopyProtectionCheckbox(G
);
}
+#ifdef USE_TTS
+
+GUI::CheckboxWidget *ScummOptionsContainerWidget::createEnableTTSCheckbox(GuiObject *boss, const Common::String &name) {
+ // Set a "tts_enabled" bool specifically for this domain, since otherwise, the game options will take the "tts_enabled" bool
+ // from global options (i.e. when games using this checkbox are added for the first time, they don't check the default domain,
+ // and instead try to get from the game's specific domain, but the "tts_enabled" bool doesn't exist in that domain yet, so it
+ // pulls from the app domain instead. Therefore, if the user has TTS enabled for the ScummVM domain, the TTS game option
+ // will default to enabled. This doesn't match the behavior of other games, which always default TTS to false, so make sure
+ // TTS defaults to false by adding the bool manually here)
+ if (!ConfMan.hasKey("tts_enabled", _domain)) {
+ ConfMan.setBool("tts_enabled", false, _domain);
+ }
+
+ return new GUI::CheckboxWidget(boss, name,
+ _("Enable Text to Speech"),
+ _("Use TTS to read text in the game (if TTS is available)")
+ );
+}
+
+#endif
+
void ScummOptionsContainerWidget::updateAdjustmentSlider(GUI::SliderWidget *slider, GUI::StaticTextWidget *value) {
int adjustment = slider->getValue();
const char *sign = "";
@@ -1334,6 +1355,9 @@ LoomEgaGameOptionsWidget::LoomEgaGameOptionsWidget(GuiObject *boss, const Common
createEnhancementsWidget(widgetsBoss(), "LoomEgaGameOptionsDialog");
_enableOriginalGUICheckbox = createOriginalGUICheckbox(widgetsBoss(), "LoomEgaGameOptionsDialog.EnableOriginalGUI");
_enableCopyProtectionCheckbox = createCopyProtectionCheckbox(widgetsBoss(), "LoomEgaGameOptionsDialog.EnableCopyProtection");
+#ifdef USE_TTS
+ _enableTTSCheckbox = createEnableTTSCheckbox(widgetsBoss(), "LoomEgaGameOptionsDialog.EnableTTS");
+#endif
}
void LoomEgaGameOptionsWidget::load() {
@@ -1349,6 +1373,9 @@ void LoomEgaGameOptionsWidget::load() {
_enableOriginalGUICheckbox->setState(ConfMan.getBool("original_gui", _domain));
_enableCopyProtectionCheckbox->setState(ConfMan.getBool("copy_protection", _domain));
+#ifdef USE_TTS
+ _enableTTSCheckbox->setState(ConfMan.getBool("tts_enabled", _domain));
+#endif
}
bool LoomEgaGameOptionsWidget::save() {
@@ -1357,6 +1384,9 @@ bool LoomEgaGameOptionsWidget::save() {
ConfMan.setInt("loom_overture_ticks", _overtureTicksSlider->getValue(), _domain);
ConfMan.setBool("original_gui", _enableOriginalGUICheckbox->getState(), _domain);
ConfMan.setBool("copy_protection", _enableCopyProtectionCheckbox->getState(), _domain);
+#ifdef USE_TTS
+ ConfMan.setBool("tts_enabled", _enableTTSCheckbox->getState(), _domain);
+#endif
return true;
}
@@ -1368,6 +1398,11 @@ void LoomEgaGameOptionsWidget::defineLayout(GUI::ThemeEval &layouts, const Commo
.addPadding(0, 0, 10, 0)
.addWidget("EnableOriginalGUI", "Checkbox")
.addWidget("EnableCopyProtection", "Checkbox");
+
+#ifdef USE_TTS
+ layouts.addWidget("EnableTTS", "Checkbox");
+#endif
+
addEnhancementsLayout(layouts)
.closeLayout()
.addLayout(GUI::ThemeLayout::kLayoutHorizontal, 12)
@@ -1418,6 +1453,10 @@ MacGameOptionsWidget::MacGameOptionsWidget(GuiObject *boss, const Common::String
if (gameId == GID_MONKEY || gameId == GID_MONKEY2 || (gameId == GID_INDY4 && extra == "Floppy"))
_enableCopyProtectionCheckbox = createCopyProtectionCheckbox(widgetsBoss(), "MacGameOptionsWidget.EnableCopyProtection");
+
+#ifdef USE_TTS
+ _enableTTSCheckbox = createEnableTTSCheckbox(widgetsBoss(), "MacGameOptionsWidget.EnableTTS");
+#endif
}
void MacGameOptionsWidget::load() {
@@ -1442,6 +1481,10 @@ void MacGameOptionsWidget::load() {
if (_enableCopyProtectionCheckbox)
_enableCopyProtectionCheckbox->setState(ConfMan.getBool("copy_protection", _domain));
+
+#ifdef USE_TTS
+ _enableTTSCheckbox->setState(ConfMan.getBool("tts_enabled", _domain));
+#endif
}
bool MacGameOptionsWidget::save() {
@@ -1453,6 +1496,10 @@ bool MacGameOptionsWidget::save() {
if (_enableCopyProtectionCheckbox)
ConfMan.setBool("copy_protection", _enableCopyProtectionCheckbox->getState(), _domain);
+#ifdef USE_TTS
+ ConfMan.setBool("tts_enabled", _enableTTSCheckbox->getState(), _domain);
+#endif
+
return res;
}
@@ -1468,6 +1515,10 @@ void MacGameOptionsWidget::defineLayout(GUI::ThemeEval &layouts, const Common::S
if (_enableCopyProtectionCheckbox)
layouts.addWidget("EnableCopyProtection", "Checkbox");
+#ifdef USE_TTS
+ layouts.addWidget("EnableTTS", "Checkbox");
+#endif
+
addEnhancementsLayout(layouts)
.closeLayout()
.addLayout(GUI::ThemeLayout::kLayoutHorizontal, 12)
@@ -1532,6 +1583,9 @@ LoomVgaGameOptionsWidget::LoomVgaGameOptionsWidget(GuiObject *boss, const Common
createEnhancementsWidget(widgetsBoss(), "LoomVgaGameOptionsDialog");
_enableOriginalGUICheckbox = createOriginalGUICheckbox(widgetsBoss(), "LoomVgaGameOptionsDialog.EnableOriginalGUI");
+#ifdef USE_TTS
+ _enableTTSCheckbox = createEnableTTSCheckbox(widgetsBoss(), "LoomVgaGameOptionsDialog.EnableTTS");
+#endif
}
void LoomVgaGameOptionsWidget::load() {
@@ -1546,12 +1600,18 @@ void LoomVgaGameOptionsWidget::load() {
updatePlaybackAdjustmentValue();
_enableOriginalGUICheckbox->setState(ConfMan.getBool("original_gui", _domain));
+#ifdef USE_TTS
+ _enableTTSCheckbox->setState(ConfMan.getBool("tts_enabled", _domain));
+#endif
}
bool LoomVgaGameOptionsWidget::save() {
ScummOptionsContainerWidget::save();
ConfMan.setInt("loom_playback_adjustment", _playbackAdjustmentSlider->getValue(), _domain);
ConfMan.setBool("original_gui", _enableOriginalGUICheckbox->getState(), _domain);
+#ifdef USE_TTS
+ ConfMan.setBool("tts_enabled", _enableTTSCheckbox->getState(), _domain);
+#endif
return true;
}
@@ -1562,6 +1622,11 @@ void LoomVgaGameOptionsWidget::defineLayout(GUI::ThemeEval &layouts, const Commo
.addLayout(GUI::ThemeLayout::kLayoutVertical, 4)
.addPadding(0, 0, 10, 0)
.addWidget("EnableOriginalGUI", "Checkbox");
+
+#ifdef USE_TTS
+ layouts.addWidget("EnableTTS", "Checkbox");
+#endif
+
addEnhancementsLayout(layouts)
.closeLayout()
.addLayout(GUI::ThemeLayout::kLayoutHorizontal, 12)
@@ -1598,6 +1663,10 @@ MI1CdGameOptionsWidget::MI1CdGameOptionsWidget(GuiObject *boss, const Common::St
_enableOriginalGUICheckbox = createOriginalGUICheckbox(widgetsBoss(), "MI1CdGameOptionsDialog.EnableOriginalGUI");
+#ifdef USE_TTS
+ _enableTTSCheckbox = createEnableTTSCheckbox(widgetsBoss(), "MI1CdGameOptionsDialog.EnableTTS");
+#endif
+
if (platform == Common::kPlatformSegaCD)
_enableSegaShadowModeCheckbox = createSegaShadowModeCheckbox(widgetsBoss(), "MI1CdGameOptionsDialog.EnableSegaShadowMode");
@@ -1651,6 +1720,9 @@ void MI1CdGameOptionsWidget::load() {
updateOutlookAdjustmentValue();
_enableOriginalGUICheckbox->setState(ConfMan.getBool("original_gui", _domain));
+#ifdef USE_TTS
+ _enableTTSCheckbox->setState(ConfMan.getBool("tts_enabled", _domain));
+#endif
}
bool MI1CdGameOptionsWidget::save() {
@@ -1662,6 +1734,9 @@ bool MI1CdGameOptionsWidget::save() {
ConfMan.setInt("mi1_intro_adjustment", _introAdjustmentSlider->getValue(), _domain);
ConfMan.setInt("mi1_outlook_adjustment", _outlookAdjustmentSlider->getValue(), _domain);
ConfMan.setBool("original_gui", _enableOriginalGUICheckbox->getState(), _domain);
+#ifdef USE_TTS
+ ConfMan.setBool("tts_enabled", _enableTTSCheckbox->getState(), _domain);
+#endif
return true;
}
@@ -1678,6 +1753,10 @@ void MI1CdGameOptionsWidget::defineLayout(GUI::ThemeEval &layouts, const Common:
if (platform == Common::kPlatformSegaCD)
layouts.addWidget("EnableSegaShadowMode", "Checkbox");
+#ifdef USE_TTS
+ layouts.addWidget("EnableTTS", "Checkbox");
+#endif
+
addEnhancementsLayout(layouts)
.closeLayout()
.addLayout(GUI::ThemeLayout::kLayoutHorizontal, 12)
diff --git a/engines/scumm/dialogs.h b/engines/scumm/dialogs.h
index 1bd835a71ca..d3842ce13c6 100644
--- a/engines/scumm/dialogs.h
+++ b/engines/scumm/dialogs.h
@@ -242,6 +242,9 @@ protected:
GUI::CheckboxWidget *createGammaCorrectionCheckbox(GuiObject *boss, const Common::String &name);
GUI::CheckboxWidget *createSegaShadowModeCheckbox(GuiObject *boss, const Common::String &name);
GUI::CheckboxWidget *createCopyProtectionCheckbox(GuiObject *boss, const Common::String &name);
+#ifdef USE_TTS
+ GUI::CheckboxWidget *createEnableTTSCheckbox(GuiObject *boss, const Common::String &name);
+#endif
void updateAdjustmentSlider(GUI::SliderWidget *slider, GUI::StaticTextWidget *value);
Common::Array<GUI::CheckboxWidget *> _enhancementsCheckboxes;
@@ -294,6 +297,9 @@ private:
GUI::CheckboxWidget *_enableOriginalGUICheckbox = nullptr;
GUI::CheckboxWidget *_enableCopyProtectionCheckbox = nullptr;
+#ifdef USE_TTS
+ GUI::CheckboxWidget *_enableTTSCheckbox = nullptr;
+#endif
GUI::SliderWidget *_overtureTicksSlider = nullptr;
GUI::StaticTextWidget *_overtureTicksValue = nullptr;
@@ -322,6 +328,9 @@ private:
GUI::CheckboxWidget *_enableOriginalGUICheckbox = nullptr;
GUI::CheckboxWidget *_enableGammaCorrectionCheckbox = nullptr;
GUI::CheckboxWidget *_enableCopyProtectionCheckbox = nullptr;
+#ifdef USE_TTS
+ GUI::CheckboxWidget *_enableTTSCheckbox = nullptr;
+#endif
GUI::SliderWidget *_sndQualitySlider = nullptr;
GUI::StaticTextWidget *_sndQualityValue = nullptr;
int _quality = 0;
@@ -347,6 +356,9 @@ private:
void handleCommand(GUI::CommandSender *sender, uint32 cmd, uint32 data) override;
GUI::CheckboxWidget *_enableOriginalGUICheckbox = nullptr;
+#ifdef USE_TTS
+ GUI::CheckboxWidget *_enableTTSCheckbox = nullptr;
+#endif
GUI::SliderWidget *_playbackAdjustmentSlider = nullptr;
GUI::StaticTextWidget *_playbackAdjustmentValue = nullptr;
@@ -376,6 +388,9 @@ private:
GUI::CheckboxWidget *_enableOriginalGUICheckbox = nullptr;
GUI::CheckboxWidget *_enableSegaShadowModeCheckbox = nullptr;
+#ifdef USE_TTS
+ GUI::CheckboxWidget *_enableTTSCheckbox = nullptr;
+#endif
GUI::SliderWidget *_introAdjustmentSlider = nullptr;
GUI::StaticTextWidget *_introAdjustmentValue = nullptr;
diff --git a/engines/scumm/gfx_gui.cpp b/engines/scumm/gfx_gui.cpp
index 739ffa5a211..713670be0ee 100644
--- a/engines/scumm/gfx_gui.cpp
+++ b/engines/scumm/gfx_gui.cpp
@@ -295,6 +295,9 @@ Common::KeyState ScummEngine::showBannerAndPause(int bannerId, int32 waitTime, c
// will stay on screen until an input has been received or until the time-out.
Common::KeyState ks = Common::KEYCODE_INVALID;
bool leftBtnPressed = false, rightBtnPressed = false;
+#ifdef USE_TTS
+ sayText(bannerMsg);
+#endif
if (waitTime) {
waitForBannerInput(waitTime, ks, leftBtnPressed, rightBtnPressed);
clearBanner();
@@ -534,6 +537,10 @@ Common::KeyState ScummEngine::showOldStyleBannerAndPause(const char *msg, int co
updateDirtyScreen(kBannerVirtScreen);
}
+#ifdef USE_TTS
+ sayText(bannerMsg);
+#endif
+
// Wait until the engine receives a new Keyboard or Mouse input,
// unless we have specified a positive waitTime: in that case, the banner
// will stay on screen until an input has been received or until the time-out.
@@ -1952,9 +1959,15 @@ void ScummEngine::drawDraftsInventory() {
// Draw the titles of the drafts...
if (draft & 0x2000) {
drawGUIText(names[i + 1], nullptr, xPos - textOffset, yConstant - 40 + textHeight * heightMultiplier, titleColor, false);
+#ifdef USE_TTS
+ sayText(names[i + 1]);
+#endif
} else {
// Draw "Unknown:" as the title of the draft
drawGUIText(names[17], nullptr, xPos - textOffset, yConstant - 40 + textHeight * heightMultiplier, titleColor, false);
+#ifdef USE_TTS
+ sayText(names[17]);
+#endif
}
notesWidth = getGUIStringWidth(notesBuf);
@@ -1978,6 +1991,9 @@ void ScummEngine::drawDraftsInventory() {
// Draw the notes of the draft... notice how we are subtracting
// notesWidth: we are forcing the text aligning on the left.
drawGUIText(notesBuf, nullptr, xPos - notesWidth + 127 + textOffset, yConstant - 40 + textHeight * heightMultiplier, notesColor, false);
+#ifdef USE_TTS
+ sayText(notesBuf);
+#endif
} else {
// Hebrew language, let's swap the layout!
@@ -1994,6 +2010,9 @@ void ScummEngine::drawDraftsInventory() {
// Draw the notes of the drafts...
drawGUIText(notesBuf, nullptr, xPos - textOffset, yConstant - 40 + textHeight * heightMultiplier, notesColor, false);
namesWidth = getGUIStringWidth(names[i + 1]);
+#ifdef USE_TTS
+ sayText(notesBuf);
+#endif
// Text position adjustments for the titles...
// (Objective: Leave three pixels to the right)
@@ -2007,10 +2026,16 @@ void ScummEngine::drawDraftsInventory() {
if (draft & 0x2000) {
namesWidth = getGUIStringWidth(names[i + 1]);
drawGUIText(names[i + 1], nullptr, xPos - namesWidth + 127 + textOffset, yConstant - 40 + textHeight * heightMultiplier, titleColor, false);
+#ifdef USE_TTS
+ sayText(names[i + 1]);
+#endif
} else {
// Draw "Unknown:" as the title of the draft
namesWidth = getGUIStringWidth(names[17]);
drawGUIText(names[17], nullptr, xPos - namesWidth + 127 + textOffset, yConstant - 40 + textHeight * heightMultiplier, titleColor, false);
+#ifdef USE_TTS
+ sayText(names[17]);
+#endif
}
}
}
@@ -4437,28 +4462,54 @@ void ScummEngine::updateMainMenuControls() {
if (_game.id == GID_FT) {
convertMessageToString((const byte *)getGUIString(gsSpooledMusic), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, 29, yCntr - calculatedHeight - yOffset + 19, textColor, false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_SPOOLED_MUSIC_CHECKBOX].alternateTTSLabel = (const char *)msg;
+ _internalGUIControls[GUI_CTRL_SPOOLED_MUSIC_CHECKBOX].alternateTTSLabel += ": " + _internalGUIControls[GUI_CTRL_SPOOLED_MUSIC_CHECKBOX].label;
+#endif
convertMessageToString((const byte *)getGUIString(gsMusic), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, 29, yCntr - calculatedHeight - yOffset + 33, textColor, false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_MUSIC_SLIDER].alternateTTSLabel = (const char *)msg;
+#endif
convertMessageToString((const byte *)getGUIString(gsVoice), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, 29, yCntr - calculatedHeight - yOffset + 47, textColor, false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_SFX_SLIDER].alternateTTSLabel = (const char *)msg;
+#endif
} else {
convertMessageToString((const byte *)getGUIString(gsMusic), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, 29, yCntr - calculatedHeight - yOffset + 25, textColor, false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_MUSIC_SLIDER].alternateTTSLabel = (const char *)msg;
+#endif
convertMessageToString((const byte *)getGUIString(gsVoice), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, 29, yCntr - calculatedHeight - yOffset + 43, textColor, false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_SPEECH_SLIDER].alternateTTSLabel = (const char *)msg;
+#endif
}
convertMessageToString((const byte *)getGUIString(gsSfx), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, 29, yCntr - calculatedHeight - yOffset + 61, textColor, false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_SFX_SLIDER].alternateTTSLabel = (const char *)msg;
+#endif
convertMessageToString((const byte *)getGUIString(gsDisplayText), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, 29, yCntr - calculatedHeight - yOffset + 88, textColor, false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_DISPLAY_TEXT_CHECKBOX].alternateTTSLabel = (const char *)msg;
+ _internalGUIControls[GUI_CTRL_DISPLAY_TEXT_CHECKBOX].alternateTTSLabel += ": " + _internalGUIControls[GUI_CTRL_DISPLAY_TEXT_CHECKBOX].label;
+#endif
convertMessageToString((const byte *)getGUIString(gsTextSpeed), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, 29, yCntr - calculatedHeight - yOffset + 102, textColor, false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_TEXT_SPEED_SLIDER].alternateTTSLabel = (const char *)msg;
+#endif
drawLine(23, yCntr - calculatedHeight - yOffset + 77, 204, yCntr - calculatedHeight - yOffset + 77, getBannerColor(17));
drawLine(23, yCntr - calculatedHeight - yOffset + 78, 204, yCntr - calculatedHeight - yOffset + 78, getBannerColor(4));
@@ -4472,18 +4523,34 @@ void ScummEngine::updateMainMenuControls() {
} else {
convertMessageToString((const byte *)getGUIString(gsMusic), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, 33, yConstantV6 - 36, textColor, false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_MUSIC_SLIDER].alternateTTSLabel = (const char *)msg;
+#endif
convertMessageToString((const byte *)getGUIString(gsVoice), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, 33, yConstantV6 - 22, textColor, false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_SPEECH_SLIDER].alternateTTSLabel = (const char *)msg;
+#endif
convertMessageToString((const byte *)getGUIString(gsSfx), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, 33, yConstantV6 - 8, textColor, false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_SFX_SLIDER].alternateTTSLabel = (const char *)msg;
+#endif
convertMessageToString((const byte *)getGUIString(gsDisplayText), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, 33, yConstantV6 + 19, textColor, false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_DISPLAY_TEXT_CHECKBOX].alternateTTSLabel = (const char *)msg;
+ _internalGUIControls[GUI_CTRL_DISPLAY_TEXT_CHECKBOX].alternateTTSLabel += ": " + _internalGUIControls[GUI_CTRL_DISPLAY_TEXT_CHECKBOX].label;
+#endif
convertMessageToString((const byte *)getGUIString(gsTextSpeed), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, 33, yConstantV6 + 34, textColor, false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_TEXT_SPEED_SLIDER].alternateTTSLabel = (const char *)msg;
+#endif
drawLine(27, yConstantV6 + 8, 201, yConstantV6 + 8, getBannerColor(17));
drawLine(27, yConstantV6 + 9, 201, yConstantV6 + 9, getBannerColor(4));
@@ -4513,6 +4580,9 @@ void ScummEngine::updateMainMenuControlsSegaCD() {
convertMessageToString((const byte *)getGUIString(gsTextSpeed), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, isJap ? 118 : 167, yConstant, getBannerColor(2), false);
+#ifdef USE_TTS
+ _internalGUIControls[GUI_CTRL_TEXT_SPEED_SLIDER].alternateTTSLabel = (const char *)msg;
+#endif
convertMessageToString((const byte *)getGUIString(gsSlowFast), (byte *)msg, sizeof(msg));
drawGUIText(msg, nullptr, isJap ? 151 : 158, yConstant + 37, getBannerColor(2), false);
@@ -4596,6 +4666,9 @@ void ScummEngine::drawMainMenuTitle(const char *title) {
drawGUIText(title, nullptr, 160, yConstantV6 - 56, stringColor, true);
}
+#ifdef USE_TTS
+ sayText(title, Common::TextToSpeechManager::INTERRUPT);
+#endif
ScummEngine::drawDirtyScreenParts();
_system->updateScreen();
}
diff --git a/engines/scumm/input.cpp b/engines/scumm/input.cpp
index a75bcc32d1c..55af2d6d264 100644
--- a/engines/scumm/input.cpp
+++ b/engines/scumm/input.cpp
@@ -645,6 +645,10 @@ void ScummEngine::waitForBannerInput(int32 waitTime, Common::KeyState &ks, bool
ks.keycode != Common::KEYCODE_RALT &&
!(ks.keycode == Common::KEYCODE_s && ks.hasFlags(Common::KBD_ALT));
+#ifdef USE_TTS
+ sayButtonText();
+#endif
+
if (validKey || leftBtnClicked || rightBtnClicked || (handleMouseWheel && _mouseWheelFlag))
return;
@@ -672,6 +676,10 @@ void ScummEngine::waitForBannerInput(int32 waitTime, Common::KeyState &ks, bool
leftBtnClicked = (_leftBtnPressed & msClicked) != 0;
rightBtnClicked = (_rightBtnPressed & msClicked) != 0;
+#ifdef USE_TTS
+ sayButtonText();
+#endif
+
if (shouldQuit())
return;
@@ -1003,6 +1011,9 @@ void ScummEngine::processKeyboard(Common::KeyState lastKeyHit) {
int8 oldCursorState = _cursor.state;
_cursor.state = (_game.id == GID_MONKEY && _game.platform == Common::kPlatformMacintosh) ? 1 : 0;
CursorMan.showMouse(_cursor.state > 0);
+#ifdef USE_TTS
+ stopTextToSpeech();
+#endif
// "Game Paused. Press SPACE to Continue."
if (_game.version > 4)
showBannerAndPause(0, -1, getGUIString(gsPause));
diff --git a/engines/scumm/metaengine.cpp b/engines/scumm/metaengine.cpp
index d53d9ddf379..cdf47b14e43 100644
--- a/engines/scumm/metaengine.cpp
+++ b/engines/scumm/metaengine.cpp
@@ -858,6 +858,17 @@ static const ExtraGuiOption enableAmbienceSounds = {
};
#endif
+#ifdef USE_TTS
+static const ExtraGuiOption enableTTS = {
+ _s("Enable Text to Speech"),
+ _s("Use TTS to read text in the game (if TTS is available)"),
+ "tts_enabled",
+ false,
+ 0,
+ 0
+};
+#endif
+
const ExtraGuiOptions ScummMetaEngine::getExtraGuiOptions(const Common::String &target) const {
ExtraGuiOptions options;
// Query the GUI options
@@ -894,6 +905,11 @@ const ExtraGuiOptions ScummMetaEngine::getExtraGuiOptions(const Common::String &
options.push_back(enableAmbienceSounds);
#endif
}
+#ifdef USE_TTS
+ if (target.empty() || guiOptions.contains(GAMEOPTION_TTS)) {
+ options.push_back(enableTTS);
+ }
+#endif
if (target.empty() || gameid == "comi") {
options.push_back(comiObjectLabelsOption);
diff --git a/engines/scumm/room.cpp b/engines/scumm/room.cpp
index 65fc6cf927e..e6a6109ebcc 100644
--- a/engines/scumm/room.cpp
+++ b/engines/scumm/room.cpp
@@ -154,6 +154,15 @@ void ScummEngine::startScene(int room, Actor *a, int objectNr) {
_currentRoom = room;
VAR(VAR_ROOM) = room;
+#ifdef USE_TTS
+ if (_game.id == GID_PASS && _roomResource == 2 && room != _roomResource) {
+ for (uint index = 0; index < ARRAYSIZE(_passHelpButtons); ++index) {
+ _passHelpButtons[index].clear();
+ }
+ _voicePassHelpButtons = false;
+ }
+#endif
+
if (room >= 0x80 && _game.version < 7 && _game.heversion <= 71)
_roomResource = _resourceMapper[room & 0x7F];
else
diff --git a/engines/scumm/script.cpp b/engines/scumm/script.cpp
index dc73e3ed4a5..62df5793891 100644
--- a/engines/scumm/script.cpp
+++ b/engines/scumm/script.cpp
@@ -1478,10 +1478,17 @@ void ScummEngine::runInputScript(int clickArea, int val, int mode) {
void ScummEngine::decreaseScriptDelay(int amount) {
ScriptSlot *ss = vm.slot;
int i;
+#ifdef USE_TTS
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+#endif
for (i = 0; i < NUM_SCRIPT_SLOT; i++, ss++) {
if (ss->status == ssPaused) {
ss->delay -= amount;
+#ifdef USE_TTS
+ if (ss->delay < 0 && (!ttsMan || !ttsMan->isSpeaking())) {
+#else
if (ss->delay < 0) {
+#endif
if (_game.id == GID_INDY3 && _game.platform == Common::kPlatformMacintosh && ss->number == 134) {
// Unlike the DOS version, there doesn't
// appear to be anything in the credits
@@ -1651,6 +1658,9 @@ void ScummEngine::abortCutscene() {
uint32 offs = vm.cutScenePtr[idx];
if (offs) {
ScriptSlot *ss = &vm.slot[vm.cutSceneScript[idx]];
+#ifdef USE_TTS
+ stopTextToSpeech();
+#endif
ss->offs = offs;
ss->status = ssRunning;
ss->freezeCount = 0;
diff --git a/engines/scumm/script_v0.cpp b/engines/scumm/script_v0.cpp
index f6dac08bb7f..babb930065f 100644
--- a/engines/scumm/script_v0.cpp
+++ b/engines/scumm/script_v0.cpp
@@ -480,6 +480,9 @@ void ScummEngine_v0::drawSentenceLine() {
}
_sentenceBuf += Common::String::format("%-13s", actorName);
}
+#ifdef USE_TTS
+ _voiceNextString = true;
+#endif
flushSentenceLine();
return;
}
@@ -490,6 +493,9 @@ void ScummEngine_v0::drawSentenceLine() {
char *verbName = (char *)getResourceAddress(rtVerb, _activeVerb);
assert(verbName);
+#ifdef USE_TTS
+ Common::String oldSentence = _sentenceBuf;
+#endif
_sentenceBuf = verbName;
if (_activeObject) {
@@ -507,6 +513,12 @@ void ScummEngine_v0::drawSentenceLine() {
}
}
+#ifdef USE_TTS
+ if (oldSentence != _sentenceBuf) {
+ _voiceNextString = true;
+ }
+#endif
+
flushSentenceLine();
}
diff --git a/engines/scumm/script_v2.cpp b/engines/scumm/script_v2.cpp
index af50bff5979..0ae8c03d1ea 100644
--- a/engines/scumm/script_v2.cpp
+++ b/engines/scumm/script_v2.cpp
@@ -830,6 +830,7 @@ void ScummEngine_v2::o2_verbOps() {
int verb = fetchScriptByte();
int slot, state;
+ Common::TextToSpeechManager::Action ttsAction = Common::TextToSpeechManager::INTERRUPT;
switch (verb) {
case 0: // SO_DELETE_VERBS
slot = getVarOrDirectByte(PARAM_1) + 1;
@@ -894,6 +895,13 @@ void ScummEngine_v2::o2_verbOps() {
vs->curRect.top = y;
}
+#ifdef USE_TTS
+ if (_game.id == GID_MANIAC && (_game.features & GF_DEMO)) {
+ ttsAction = Common::TextToSpeechManager::QUEUE;
+ _voiceNextString = true;
+ }
+#endif
+
// FIXME: these keyboard map depends on the language of the game.
// E.g. a german keyboard has 'z' and 'y' swapped, while a french
// keyboard starts with "azerty", etc.
@@ -922,7 +930,7 @@ void ScummEngine_v2::o2_verbOps() {
}
// Force redraw of the modified verb slot
- drawVerb(slot, 0);
+ drawVerb(slot, 0, ttsAction);
verbMouseOver(0);
}
diff --git a/engines/scumm/script_v5.cpp b/engines/scumm/script_v5.cpp
index 2e1ba5fea05..599a2c6ae9a 100644
--- a/engines/scumm/script_v5.cpp
+++ b/engines/scumm/script_v5.cpp
@@ -3156,6 +3156,15 @@ void ScummEngine_v5::o5_verbOps() {
loadPtrToResource(rtVerb, slot, nullptr);
if (slot == 0)
_res->nukeResource(rtVerb, slot);
+
+#ifdef USE_TTS
+ if (verb == 100 && vs->curmode == 1) { // Sentence verb
+ _voiceNextString = true;
+ } else {
+ _voiceNextString = false;
+ }
+#endif
+
vs->type = kTextVerbType;
vs->imgindex = 0;
break;
diff --git a/engines/scumm/scumm.cpp b/engines/scumm/scumm.cpp
index 6799003225f..62b9d3fdf2a 100644
--- a/engines/scumm/scumm.cpp
+++ b/engines/scumm/scumm.cpp
@@ -1523,6 +1523,14 @@ Common::Error ScummEngine::init() {
if (!ConfMan.hasKey("talkspeed", _targetName))
setTalkSpeed(_defaultTextSpeed);
+#ifdef USE_TTS
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ if (ttsMan) {
+ ttsMan->enable(ConfMan.getBool("tts_enabled"));
+ ttsMan->setLanguage(ConfMan.get("language"));
+ }
+#endif
+
_setupIsComplete = true;
syncSoundSettings();
@@ -2895,6 +2903,28 @@ void ScummEngine::scummLoop(int delta) {
if (_talkDelay < 0)
_talkDelay = 0;
+#ifdef USE_TTS
+ if (_game.id == GID_PASS && _roomResource == 2) {
+ int obj = findObject(_mouse.x, _mouse.y);
+ if (obj != 0) {
+ int adjustedObj = obj - 956;
+ if (adjustedObj >= 0 && adjustedObj < ARRAYSIZE(_passHelpButtons) && _previousSaid != _passHelpButtons[adjustedObj]) {
+ if (_voicePassHelpButtons) {
+ sayText(_passHelpButtons[adjustedObj], Common::TextToSpeechManager::INTERRUPT);
+ }
+
+ _previousSaid = _passHelpButtons[adjustedObj];
+ }
+ } else {
+ _previousSaid.clear();
+ }
+
+ if (_mouseAndKeyboardStat & MBS_MOUSE_MASK) {
+ stopTextToSpeech();
+ }
+ }
+#endif
+
// Record the current ego actor before any scripts (including input scripts)
// get a chance to run.
int oldEgo = 0;
diff --git a/engines/scumm/scumm.h b/engines/scumm/scumm.h
index 0d280d8713a..2e6ed1d4ac5 100644
--- a/engines/scumm/scumm.h
+++ b/engines/scumm/scumm.h
@@ -35,6 +35,7 @@
#include "common/rendermode.h"
#include "common/str.h"
#include "common/textconsole.h"
+#include "common/text-to-speech.h"
#include "graphics/surface.h"
#include "graphics/sjis.h"
#include "graphics/palette.h"
@@ -476,6 +477,9 @@ struct InternalGUIControl {
int highlightedFillColor;
bool centerText;
Common::String label;
+#ifdef USE_TTS
+ Common::String alternateTTSLabel;
+#endif
bool doubleLinesFlag;
};
@@ -1219,7 +1223,7 @@ protected:
void verbMouseOver(int verb);
int findVerbAtPos(int x, int y) const;
- virtual void drawVerb(int verb, int mode);
+ virtual void drawVerb(int verb, int mode, Common::TextToSpeechManager::Action ttsAction = Common::TextToSpeechManager::INTERRUPT);
virtual void runInputScript(int clickArea, int val, int mode);
void restoreVerbBG(int verb);
void drawVerbBitmap(int verb, int x, int y);
@@ -1627,6 +1631,16 @@ protected:
Localizer *_localizer = nullptr;
+#ifdef USE_TTS
+ bool _voiceNextString = false;
+ bool _checkPreviousSaid = false;
+ bool _voicePassHelpButtons = false;
+ int _previousVerb = -1;
+ int _previousControl = -1;
+ Common::String _previousSaid;
+ Common::String _passHelpButtons[6];
+#endif
+
void restoreCharsetBg();
void clearCharsetMask();
void clearTextSurface();
@@ -1640,11 +1654,17 @@ protected:
virtual void displayDialog();
int countNumberOfWaits(); // For SE speech support, from disasm
bool newLine();
- void drawString(int a, const byte *msg);
+ void drawString(int a, const byte *msg, Common::TextToSpeechManager::Action ttsAction = Common::TextToSpeechManager::QUEUE);
virtual void fakeBidiString(byte *ltext, bool ignoreVerb, int ltextSize) const;
void wrapSegaCDText();
void debugMessage(const byte *msg);
virtual void showMessageDialog(const byte *msg);
+
+#ifdef USE_TTS
+ void sayText(const Common::String &text, Common::TextToSpeechManager::Action action = Common::TextToSpeechManager::QUEUE) const;
+ void stopTextToSpeech() const;
+ void sayButtonText();
+#endif
virtual int convertMessageToString(const byte *msg, byte *dst, int dstSize);
int convertIntMessage(byte *dst, int dstSize, int var);
diff --git a/engines/scumm/scumm_v7.h b/engines/scumm/scumm_v7.h
index 50b4cf5fbc4..aa56a411a1e 100644
--- a/engines/scumm/scumm_v7.h
+++ b/engines/scumm/scumm_v7.h
@@ -136,7 +136,7 @@ protected:
int getObjectIdFromOBIM(const byte *obim) override;
void createTextRenderer(GlyphRenderer_v7 *gr) override;
- void enqueueText(const byte *text, int x, int y, byte color, byte charset, TextStyleFlags flags);
+ void enqueueText(const byte *text, int x, int y, byte color, byte charset, TextStyleFlags flags, bool ttsVoiceText = true, bool ttsIsSubtitle = false);
void drawTextImmediately(const byte *text, Common::Rect *clipRect, int x, int y, byte color, byte charset, TextStyleFlags flags);
void drawBlastTexts() override;
void showMessageDialog(const byte *msg) override;
@@ -166,7 +166,7 @@ protected:
void setCursorTransparency(int a) override;
void setCursorFromImg(uint img, uint room, uint imgindex) override;
- void drawVerb(int verb, int mode) override;
+ void drawVerb(int verb, int mode, Common::TextToSpeechManager::Action ttsAction = Common::TextToSpeechManager::INTERRUPT) override;
void pauseEngineIntern(bool pause) override;
@@ -175,10 +175,18 @@ protected:
struct BlastText : TextObject {
Common::Rect rect;
TextStyleFlags flags;
+#ifdef USE_TTS
+ bool voiceText;
+ bool isSubtitle;
+#endif
void clear() {
this->TextObject::clear();
rect = Common::Rect();
+#ifdef USE_TTS
+ voiceText = true;
+ isSubtitle = false;
+#endif
}
};
diff --git a/engines/scumm/sound.cpp b/engines/scumm/sound.cpp
index 6967a103621..5b5cbdd4283 100644
--- a/engines/scumm/sound.cpp
+++ b/engines/scumm/sound.cpp
@@ -426,7 +426,12 @@ void Sound::processSfxQueues() {
#endif
}
+#ifdef USE_TTS
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ if (finished && (!ConfMan.getBool("subtitles") || _vm->_talkDelay == 0) && (!ttsMan || !ttsMan->isSpeaking())) {
+#else
if (finished && (!ConfMan.getBool("subtitles") || _vm->_talkDelay == 0)) {
+#endif
if (!(_vm->_game.version == 8 && _vm->VAR(_vm->VAR_HAVE_MSG) == 0))
_vm->stopTalk();
}
diff --git a/engines/scumm/string.cpp b/engines/scumm/string.cpp
index 66da9def51b..ebb998ecca0 100644
--- a/engines/scumm/string.cpp
+++ b/engines/scumm/string.cpp
@@ -107,6 +107,9 @@ void ScummEngine::printString(int m, const byte *msg) {
actorTalk(msg);
break;
case 1:
+#ifdef USE_TTS
+ _voiceNextString = true;
+#endif
drawString(1, msg);
break;
case 2:
@@ -168,6 +171,78 @@ void ScummEngine::showMessageDialog(const byte *msg) {
}
+#ifdef USE_TTS
+
+void ScummEngine::sayText(const Common::String &text, Common::TextToSpeechManager::Action action) const {
+ if (text.empty()) {
+ return;
+ }
+
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ if (ttsMan && ConfMan.getBool("tts_enabled")) {
+ // Some games, like Loom, may display strings of only characters (such as underscores) that make for awkward voicing.
+ // Before voicing text, make sure it has either an alphanumeric character or a non-ASCII character (for languages
+ // like Russian or Hebrew that may only have non-ASCII characters)
+ for (uint i = 0; i < text.size(); ++i) {
+ if (Common::isAlnum(text[i]) || !Common::isAscii(text[i])) {
+ Common::String ttsMessage = text;
+ ttsMessage.replace('^', ' ');
+
+ Common::String copyrightReplacement;
+ Common::String toReplace = "=";
+
+ switch (getDialogCodePage()) {
+ case Common::kDos850:
+ copyrightReplacement = "\xb8";
+ break;
+ case Common::kWindows1252:
+ case Common::kWindows1255:
+ copyrightReplacement = "\xa9";
+ break;
+ default:
+ // Replace what would be the copyright symbol with a space for encodings that don't have it
+ copyrightReplacement = "\x20";
+ break;
+ }
+
+ // Loom uses a unique code for the copyright symbol, which also seems to include the 1 that comes after it
+ if (_game.id == GID_LOOM) {
+ toReplace = "\x3e\x2a";
+ copyrightReplacement += " 1";
+ }
+
+ Common::replace(ttsMessage, toReplace, copyrightReplacement);
+ Common::replace(ttsMessage, "\x1c", copyrightReplacement);
+
+ ttsMan->say(_charset->convertText(ttsMessage, _language), action);
+ return;
+ }
+ }
+ }
+}
+
+void ScummEngine::stopTextToSpeech() const {
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ if (ttsMan && ConfMan.getBool("tts_enabled") && ttsMan->isSpeaking()) {
+ ttsMan->stop();
+ }
+}
+
+void ScummEngine::sayButtonText() {
+ int hoveredControl = getInternalGUIControlFromCoordinates(_mouse.x, _mouse.y);
+ if (hoveredControl != -1 && _previousControl != hoveredControl) {
+ if (!_internalGUIControls[hoveredControl].alternateTTSLabel.empty()) {
+ sayText(_internalGUIControls[hoveredControl].alternateTTSLabel, Common::TextToSpeechManager::INTERRUPT);
+ } else {
+ sayText(_internalGUIControls[hoveredControl].label, Common::TextToSpeechManager::INTERRUPT);
+ }
+ }
+
+ _previousControl = hoveredControl;
+}
+
+#endif
+
#pragma mark -
#pragma mark --- Core message/subtitle code ---
#pragma mark -
@@ -909,6 +984,9 @@ void ScummEngine_v2::drawSentence() {
}
byte string[80];
+#ifdef USE_TTS
+ Common::String oldSentence = _sentenceBuf;
+#endif
const char *ptr = _sentenceBuf.c_str();
int i = 0, len = 0;
@@ -943,6 +1021,12 @@ void ScummEngine_v2::drawSentence() {
}
restoreBackground(sentenceline);
+#ifdef USE_TTS
+ if (oldSentence != _sentenceBuf) {
+ _voiceNextString = true;
+ }
+#endif
+
drawString(2, (byte *)string);
}
@@ -1025,7 +1109,12 @@ void ScummEngine::displayDialog() {
memcpy(&_charset->_str, &_curStringRect, sizeof(Common::Rect));
#endif
+#ifdef USE_TTS
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ if (_talkDelay || (ttsMan && ttsMan->isSpeaking()))
+#else
if (_talkDelay)
+#endif
return;
if ((_game.version <= 6 && _haveMsg == 1) ||
@@ -1129,6 +1218,9 @@ void ScummEngine::displayDialog() {
bool createTextBox = (_macGui && _game.id == GID_INDY3);
bool drawTextBox = false;
+#ifdef USE_TTS
+ Common::String ttsMessage;
+#endif
while (handleNextCharsetCode(a, &c)) {
if (c == 0) {
// End of text reached, set _haveMsg accordingly
@@ -1139,6 +1231,9 @@ void ScummEngine::displayDialog() {
}
if (c == 13) {
+#ifdef USE_TTS
+ ttsMessage += ' ';
+#endif
if (!newLine())
break;
continue;
@@ -1187,6 +1282,9 @@ void ScummEngine::displayDialog() {
if (_game.version <= 3) {
_charset->printChar(c, false);
_msgCount += 1;
+#ifdef USE_TTS
+ ttsMessage += c;
+#endif
} else {
if (_game.features & GF_16BIT_COLOR) {
// HE games which use sprites for subtitles
@@ -1199,6 +1297,9 @@ void ScummEngine::displayDialog() {
// of this message -> don't print it.
} else {
_charset->printChar(c, false);
+#ifdef USE_TTS
+ ttsMessage += c;
+#endif
}
}
_nextLeft = _charset->_left;
@@ -1212,6 +1313,14 @@ void ScummEngine::displayDialog() {
}
}
+#ifdef USE_TTS
+ if (!_mixer->isSoundHandleActive(*_sound->_talkChannelHandle) &&
+ (_game.heversion < 60 || !_sound->isSoundInUse(HSND_TALKIE_SLOT)) &&
+ !_sound->pollCD()) {
+ sayText(ttsMessage, Common::TextToSpeechManager::INTERRUPT);
+ }
+#endif
+
if (drawTextBox)
mac_drawIndy3TextBox();
@@ -1242,7 +1351,7 @@ int ScummEngine::countNumberOfWaits() {
return numWaits;
}
-void ScummEngine::drawString(int a, const byte *msg) {
+void ScummEngine::drawString(int a, const byte *msg, Common::TextToSpeechManager::Action ttsAction) {
byte buf[270];
byte *space;
int i, c;
@@ -1267,6 +1376,49 @@ void ScummEngine::drawString(int a, const byte *msg) {
_charset->_disableOffsX = _charset->_firstChar = true;
_charset->setCurID(_string[a].charset);
+#ifdef USE_TTS
+ bool bypassTalkDelay = false;
+
+ // Help menu, which uses objects for buttons
+ if (_game.id == GID_PASS && _roomResource == 2) {
+ for (uint8 index = 0; index < ARRAYSIZE(_passHelpButtons); ++index) {
+ if (_passHelpButtons[index].empty()) {
+ _voiceNextString = false;
+ int obj = findObject(_charset->_left, _charset->_top);
+
+ if (obj != 0) {
+ int adjustedObj = obj - 956;
+ if (adjustedObj >= 0 && adjustedObj < ARRAYSIZE(_passHelpButtons)) {
+ _passHelpButtons[adjustedObj] = (const char *)buf;
+ }
+ }
+ break;
+ }
+ }
+
+ if (_voiceNextString) {
+ bypassTalkDelay = true;
+ }
+ }
+
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ if (_voiceNextString && (getTalkingActor() == 0xFF || getTalkingActor() == 0) &&
+ (!_talkDelay || bypassTalkDelay || (ttsMan && !ttsMan->isSpeaking()) || ttsAction == Common::TextToSpeechManager::QUEUE)) {
+ const char *message = (const char *)buf;
+ if (!_checkPreviousSaid || scumm_stricmp(message, _previousSaid.c_str()) != 0) {
+ sayText(message, ttsAction);
+
+ if (!bypassTalkDelay) {
+ _previousSaid = message;
+ }
+ }
+
+ _voicePassHelpButtons = true;
+ _checkPreviousSaid = false;
+ _voiceNextString = false;
+ }
+#endif
+
VirtScreen *vs = findVirtScreen(_charset->_top);
bool shadowModeFlag = (vs && vs->number == kMainVirtScreen);
diff --git a/engines/scumm/string_v7.cpp b/engines/scumm/string_v7.cpp
index 6b6ac4199f0..9088be0728d 100644
--- a/engines/scumm/string_v7.cpp
+++ b/engines/scumm/string_v7.cpp
@@ -412,7 +412,7 @@ void ScummEngine_v7::createTextRenderer(GlyphRenderer_v7 *gr) {
#pragma mark --- V7 blast text queue code ---
#pragma mark -
-void ScummEngine_v7::enqueueText(const byte *text, int x, int y, byte color, byte charset, TextStyleFlags flags) {
+void ScummEngine_v7::enqueueText(const byte *text, int x, int y, byte color, byte charset, TextStyleFlags flags, bool ttsVoiceText, bool ttsIsSubtitle) {
assert(_blastTextQueuePos + 1 <= ARRAYSIZE(_blastTextQueue));
if (_useCJKMode) {
@@ -427,8 +427,14 @@ void ScummEngine_v7::enqueueText(const byte *text, int x, int y, byte color, byt
convertMessageToString(text, bt.text, sizeof(bt.text));
// The original DIG interpreter expressly checks for " " strings here. And the game also sends these quite frequently...
- if (!bt.text[0] || (bt.text[0] == (byte)' ' && !bt.text[1]))
+ if (!bt.text[0] || (bt.text[0] == (byte)' ' && !bt.text[1])) {
+#ifdef USE_TTS
+ if (getTalkingActor() == 0xFF || getTalkingActor() == 0) {
+ _previousSaid.clear();
+ }
+#endif
return;
+ }
_blastTextQueuePos++;
bt.xpos = x;
@@ -436,6 +442,10 @@ void ScummEngine_v7::enqueueText(const byte *text, int x, int y, byte color, byt
bt.color = color;
bt.charset = charset;
bt.flags = flags;
+#ifdef USE_TTS
+ bt.voiceText = ttsVoiceText;
+ bt.isSubtitle = ttsIsSubtitle;
+#endif
}
void ScummEngine_v7::drawTextImmediately(const byte *text, Common::Rect *clipRect, int x, int y, byte color, byte charset, TextStyleFlags flags) {
@@ -461,6 +471,10 @@ void ScummEngine_v7::drawTextImmediately(const byte *text, Common::Rect *clipRec
void ScummEngine_v7::drawBlastTexts() {
VirtScreen *vs = &_virtscr[kMainVirtScreen];
+#ifdef USE_TTS
+ Common::String ttsMessage;
+ Common::String ttsSubtitles;
+#endif
for (int i = 0; i < _blastTextQueuePos; i++) {
BlastText &bt = _blastTextQueue[i];
@@ -486,15 +500,49 @@ void ScummEngine_v7::drawBlastTexts() {
}
_textV7->drawStringWrap((const char*)bt.text, (byte*)vs->getPixels(0, _screenTop), bt.rect, bt.xpos, bt.ypos, vs->pitch, bt.color, bt.flags);
+#ifdef USE_TTS
+ if (bt.voiceText) {
+ if (bt.isSubtitle) {
+ ttsSubtitles += " ";
+ ttsSubtitles += (const char *)bt.text;
+ } else {
+ ttsMessage += " ";
+ ttsMessage += (const char *)bt.text;
+ }
+ }
+#endif
} else {
bt.rect = _defaultTextClipRect;
_textV7->drawString((const char*)bt.text, (byte*)vs->getPixels(0, _screenTop), bt.rect, bt.xpos, bt.ypos, vs->pitch, bt.color, bt.flags);
+
+#ifdef USE_TTS
+ if (bt.voiceText) {
+ if (bt.isSubtitle) {
+ ttsSubtitles += " ";
+ ttsSubtitles += (const char *)bt.text;
+ } else {
+ ttsMessage += " ";
+ ttsMessage += (const char *)bt.text;
+ }
+ }
+#endif
}
bt.rect.top += _screenTop;
bt.rect.bottom += _screenTop;
markRectAsDirty(vs->number, bt.rect);
}
+
+#ifdef USE_TTS
+ if (!ttsSubtitles.empty()) {
+ ttsMessage = ttsSubtitles;
+ }
+
+ if (_previousSaid != ttsMessage) {
+ sayText(ttsMessage, Common::TextToSpeechManager::INTERRUPT);
+ _previousSaid = ttsMessage;
+ }
+#endif
}
void ScummEngine_v7::removeBlastTexts() {
@@ -565,13 +613,13 @@ void ScummEngine_v7::processSubtitleQueue() {
continue;
if (usingOldSystem) {
if (st->center || VAR(VAR_VOICE_MODE)) {
- enqueueText(st->text, st->xpos, st->ypos, st->color, st->charset, (TextStyleFlags)0);
+ enqueueText(st->text, st->xpos, st->ypos, st->color, st->charset, (TextStyleFlags)0, (st->actorSpeechMsg || ConfMan.getBool("speech_mute") || VAR(VAR_VOICE_MODE) == 2), true);
}
} else {
int flags = st->wrap ? kStyleWordWrap : 0;
if (st->center)
flags |= kStyleAlignCenter;
- enqueueText(st->text, st->xpos, st->ypos, st->color, st->charset, (TextStyleFlags)flags);
+ enqueueText(st->text, st->xpos, st->ypos, st->color, st->charset, (TextStyleFlags)flags, (st->actorSpeechMsg || ConfMan.getBool("speech_mute") || VAR(VAR_VOICE_MODE) == 2), true);
}
}
}
@@ -662,7 +710,12 @@ void ScummEngine_v7::displayDialog() {
_charset->setCurID(_string[0].charset);
}
+#ifdef USE_TTS
+ Common::TextToSpeechManager *ttsMan = g_system->getTextToSpeechManager();
+ if (_talkDelay || (ttsMan && ttsMan->isSpeaking()))
+#else
if (_talkDelay)
+#endif
return;
if ((!usingOldSystem && VAR(VAR_HAVE_MSG)) || (usingOldSystem && _haveMsg != 1)) {
diff --git a/engines/scumm/verbs.cpp b/engines/scumm/verbs.cpp
index 5855cb32949..1637dd33c0e 100644
--- a/engines/scumm/verbs.cpp
+++ b/engines/scumm/verbs.cpp
@@ -116,6 +116,19 @@ void ScummEngine_v0::verbDemoMode() {
for (i = 0; i < 6; i++) {
verbDrawDemoString(i);
}
+
+#ifdef USE_TTS
+ Common::String ttsMessage;
+ for (i = 0; i < 6; i++) {
+ ttsMessage += v0DemoStr[i].str;
+ ttsMessage += "\n";
+ }
+
+ if (_previousSaid != ttsMessage) {
+ sayText(ttsMessage);
+ _previousSaid = ttsMessage;
+ }
+#endif
}
void ScummEngine_v0::verbDrawDemoString(int VerbDemoNumber) {
@@ -528,8 +541,15 @@ void ScummEngine::handleMouseOver(bool updateInventory) {
if (_completeScreenRedraw) {
verbMouseOver(0);
} else {
- if (_cursor.state > 0)
- verbMouseOver(findVerbAtPos(_mouse.x, _mouse.y));
+ if (_cursor.state > 0) {
+ int verb = findVerbAtPos(_mouse.x, _mouse.y);
+ verbMouseOver(verb);
+#ifdef USE_TTS
+ if (verb == 0) {
+ _previousVerb = 0;
+ }
+#endif
+ }
}
}
@@ -1012,7 +1032,7 @@ int ScummEngine::findVerbAtPos(int x, int y) const {
}
#ifdef ENABLE_SCUMM_7_8
-void ScummEngine_v7::drawVerb(int verb, int mode) {
+void ScummEngine_v7::drawVerb(int verb, int mode, Common::TextToSpeechManager::Action ttsAction) {
VerbSlot *vs;
if (!verb)
@@ -1088,7 +1108,7 @@ void ScummEngine_v7::drawVerb(int verb, int mode) {
vs->curRect.right = vs->curRect.left + finalWidth;
vs->curRect.bottom += _verbLineSpacing;
} else {
- enqueueText(msg, xpos, ypos, color, vs->charset_nr, flags);
+ enqueueText(msg, xpos, ypos, color, vs->charset_nr, flags, color == vs->hicolor);
}
vs->oldRect = vs->curRect;
@@ -1098,7 +1118,7 @@ void ScummEngine_v7::drawVerb(int verb, int mode) {
}
#endif
-void ScummEngine::drawVerb(int verb, int mode) {
+void ScummEngine::drawVerb(int verb, int mode, Common::TextToSpeechManager::Action ttsAction) {
VerbSlot *vs;
bool tmp;
int pixelYOffset = (_game.platform == Common::kPlatformC64) ? (_game.id == GID_ZAK ? 2 : 1) : 0;
@@ -1144,8 +1164,21 @@ void ScummEngine::drawVerb(int verb, int mode) {
if (!msg)
return;
+#ifdef USE_TTS
+ // If _voiceNextString is true at this point, it's not a typical selected verb that's filtered with _previousVerb,
+ // so use the previously said text instead
+ if (_voiceNextString) {
+ _checkPreviousSaid = true;
+ }
+
+ if (_string[4].color == vs->hicolor && _previousVerb != verb) {
+ _voiceNextString = true;
+ _previousVerb = verb;
+ }
+#endif
+
tmp = _charset->_center;
- drawString(4, msg);
+ drawString(4, msg, ttsAction);
_charset->_center = tmp;
if (isRtl)
More information about the Scummvm-git-logs
mailing list