[Scummvm-git-logs] scummvm master -> 871edae91b1290c4263bf6bb8e34b64dd8f9d6b6

sluicebox noreply at scummvm.org
Mon Aug 19 19:23:17 UTC 2024


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
871edae91b SCI: Fix detection_internal.h table duplication


Commit: 871edae91b1290c4263bf6bb8e34b64dd8f9d6b6
    https://github.com/scummvm/scummvm/commit/871edae91b1290c4263bf6bb8e34b64dd8f9d6b6
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2024-08-19T12:23:14-07:00

Commit Message:
SCI: Fix detection_internal.h table duplication

Changed paths:
  A engines/sci/detection_internal.cpp
    engines/sci/detection.cpp
    engines/sci/detection_internal.h
    engines/sci/metaengine.cpp
    engines/sci/module.mk


diff --git a/engines/sci/detection.cpp b/engines/sci/detection.cpp
index d2049a29768..e713c51a180 100644
--- a/engines/sci/detection.cpp
+++ b/engines/sci/detection.cpp
@@ -226,7 +226,7 @@ DetectedGames SciMetaEngineDetection::detectGames(const Common::FSList &fslist,
 	DetectedGames games = AdvancedMetaEngineDetection::detectGames(fslist, skipADFlags, skipIncomplete);
 
 	for (DetectedGame &game : games) {
-		const GameIdStrToEnum *g = s_gameIdStrToEnum;
+		const GameIdStrToEnum *g = gameIdStrToEnum;
 		for (; g->gameidStr; ++g) {
 			if (game.gameId.equals(g->gameidStr))
 				break;
diff --git a/engines/sci/detection_internal.cpp b/engines/sci/detection_internal.cpp
new file mode 100644
index 00000000000..e3f5419c0db
--- /dev/null
+++ b/engines/sci/detection_internal.cpp
@@ -0,0 +1,155 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "common/fs.h"
+#include "common/gui_options.h"
+
+#include "sci/detection_internal.h"
+
+namespace Sci {
+
+const GameIdStrToEnum gameIdStrToEnum[] = {
+	{ "astrochicken",    "",                GID_ASTROCHICKEN,     false, SCI_VERSION_NONE },	// Sierra ID is "sq3", distinguished by resource count
+	{ "camelot",         "arthur",          GID_CAMELOT,          false, SCI_VERSION_NONE },
+	{ "castlebrain",     "brain",           GID_CASTLEBRAIN,      false, SCI_VERSION_1_LATE },	// Amiga is SCI1 middle, PC SCI1 late
+	{ "chest",           "archive",         GID_CHEST,            true,  SCI_VERSION_NONE },
+	{ "christmas1988",   "demo",            GID_CHRISTMAS1988,    false, SCI_VERSION_0_EARLY },
+	{ "christmas1990",   "card",            GID_CHRISTMAS1990,    false, SCI_VERSION_1_EARLY },
+	{ "christmas1992",   "card",            GID_CHRISTMAS1992,    false, SCI_VERSION_1_1 },
+	{ "cnick-kq",        "",                GID_CNICK_KQ,         false, SCI_VERSION_NONE },	// Sierra ID is "hoyle3", distinguished by resource count
+	{ "cnick-laurabow",  "",                GID_CNICK_LAURABOW,   false, SCI_VERSION_NONE },
+	{ "cnick-longbow",   "RH Budget",       GID_CNICK_LONGBOW,    false, SCI_VERSION_NONE },
+	{ "cnick-lsl",       "",                GID_CNICK_LSL,        false, SCI_VERSION_NONE },	// Sierra ID is "lsl1", distinguished by resource count
+	{ "cnick-sq",        "",                GID_CNICK_SQ,         false, SCI_VERSION_NONE },	// Sierra ID is "sq4", distinguished by resource count
+	{ "ecoquest",        "eco",             GID_ECOQUEST,         false, SCI_VERSION_NONE },
+	{ "ecoquest2",       "rain",            GID_ECOQUEST2,        false, SCI_VERSION_NONE },
+	{ "fairytales",      "tales",           GID_FAIRYTALES,       false, SCI_VERSION_NONE },
+	{ "freddypharkas",   "fp",              GID_FREDDYPHARKAS,    false, SCI_VERSION_NONE },
+	{ "funseeker",       "emc",             GID_FUNSEEKER,        false, SCI_VERSION_NONE },
+	{ "gk1demo",         "",                GID_GK1DEMO,          false, SCI_VERSION_NONE },
+	{ "gk1",             "gk",              GID_GK1,              true,  SCI_VERSION_NONE },
+	{ "gk2",             "gk2",             GID_GK2,              true,  SCI_VERSION_NONE },
+	{ "hoyle1",          "cardgames",       GID_HOYLE1,           false, SCI_VERSION_NONE },
+	{ "hoyle2",          "solitaire",       GID_HOYLE2,           false, SCI_VERSION_NONE },
+	{ "hoyle3",          "hoyle3",          GID_HOYLE3,           false, SCI_VERSION_NONE },
+	{ "hoyle4",          "hoyle4",          GID_HOYLE4,           false, SCI_VERSION_1_1 },
+	{ "hoyle5",          "hoyle4",          GID_HOYLE5,           true,  SCI_VERSION_2_1_MIDDLE },
+	{ "hoyle5bridge",    "",                GID_HOYLE5,           true,  SCI_VERSION_2_1_MIDDLE },
+	{ "hoyle5children",  "",                GID_HOYLE5,           true,  SCI_VERSION_2_1_MIDDLE },
+	{ "hoyle5school",    "",                GID_HOYLE5,           true,  SCI_VERSION_2_1_MIDDLE },
+	{ "hoyle5solitaire", "",                GID_HOYLE5,           true,  SCI_VERSION_2_1_MIDDLE },
+	{ "iceman",          "iceman",          GID_ICEMAN,           false, SCI_VERSION_NONE },
+	{ "inndemo",         "",                GID_INNDEMO,          false, SCI_VERSION_NONE },
+	{ "islandbrain",     "brain",           GID_ISLANDBRAIN,      false, SCI_VERSION_1_1 },
+	{ "jones",           "jones",           GID_JONES,            false, SCI_VERSION_1_1 },
+	{ "kq1sci",          "kq1",             GID_KQ1,              false, SCI_VERSION_NONE },
+	{ "kq4sci",          "kq4",             GID_KQ4,              false, SCI_VERSION_NONE },
+	{ "kq5",             "kq5",             GID_KQ5,              false, SCI_VERSION_NONE },
+	{ "kq6",             "kq6",             GID_KQ6,              false, SCI_VERSION_NONE },
+	{ "kq7",             "kq7cd",           GID_KQ7,              true,  SCI_VERSION_NONE },
+	{ "kquestions",      "quizgame-demo",   GID_KQUESTIONS,       true,  SCI_VERSION_NONE },
+	{ "laurabow",        "cb1",             GID_LAURABOW,         false, SCI_VERSION_NONE },
+	{ "laurabow2",       "lb2",             GID_LAURABOW2,        false, SCI_VERSION_NONE },
+	{ "lighthouse",      "lite",            GID_LIGHTHOUSE,       true,  SCI_VERSION_NONE },
+	{ "longbow",         "longbow",         GID_LONGBOW,          false, SCI_VERSION_NONE },
+	{ "lsl1sci",         "lsl1",            GID_LSL1,             false, SCI_VERSION_NONE },
+	{ "lsl2",            "lsl2",            GID_LSL2,             false, SCI_VERSION_NONE },
+	{ "lsl3",            "lsl3",            GID_LSL3,             false, SCI_VERSION_NONE },
+	{ "lsl5",            "lsl5",            GID_LSL5,             false, SCI_VERSION_NONE },
+	{ "lsl6",            "lsl6",            GID_LSL6,             false, SCI_VERSION_NONE },
+	{ "lsl6hires",       "",                GID_LSL6HIRES,        true,  SCI_VERSION_NONE },
+	{ "lsl7",            "l7",              GID_LSL7,             true,  SCI_VERSION_NONE },
+	{ "mothergoose",     "mg",              GID_MOTHERGOOSE,      false, SCI_VERSION_NONE },
+	{ "mothergoose256",  "",                GID_MOTHERGOOSE256,   false, SCI_VERSION_NONE },
+	{ "mothergoosehires","",                GID_MOTHERGOOSEHIRES, true,  SCI_VERSION_NONE },
+	{ "msastrochicken",  "",                GID_MSASTROCHICKEN,   false, SCI_VERSION_NONE },	// Sierra ID is "sq4", distinguished by resource count
+	{ "pepper",          "twisty",          GID_PEPPER,           false, SCI_VERSION_NONE },
+	{ "phantasmagoria",  "scary",           GID_PHANTASMAGORIA,   true,  SCI_VERSION_NONE },
+	{ "phantasmagoria2", "p2",              GID_PHANTASMAGORIA2,  true,  SCI_VERSION_NONE },
+	{ "pq1sci",          "pq1",             GID_PQ1,              false, SCI_VERSION_NONE },
+	{ "pq2",             "pq",              GID_PQ2,              false, SCI_VERSION_NONE },
+	{ "pq3",             "pq3",             GID_PQ3,              false, SCI_VERSION_NONE },
+	{ "pq4",             "pq4",             GID_PQ4,              true,  SCI_VERSION_NONE },
+	{ "pq4demo",         "",                GID_PQ4DEMO,          false, SCI_VERSION_NONE },
+	{ "pqswat",          "swat",            GID_PQSWAT,           true,  SCI_VERSION_NONE },
+	{ "qfg1",            "gfg1",            GID_QFG1,             false, SCI_VERSION_NONE },
+	{ "qfg1vga",         "",                GID_QFG1VGA,          false, SCI_VERSION_NONE },	// Sierra ID is "glory", distinguished by resources
+	{ "qfg2",            "trial",           GID_QFG2,             false, SCI_VERSION_NONE },
+	{ "qfg3",            "",                GID_QFG3,             false, SCI_VERSION_NONE },	// Sierra ID is "glory", distinguished by resources
+	{ "qfg4",            "",                GID_QFG4,             true,  SCI_VERSION_NONE },	// Sierra ID is "glory", distinguished by resources
+	{ "qfg4demo",        "",                GID_QFG4DEMO,         false, SCI_VERSION_NONE },	// Sierra ID is "glory", distinguished by resources
+	{ "rama",            "rama",            GID_RAMA,             true,  SCI_VERSION_NONE },
+	{ "sci-fanmade",     "",                GID_FANMADE,          false, SCI_VERSION_NONE },
+	{ "shivers",         "",                GID_SHIVERS,          true,  SCI_VERSION_NONE },
+	//{ "shivers2",        "shivers2",        GID_SHIVERS2,       true,  SCI_VERSION_NONE },	// Not SCI
+	{ "slater",          "thegame",         GID_SLATER,           false, SCI_VERSION_NONE },
+	{ "sq1sci",          "sq1",             GID_SQ1,              false, SCI_VERSION_NONE },
+	{ "sq3",             "sq3",             GID_SQ3,              false, SCI_VERSION_NONE },
+	{ "sq4",             "sq4",             GID_SQ4,              false, SCI_VERSION_NONE },
+	{ "sq5",             "sq5",             GID_SQ5,              false, SCI_VERSION_NONE },
+	{ "sq6",             "sq6",             GID_SQ6,              true,  SCI_VERSION_NONE },
+	{ "torin",           "torin",           GID_TORIN,            true,  SCI_VERSION_NONE },
+	{ nullptr,           nullptr,           GID_ALL,              false, SCI_VERSION_NONE }
+};
+
+Common::String customizeGuiOptions(Common::Path gamePath, Common::String guiOptions, SciVersion version) {
+	struct RMode {
+		SciVersion min;
+		SciVersion max;
+		const char gfxDriverName[13];
+		const char *guio;
+	} rmodes[] = {
+		{ SCI_VERSION_0_EARLY,	SCI_VERSION_1_EGA_ONLY,		"EGA320.DRV",		GUIO_RENDEREGA },
+		{ SCI_VERSION_0_EARLY,	SCI_VERSION_1_EGA_ONLY,		"CGA320C.DRV",		GUIO_RENDERCGA },
+		{ SCI_VERSION_0_EARLY,	SCI_VERSION_1_EGA_ONLY,		"CGA320BW.DRV",		GUIO_RENDERCGABW },
+		{ SCI_VERSION_0_EARLY,	SCI_VERSION_1_EGA_ONLY,		"CGA320M.DRV",		GUIO_RENDERCGABW },
+		{ SCI_VERSION_0_EARLY,	SCI_VERSION_1_EGA_ONLY,		"HERCMONO.DRV",		GUIO_RENDERHERCAMBER },
+		{ SCI_VERSION_0_EARLY,	SCI_VERSION_1_EGA_ONLY,		"HERCMONO.DRV",		GUIO_RENDERHERCGREEN },
+		{ SCI_VERSION_1_EARLY,	SCI_VERSION_1_1,			"VGA320.DRV",		GUIO_RENDERVGA },
+		{ SCI_VERSION_1_EARLY,	SCI_VERSION_1_1,			"VGA320BW.DRV",		GUIO_RENDERVGAGREY },
+		{ SCI_VERSION_1_EARLY,	SCI_VERSION_1_1,			"EGA640.DRV",		GUIO_RENDEREGA },
+		{ SCI_VERSION_01,		SCI_VERSION_1_LATE,			"9801V16.DRV",		GUIO_RENDERPC98_16C },
+		{ SCI_VERSION_01,		SCI_VERSION_01,				"9801VID.DRV",		GUIO_RENDERPC98_16C },
+		{ SCI_VERSION_1_LATE,	SCI_VERSION_1_LATE,			"9801V8.DRV",		GUIO_RENDERPC98_8C },
+		{ SCI_VERSION_01,		SCI_VERSION_01,				"9801V8M.DRV",		GUIO_RENDERPC98_8C },
+		{ SCI_VERSION_01,		SCI_VERSION_01,				"9801VID.DRV",		GUIO_RENDERPC98_8C },
+	};
+
+	Common::FSNode node(gamePath);
+
+	if (!node.exists()) {
+		warning("Game path '%s' could not be accessed", gamePath.toString().c_str());
+		return guiOptions;
+	}
+
+	Common::FSList files;
+	node.getChildren(files, Common::FSNode::kListFilesOnly);
+	for (Common::FSList::const_iterator i = files.begin(); i != files.end(); ++i) {
+		for (int ii = 0; ii < ARRAYSIZE(rmodes); ii++) {
+			if ((version == SCI_VERSION_NONE || (version >= rmodes[ii].min && version <= rmodes[ii].max)) && i->getFileName().equalsIgnoreCase(rmodes[ii].gfxDriverName))
+				guiOptions += rmodes[ii].guio;
+		}
+	}
+
+	return guiOptions;
+}
+
+} // End of namespace Sci
diff --git a/engines/sci/detection_internal.h b/engines/sci/detection_internal.h
index 94f9ff8749a..58b5a6c4052 100644
--- a/engines/sci/detection_internal.h
+++ b/engines/sci/detection_internal.h
@@ -22,11 +22,9 @@
 #ifndef SCI_DETECTION_INTERNAL_H
 #define SCI_DETECTION_INTERNAL_H
 
-#include "common/fs.h"
 #include "common/path.h"
 
 #include "sci/detection.h"
-#include "sci/version.h"
 
 namespace Sci {
 
@@ -38,131 +36,9 @@ struct GameIdStrToEnum {
 	SciVersion version;
 };
 
-static const GameIdStrToEnum s_gameIdStrToEnum[] = {
-	{ "astrochicken",    "",                GID_ASTROCHICKEN,     false, SCI_VERSION_NONE },	// Sierra ID is "sq3", distinguished by resource count
-	{ "camelot",         "arthur",          GID_CAMELOT,          false, SCI_VERSION_NONE },
-	{ "castlebrain",     "brain",           GID_CASTLEBRAIN,      false, SCI_VERSION_1_LATE },	// Amiga is SCI1 middle, PC SCI1 late
-	{ "chest",           "archive",         GID_CHEST,            true,  SCI_VERSION_NONE },
-	{ "christmas1988",   "demo",            GID_CHRISTMAS1988,    false, SCI_VERSION_0_EARLY },
-	{ "christmas1990",   "card",            GID_CHRISTMAS1990,    false, SCI_VERSION_1_EARLY },
-	{ "christmas1992",   "card",            GID_CHRISTMAS1992,    false, SCI_VERSION_1_1 },
-	{ "cnick-kq",        "",                GID_CNICK_KQ,         false, SCI_VERSION_NONE },	// Sierra ID is "hoyle3", distinguished by resource count
-	{ "cnick-laurabow",  "",                GID_CNICK_LAURABOW,   false, SCI_VERSION_NONE },
-	{ "cnick-longbow",   "RH Budget",       GID_CNICK_LONGBOW,    false, SCI_VERSION_NONE },
-	{ "cnick-lsl",       "",                GID_CNICK_LSL,        false, SCI_VERSION_NONE },	// Sierra ID is "lsl1", distinguished by resource count
-	{ "cnick-sq",        "",                GID_CNICK_SQ,         false, SCI_VERSION_NONE },	// Sierra ID is "sq4", distinguished by resource count
-	{ "ecoquest",        "eco",             GID_ECOQUEST,         false, SCI_VERSION_NONE },
-	{ "ecoquest2",       "rain",            GID_ECOQUEST2,        false, SCI_VERSION_NONE },
-	{ "fairytales",      "tales",           GID_FAIRYTALES,       false, SCI_VERSION_NONE },
-	{ "freddypharkas",   "fp",              GID_FREDDYPHARKAS,    false, SCI_VERSION_NONE },
-	{ "funseeker",       "emc",             GID_FUNSEEKER,        false, SCI_VERSION_NONE },
-	{ "gk1demo",         "",                GID_GK1DEMO,          false, SCI_VERSION_NONE },
-	{ "gk1",             "gk",              GID_GK1,              true,  SCI_VERSION_NONE },
-	{ "gk2",             "gk2",             GID_GK2,              true,  SCI_VERSION_NONE },
-	{ "hoyle1",          "cardgames",       GID_HOYLE1,           false, SCI_VERSION_NONE },
-	{ "hoyle2",          "solitaire",       GID_HOYLE2,           false, SCI_VERSION_NONE },
-	{ "hoyle3",          "hoyle3",          GID_HOYLE3,           false, SCI_VERSION_NONE },
-	{ "hoyle4",          "hoyle4",          GID_HOYLE4,           false, SCI_VERSION_1_1 },
-	{ "hoyle5",          "hoyle4",          GID_HOYLE5,           true,  SCI_VERSION_2_1_MIDDLE },
-	{ "hoyle5bridge",    "",                GID_HOYLE5,           true,  SCI_VERSION_2_1_MIDDLE },
-	{ "hoyle5children",  "",                GID_HOYLE5,           true,  SCI_VERSION_2_1_MIDDLE },
-	{ "hoyle5school",    "",                GID_HOYLE5,           true,  SCI_VERSION_2_1_MIDDLE },
-	{ "hoyle5solitaire", "",                GID_HOYLE5,           true,  SCI_VERSION_2_1_MIDDLE },
-	{ "iceman",          "iceman",          GID_ICEMAN,           false, SCI_VERSION_NONE },
-	{ "inndemo",         "",                GID_INNDEMO,          false, SCI_VERSION_NONE },
-	{ "islandbrain",     "brain",           GID_ISLANDBRAIN,      false, SCI_VERSION_1_1 },
-	{ "jones",           "jones",           GID_JONES,            false, SCI_VERSION_1_1 },
-	{ "kq1sci",          "kq1",             GID_KQ1,              false, SCI_VERSION_NONE },
-	{ "kq4sci",          "kq4",             GID_KQ4,              false, SCI_VERSION_NONE },
-	{ "kq5",             "kq5",             GID_KQ5,              false, SCI_VERSION_NONE },
-	{ "kq6",             "kq6",             GID_KQ6,              false, SCI_VERSION_NONE },
-	{ "kq7",             "kq7cd",           GID_KQ7,              true,  SCI_VERSION_NONE },
-	{ "kquestions",      "quizgame-demo",   GID_KQUESTIONS,       true,  SCI_VERSION_NONE },
-	{ "laurabow",        "cb1",             GID_LAURABOW,         false, SCI_VERSION_NONE },
-	{ "laurabow2",       "lb2",             GID_LAURABOW2,        false, SCI_VERSION_NONE },
-	{ "lighthouse",      "lite",            GID_LIGHTHOUSE,       true,  SCI_VERSION_NONE },
-	{ "longbow",         "longbow",         GID_LONGBOW,          false, SCI_VERSION_NONE },
-	{ "lsl1sci",         "lsl1",            GID_LSL1,             false, SCI_VERSION_NONE },
-	{ "lsl2",            "lsl2",            GID_LSL2,             false, SCI_VERSION_NONE },
-	{ "lsl3",            "lsl3",            GID_LSL3,             false, SCI_VERSION_NONE },
-	{ "lsl5",            "lsl5",            GID_LSL5,             false, SCI_VERSION_NONE },
-	{ "lsl6",            "lsl6",            GID_LSL6,             false, SCI_VERSION_NONE },
-	{ "lsl6hires",       "",                GID_LSL6HIRES,        true,  SCI_VERSION_NONE },
-	{ "lsl7",            "l7",              GID_LSL7,             true,  SCI_VERSION_NONE },
-	{ "mothergoose",     "mg",              GID_MOTHERGOOSE,      false, SCI_VERSION_NONE },
-	{ "mothergoose256",  "",                GID_MOTHERGOOSE256,   false, SCI_VERSION_NONE },
-	{ "mothergoosehires","",                GID_MOTHERGOOSEHIRES, true,  SCI_VERSION_NONE },
-	{ "msastrochicken",  "",                GID_MSASTROCHICKEN,   false, SCI_VERSION_NONE },	// Sierra ID is "sq4", distinguished by resource count
-	{ "pepper",          "twisty",          GID_PEPPER,           false, SCI_VERSION_NONE },
-	{ "phantasmagoria",  "scary",           GID_PHANTASMAGORIA,   true,  SCI_VERSION_NONE },
-	{ "phantasmagoria2", "p2",              GID_PHANTASMAGORIA2,  true,  SCI_VERSION_NONE },
-	{ "pq1sci",          "pq1",             GID_PQ1,              false, SCI_VERSION_NONE },
-	{ "pq2",             "pq",              GID_PQ2,              false, SCI_VERSION_NONE },
-	{ "pq3",             "pq3",             GID_PQ3,              false, SCI_VERSION_NONE },
-	{ "pq4",             "pq4",             GID_PQ4,              true,  SCI_VERSION_NONE },
-	{ "pq4demo",         "",                GID_PQ4DEMO,          false, SCI_VERSION_NONE },
-	{ "pqswat",          "swat",            GID_PQSWAT,           true,  SCI_VERSION_NONE },
-	{ "qfg1",            "gfg1",            GID_QFG1,             false, SCI_VERSION_NONE },
-	{ "qfg1vga",         "",                GID_QFG1VGA,          false, SCI_VERSION_NONE },	// Sierra ID is "glory", distinguished by resources
-	{ "qfg2",            "trial",           GID_QFG2,             false, SCI_VERSION_NONE },
-	{ "qfg3",            "",                GID_QFG3,             false, SCI_VERSION_NONE },	// Sierra ID is "glory", distinguished by resources
-	{ "qfg4",            "",                GID_QFG4,             true,  SCI_VERSION_NONE },	// Sierra ID is "glory", distinguished by resources
-	{ "qfg4demo",        "",                GID_QFG4DEMO,         false, SCI_VERSION_NONE },	// Sierra ID is "glory", distinguished by resources
-	{ "rama",            "rama",            GID_RAMA,             true,  SCI_VERSION_NONE },
-	{ "sci-fanmade",     "",                GID_FANMADE,          false, SCI_VERSION_NONE },
-	{ "shivers",         "",                GID_SHIVERS,          true,  SCI_VERSION_NONE },
-	//{ "shivers2",        "shivers2",        GID_SHIVERS2,       true,  SCI_VERSION_NONE },	// Not SCI
-	{ "slater",          "thegame",         GID_SLATER,           false, SCI_VERSION_NONE },
-	{ "sq1sci",          "sq1",             GID_SQ1,              false, SCI_VERSION_NONE },
-	{ "sq3",             "sq3",             GID_SQ3,              false, SCI_VERSION_NONE },
-	{ "sq4",             "sq4",             GID_SQ4,              false, SCI_VERSION_NONE },
-	{ "sq5",             "sq5",             GID_SQ5,              false, SCI_VERSION_NONE },
-	{ "sq6",             "sq6",             GID_SQ6,              true,  SCI_VERSION_NONE },
-	{ "torin",           "torin",           GID_TORIN,            true,  SCI_VERSION_NONE },
-	{ nullptr,           nullptr,           GID_ALL,              false, SCI_VERSION_NONE }
-};
-
-static Common::String customizeGuiOptions(Common::Path gamePath, Common::String guiOptions, SciVersion version) {
-	struct RMode {
-		SciVersion min;
-		SciVersion max;
-		const char gfxDriverName[13];
-		const char *guio;
-	} rmodes[] = {
-		{ SCI_VERSION_0_EARLY,	SCI_VERSION_1_EGA_ONLY,		"EGA320.DRV",		GUIO_RENDEREGA },
-		{ SCI_VERSION_0_EARLY,	SCI_VERSION_1_EGA_ONLY,		"CGA320C.DRV",		GUIO_RENDERCGA },
-		{ SCI_VERSION_0_EARLY,	SCI_VERSION_1_EGA_ONLY,		"CGA320BW.DRV",		GUIO_RENDERCGABW },
-		{ SCI_VERSION_0_EARLY,	SCI_VERSION_1_EGA_ONLY,		"CGA320M.DRV",		GUIO_RENDERCGABW },
-		{ SCI_VERSION_0_EARLY,	SCI_VERSION_1_EGA_ONLY,		"HERCMONO.DRV",		GUIO_RENDERHERCAMBER },
-		{ SCI_VERSION_0_EARLY,	SCI_VERSION_1_EGA_ONLY,		"HERCMONO.DRV",		GUIO_RENDERHERCGREEN },
-		{ SCI_VERSION_1_EARLY,	SCI_VERSION_1_1,			"VGA320.DRV",		GUIO_RENDERVGA },
-		{ SCI_VERSION_1_EARLY,	SCI_VERSION_1_1,			"VGA320BW.DRV",		GUIO_RENDERVGAGREY },
-		{ SCI_VERSION_1_EARLY,	SCI_VERSION_1_1,			"EGA640.DRV",		GUIO_RENDEREGA },
-		{ SCI_VERSION_01,		SCI_VERSION_1_LATE,			"9801V16.DRV",		GUIO_RENDERPC98_16C },
-		{ SCI_VERSION_01,		SCI_VERSION_01,				"9801VID.DRV",		GUIO_RENDERPC98_16C },
-		{ SCI_VERSION_1_LATE,	SCI_VERSION_1_LATE,			"9801V8.DRV",		GUIO_RENDERPC98_8C },
-		{ SCI_VERSION_01,		SCI_VERSION_01,				"9801V8M.DRV",		GUIO_RENDERPC98_8C },
-		{ SCI_VERSION_01,		SCI_VERSION_01,				"9801VID.DRV",		GUIO_RENDERPC98_8C },
-	};
-
-	Common::FSNode node(gamePath);
-
-	if (!node.exists()) {
-		warning("Game path '%s' could not be accessed", gamePath.toString().c_str());
-		return guiOptions;
-	}
-
-	Common::FSList files;
-	node.getChildren(files, Common::FSNode::kListFilesOnly);
-	for (Common::FSList::const_iterator i = files.begin(); i != files.end(); ++i) {
-		for (int ii = 0; ii < ARRAYSIZE(rmodes); ii++) {
-			if ((version == SCI_VERSION_NONE || (version >= rmodes[ii].min && version <= rmodes[ii].max)) && i->getFileName().equalsIgnoreCase(rmodes[ii].gfxDriverName))
-				guiOptions += rmodes[ii].guio;
-		}
-	}
+extern const GameIdStrToEnum gameIdStrToEnum[];
 
-	return guiOptions;
-}
+Common::String customizeGuiOptions(Common::Path gamePath, Common::String guiOptions, SciVersion version);
 
 } // End of namespace Sci
 
diff --git a/engines/sci/metaengine.cpp b/engines/sci/metaengine.cpp
index d8ba6b1915c..1f53e20ecef 100644
--- a/engines/sci/metaengine.cpp
+++ b/engines/sci/metaengine.cpp
@@ -125,7 +125,7 @@ static Common::String convertSierraGameId(Common::String sierraId, SciVersion sc
 			return "msastrochicken";
 	}
 
-	for (const GameIdStrToEnum *cur = s_gameIdStrToEnum; cur->gameidStr; ++cur) {
+	for (const GameIdStrToEnum *cur = gameIdStrToEnum; cur->gameidStr; ++cur) {
 		if (sierraId == cur->sierraIdStr) {
 			// Distinguish same IDs via the SCI version
 			if (cur->version != SCI_VERSION_NONE && cur->version != sciVersion)
@@ -204,7 +204,7 @@ public:
 };
 
 Common::Error SciMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const {
-	const GameIdStrToEnum *g = s_gameIdStrToEnum;
+	const GameIdStrToEnum *g = gameIdStrToEnum;
 	for (; g->gameidStr; ++g) {
 		if (0 == strcmp(desc->gameId, g->gameidStr)) {
 #ifndef ENABLE_SCI32
diff --git a/engines/sci/module.mk b/engines/sci/module.mk
index ec1109a3a74..51b3a2d8b9c 100644
--- a/engines/sci/module.mk
+++ b/engines/sci/module.mk
@@ -2,6 +2,7 @@ MODULE := engines/sci
 
 MODULE_OBJS := \
 	console.o \
+	detection_internal.o \
 	dialogs.o \
 	event.o \
 	metaengine.o \
@@ -122,3 +123,10 @@ include $(srcdir)/rules.mk
 
 # Detection objects
 DETECT_OBJS += $(MODULE)/detection.o
+
+# Skip building the following objects if a static
+# module is enabled, because it already has the contents.
+ifneq ($(ENABLE_SCI), STATIC_PLUGIN)
+# External dependencies for detection.
+DETECT_OBJS += $(MODULE)/detection_internal.o
+endif




More information about the Scummvm-git-logs mailing list