[Scummvm-git-logs] scummvm master -> 60c79db522e6bc89d145f66a44d358b5f36bf190

sev- sev at scummvm.org
Fri Aug 6 22:08:02 UTC 2021


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

Summary:
60c79db522 DIRECTOR: Reworked --startup-movie processing. Now the options order is arbitrary


Commit: 60c79db522e6bc89d145f66a44d358b5f36bf190
    https://github.com/scummvm/scummvm/commit/60c79db522e6bc89d145f66a44d358b5f36bf190
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2021-08-07T00:02:01+02:00

Commit Message:
DIRECTOR: Reworked --startup-movie processing. Now the options order is arbitrary

Changed paths:
    engines/director/director.cpp
    engines/director/director.h
    engines/director/metaengine.cpp


diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index f6041eaf97..57f60e3ae6 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -23,6 +23,8 @@
 #include "common/config-manager.h"
 #include "common/debug-channels.h"
 #include "common/error.h"
+#include "common/punycode.h"
+#include "common/tokenizer.h"
 
 #include "graphics/macgui/macwindowmanager.h"
 
@@ -56,6 +58,8 @@ DirectorEngine *g_director;
 DirectorEngine::DirectorEngine(OSystem *syst, const DirectorGameDescription *gameDesc) : Engine(syst), _gameDescription(gameDesc) {
 	g_director = this;
 
+	parseOptions();
+
 	// Setup mixer
 	syncSoundSettings();
 
@@ -221,4 +225,73 @@ Common::CodePage DirectorEngine::getPlatformEncoding() {
 	return getEncoding(getPlatform(), getLanguage());
 }
 
+Common::String DirectorEngine::getEXEName() const {
+	StartMovie startMovie = getStartMovie();
+	if (startMovie.startMovie.size() > 0)
+		return startMovie.startMovie;
+
+	return Common::punycode_decodefilename(_gameDescription->desc.filesDescriptions[0].fileName);
+}
+
+void DirectorEngine::parseOptions() {
+	_options.startMovie.startFrame = -1;
+
+	if (!ConfMan.hasKey("start_movie"))
+		return;
+
+	Common::StringTokenizer tok(ConfMan.get("start_movie"), ",");
+
+	while (!tok.empty()) {
+		Common::String part = tok.nextToken();
+
+		int eqPos = part.findLastOf("=");
+		Common::String key;
+		Common::String value;
+
+		if ((uint)eqPos != Common::String::npos) {
+			key = part.substr(0, eqPos);
+			value = part.substr(eqPos + 1, part.size());
+		} else {
+			value = part;
+		}
+
+		if (key == "movie" || key.empty()) { // Format is movie[@startFrame]
+			if (!_options.startMovie.startMovie.empty()) {
+				warning("parseOptions(): Duplicate startup movie: %s", value.c_str());
+			}
+
+			int atPos = value.findLastOf("@");
+
+			if ((uint)atPos == Common::String::npos) {
+				_options.startMovie.startMovie = value;
+			} else {
+				_options.startMovie.startMovie = value.substr(0, atPos);
+				Common::String tail = value.substr(atPos + 1, value.size());
+				if (tail.size() > 0)
+					_options.startMovie.startFrame = atoi(tail.c_str());
+			}
+
+			if (Common::punycode_hasprefix(_options.startMovie.startMovie))
+				_options.startMovie.startMovie = Common::punycode_decodepath(_options.startMovie.startMovie);
+
+			debug(2, "parseOptions(): Movie is: %s, frame is: %d", _options.startMovie.startMovie.c_str(), _options.startMovie.startFrame);
+		} else if (key == "startup") {
+			_options.startupPath = value;
+
+			debug(2, "parseOptions(): Startup is: %s", value.c_str());
+		} else {
+			warning("parseOptions(): unknown option %s", part.c_str());
+		}
+
+	}
+}
+
+StartMovie DirectorEngine::getStartMovie() const {
+	return _options.startMovie;
+}
+
+Common::String DirectorEngine::getStartupPath() const {
+	return _options.startupPath;
+}
+
 } // End of namespace Director
diff --git a/engines/director/director.h b/engines/director/director.h
index 8ac86cf1ef..9c6da3c54b 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -97,6 +97,11 @@ struct MovieReference {
 struct StartMovie {
 	Common::String startMovie;
 	int16 startFrame;
+
+};
+
+struct StartOptions {
+	StartMovie startMovie;
 	Common::String startupPath;
 };
 
@@ -191,6 +196,7 @@ public:
 	const char *getExtra();
 	Common::String getEXEName() const;
 	StartMovie getStartMovie() const;
+	void parseOptions();
 	Graphics::MacWindowManager *getMacWindowManager() const { return _wm; }
 	Archive *getMainArchive() const;
 	Lingo *getLingo() const { return _lingo; }
@@ -275,6 +281,8 @@ private:
 	Common::HashMap<int, PaletteV4> _loadedPalettes;
 
 	Graphics::ManagedSurface *_surface;
+
+	StartOptions _options;
 };
 
 extern DirectorEngine *g_director;
diff --git a/engines/director/metaengine.cpp b/engines/director/metaengine.cpp
index d7c6656875..edc0cb9c7e 100644
--- a/engines/director/metaengine.cpp
+++ b/engines/director/metaengine.cpp
@@ -26,7 +26,6 @@
 
 #include "common/file.h"
 #include "common/config-manager.h"
-#include "common/punycode.h"
 
 #include "director/director.h"
 #include "director/detection.h"
@@ -57,53 +56,6 @@ const char *DirectorEngine::getExtra() {
 	return _gameDescription->desc.extra;
 }
 
-Common::String DirectorEngine::getEXEName() const {
-	StartMovie startMovie = getStartMovie();
-	if (startMovie.startMovie.size() > 0)
-		return startMovie.startMovie;
-
-	return Common::punycode_decodefilename(_gameDescription->desc.filesDescriptions[0].fileName);
-}
-
-StartMovie DirectorEngine::getStartMovie() const {
-	StartMovie startMovie;
-	startMovie.startFrame = -1;
-
-	if (ConfMan.hasKey("start_movie")) {
-		Common::String option = ConfMan.get("start_movie");
-		int atPos = option.findLastOf("@");
-		if ((uint)atPos == Common::String::npos) {
-			int commaPos = option.findLastOf(",");
-			startMovie.startMovie = option.substr(0, commaPos);
-		} else {
-			startMovie.startMovie = option.substr(0, atPos);
-		}
-
-		if (Common::punycode_hasprefix(startMovie.startMovie))
-			startMovie.startMovie = Common::punycode_decodepath(startMovie.startMovie);
-
-		Common::String tail = option.substr(atPos + 1, option.size());
-		if (tail.size() > 0)
-			startMovie.startFrame = atoi(tail.c_str());
-	}
-	return startMovie;
-}
-
-Common::String DirectorEngine::getStartupPath() const {
-	if (ConfMan.hasKey("start_movie")) {
-		Common::String option = ConfMan.get("start_movie");
-
-		int atPos = option.findLastOf(",");
-		if ((uint)atPos == Common::String::npos)
-			return "";
-
-		Common::String tail = option.substr(atPos + 1, option.size());
-		if (tail.size() > 0)
-			return tail;
-	}
-	return "";
-}
-
 bool DirectorEngine::hasFeature(EngineFeature f) const {
 	return false;
 		//(f == kSupportsReturnToLauncher);




More information about the Scummvm-git-logs mailing list