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

ysj1173886760 42030331+ysj1173886760 at users.noreply.github.com
Fri Aug 6 12:44:21 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:
ce7cdd11b8 DIRECTOR: use comma to split the parameter of start-movie. implement loading startup movie.


Commit: ce7cdd11b8bd05adbd1472c39ba2d15f0f1e8403
    https://github.com/scummvm/scummvm/commit/ce7cdd11b8bd05adbd1472c39ba2d15f0f1e8403
Author: ysj1173886760 (1173886760 at qq.com)
Date: 2021-08-06T20:44:02+08:00

Commit Message:
DIRECTOR: use comma to split the parameter of start-movie. implement loading startup movie.

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


diff --git a/engines/director/director.h b/engines/director/director.h
index fc00fb8f6e..8ac86cf1ef 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -97,6 +97,7 @@ struct MovieReference {
 struct StartMovie {
 	Common::String startMovie;
 	int16 startFrame;
+	Common::String startupPath;
 };
 
 struct PaletteV4 {
@@ -201,6 +202,7 @@ public:
 	Movie *getCurrentMovie() const;
 	void setCurrentMovie(Movie *movie);
 	Common::String getCurrentPath() const;
+	Common::String getStartupPath() const;
 
 	// graphics.cpp
 	bool hasFeature(EngineFeature f) const override;
diff --git a/engines/director/metaengine.cpp b/engines/director/metaengine.cpp
index 35bbd85b98..d7c6656875 100644
--- a/engines/director/metaengine.cpp
+++ b/engines/director/metaengine.cpp
@@ -72,7 +72,12 @@ StartMovie DirectorEngine::getStartMovie() const {
 	if (ConfMan.hasKey("start_movie")) {
 		Common::String option = ConfMan.get("start_movie");
 		int atPos = option.findLastOf("@");
-		startMovie.startMovie = option.substr(0, atPos);
+		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);
@@ -84,6 +89,21 @@ StartMovie DirectorEngine::getStartMovie() const {
 	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);
diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp
index d17d719f09..b95f43053a 100644
--- a/engines/director/resource.cpp
+++ b/engines/director/resource.cpp
@@ -74,6 +74,19 @@ Common::Error Window::loadInitialMovie() {
 	Common::String sharedCastPath = getSharedCastPath();
 	if (!sharedCastPath.empty() && !sharedCastPath.equalsIgnoreCase(movie))
 		_currentMovie->loadSharedCastsFrom(sharedCastPath);
+
+	// load startup movie
+	Common::String startupPath = g_director->getStartupPath();
+	if (!startupPath.empty()) {
+		Archive *arc = g_director->createArchive();
+		if (arc->openFile(startupPath)) {
+			_currentMovie->setArchive(arc);
+			_currentMovie->loadArchive();
+		} else {
+			warning("Window::LoadInitialMovie: failed to load startup movie");
+		}
+	}
+
 	_currentMovie->setArchive(_mainArchive);
 
 	// XLibs are usually loaded in the initial movie.




More information about the Scummvm-git-logs mailing list