[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