[Scummvm-git-logs] scummvm master -> 9fad2dd13ba40743286c3e4ea8c34d79acd4459e
npjg
nathanael.gentrydb8 at gmail.com
Wed Aug 5 15:43:01 UTC 2020
This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
4c75242ae7 DIRECTOR: Fix typo
5cb525e29e DIRECTOR: Record game data directory
b0c3246574 DIRECTOR: Also convert directory paths
9fad2dd13b DIRECTOR: LINGO: Implement getNthFileNameInFolder
Commit: 4c75242ae70c45267c494b106eb439b9280721a7
https://github.com/scummvm/scummvm/commit/4c75242ae70c45267c494b106eb439b9280721a7
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-08-05T11:41:30-04:00
Commit Message:
DIRECTOR: Fix typo
Changed paths:
engines/director/util.cpp
engines/director/util.h
diff --git a/engines/director/util.cpp b/engines/director/util.cpp
index a6837e7ae5..f5c34580f1 100644
--- a/engines/director/util.cpp
+++ b/engines/director/util.cpp
@@ -419,7 +419,7 @@ Common::String pathMakeRelative(Common::String path, bool recursive, bool addext
return initialPath;
}
- Common::String testExtensions(Common::String component, Common::String initialPath, Common::String convPath) {
+Common::String testExtensions(Common::String component, Common::String initialPath, Common::String convPath) {
const char *exts[] = { ".MMM", ".DIR", ".DXR", 0 };
for (int i = 0; exts[i]; ++i) {
Common::String newpath = convPath + (strcmp(exts[i], ".MMM") == 0 ? convertMacFilename(component.c_str()) : component.c_str()) + exts[i];
diff --git a/engines/director/util.h b/engines/director/util.h
index ebca11bf7d..dfd8d06004 100644
--- a/engines/director/util.h
+++ b/engines/director/util.h
@@ -42,7 +42,7 @@ bool testPath(Common::String &path);
Common::String pathMakeRelative(Common::String path, bool recursive = true, bool addexts = true);
- Common::String testExtensions(Common::String component, Common::String initialPath, Common::String convPath);
+Common::String testExtensions(Common::String component, Common::String initialPath, Common::String convPath);
Common::String getFileName(Common::String path);
Commit: 5cb525e29e49632eea536c67be46d67e244d5fa3
https://github.com/scummvm/scummvm/commit/5cb525e29e49632eea536c67be46d67e244d5fa3
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-08-05T11:41:30-04:00
Commit Message:
DIRECTOR: Record game data directory
Changed paths:
engines/director/director.cpp
engines/director/director.h
diff --git a/engines/director/director.cpp b/engines/director/director.cpp
index fc2a2a1b20..c6506a2a16 100644
--- a/engines/director/director.cpp
+++ b/engines/director/director.cpp
@@ -23,7 +23,6 @@
#include "common/config-manager.h"
#include "common/debug-channels.h"
#include "common/error.h"
-#include "common/file.h"
#include "graphics/macgui/macwindowmanager.h"
@@ -91,16 +90,16 @@ DirectorEngine::DirectorEngine(OSystem *syst, const DirectorGameDescription *gam
_wm = nullptr;
_surface = nullptr;
- const Common::FSNode gameDataDir(ConfMan.get("path"));
+ _gameDataDir = Common::FSNode(ConfMan.get("path"));
// Meet Mediaband could have up to 5 levels of directories
- SearchMan.addDirectory(gameDataDir.getPath(), gameDataDir, 0, 5);
+ SearchMan.addDirectory(_gameDataDir.getPath(), _gameDataDir, 0, 5);
- SearchMan.addSubDirectoryMatching(gameDataDir, "data");
- SearchMan.addSubDirectoryMatching(gameDataDir, "install");
- SearchMan.addSubDirectoryMatching(gameDataDir, "main"); // Meet Mediaband
- SearchMan.addSubDirectoryMatching(gameDataDir, "l_zone");
- SearchMan.addSubDirectoryMatching(gameDataDir, "win_data", 0, 2); // L-ZONE
+ SearchMan.addSubDirectoryMatching(_gameDataDir, "data");
+ SearchMan.addSubDirectoryMatching(_gameDataDir, "install");
+ SearchMan.addSubDirectoryMatching(_gameDataDir, "main"); // Meet Mediaband
+ SearchMan.addSubDirectoryMatching(_gameDataDir, "l_zone");
+ SearchMan.addSubDirectoryMatching(_gameDataDir, "win_data", 0, 2); // L-ZONE
_colorDepth = 8; // 256-color
_machineType = 9; // Macintosh IIci
diff --git a/engines/director/director.h b/engines/director/director.h
index 78a8467c87..14fff4d653 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -25,6 +25,7 @@
#include "common/rect.h"
#include "common/str-array.h"
+#include "common/file.h"
#include "common/hashmap.h"
#include "engines/engine.h"
@@ -201,6 +202,7 @@ public:
const Common::HashMap<int, PaletteV4> &getLoadedPalettes() { return _loadedPalettes; }
+ const Common::FSNode *getGameDataDir() const { return &_gameDataDir; }
const byte *getPalette() const { return _currentPalette; }
uint16 getPaletteColorCount() const { return _currentPaletteLength; }
@@ -238,6 +240,7 @@ protected:
private:
const DirectorGameDescription *_gameDescription;
+ Common::FSNode _gameDataDir;
DirectorSound *_soundManager;
byte *_currentPalette;
Commit: b0c3246574de1b8c0527761001fab35214feb882
https://github.com/scummvm/scummvm/commit/b0c3246574de1b8c0527761001fab35214feb882
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-08-05T11:41:30-04:00
Commit Message:
DIRECTOR: Also convert directory paths
Changed paths:
engines/director/util.cpp
engines/director/util.h
diff --git a/engines/director/util.cpp b/engines/director/util.cpp
index f5c34580f1..97726c2661 100644
--- a/engines/director/util.cpp
+++ b/engines/director/util.cpp
@@ -292,7 +292,17 @@ Common::String getPath(Common::String path, Common::String cwd) {
return cwd; // The path is not altered
}
-bool testPath(Common::String &path) {
+bool testPath(Common::String &path, bool directory) {
+ if (directory) {
+ // TOOD: This directory-searching branch only works for one level from the
+ // current directory, but it fixes current game loading issues.
+ if (path.contains('/'))
+ return false;
+
+ Common::FSNode d = Common::FSNode(*g_director->getGameDataDir()).getChild(path);
+ return d.exists();
+ }
+
Common::File f;
if (f.open(path)) {
if (f.size())
@@ -302,10 +312,10 @@ bool testPath(Common::String &path) {
return false;
}
-Common::String pathMakeRelative(Common::String path, bool recursive, bool addexts) {
+Common::String pathMakeRelative(Common::String path, bool recursive, bool addexts, bool directory) {
Common::String initialPath(path);
- if (testPath(initialPath))
+ if (testPath(initialPath, directory))
return initialPath;
if (recursive) // first level
@@ -314,7 +324,6 @@ Common::String pathMakeRelative(Common::String path, bool recursive, bool addext
debug(2, "pathMakeRelative(): s1 %s -> %s", path.c_str(), initialPath.c_str());
initialPath = Common::normalizePath(g_director->getCurrentPath() + initialPath, '/');
- Common::File f;
Common::String convPath = initialPath;
debug(2, "pathMakeRelative(): s2 %s", convPath.c_str());
@@ -322,18 +331,19 @@ Common::String pathMakeRelative(Common::String path, bool recursive, bool addext
// Strip the leading whitespace from the path
initialPath.trim();
- if (testPath(initialPath))
+ if (testPath(initialPath, directory))
return initialPath;
// Now try to search the file
bool opened = false;
+
while (convPath.contains('/')) {
int pos = convPath.find('/');
convPath = Common::String(&convPath.c_str()[pos + 1]);
debug(2, "pathMakeRelative(): s3 try %s", convPath.c_str());
- if (!f.open(convPath))
+ if (!testPath(convPath, directory))
continue;
debug(2, "pathMakeRelative(): s3 converted %s -> %s", path.c_str(), convPath.c_str());
@@ -349,7 +359,7 @@ Common::String pathMakeRelative(Common::String path, bool recursive, bool addext
debug(2, "pathMakeRelative(): s4 %s", convPath.c_str());
- if (testPath(initialPath))
+ if (testPath(initialPath, directory))
return initialPath;
// Now try to search the file
@@ -359,7 +369,7 @@ Common::String pathMakeRelative(Common::String path, bool recursive, bool addext
debug(2, "pathMakeRelative(): s5 try %s", convPath.c_str());
- if (!f.open(convPath))
+ if (!testPath(convPath, directory))
continue;
debug(2, "pathMakeRelative(): s5 converted %s -> %s", path.c_str(), convPath.c_str());
@@ -370,9 +380,7 @@ Common::String pathMakeRelative(Common::String path, bool recursive, bool addext
}
}
- f.close();
-
- if (!opened && recursive) {
+ if (!opened && recursive && !directory) {
// Hmmm. We couldn't find the path as is.
// Let's try to translate file path into 8.3 format
Common::String addedexts;
diff --git a/engines/director/util.h b/engines/director/util.h
index dfd8d06004..e12c67bee8 100644
--- a/engines/director/util.h
+++ b/engines/director/util.h
@@ -38,9 +38,9 @@ Common::String convertPath(Common::String &path);
Common::String getPath(Common::String path, Common::String cwd);
-bool testPath(Common::String &path);
+bool testPath(Common::String &path, bool directory = false);
-Common::String pathMakeRelative(Common::String path, bool recursive = true, bool addexts = true);
+Common::String pathMakeRelative(Common::String path, bool recursive = true, bool addexts = true, bool directory = false);
Common::String testExtensions(Common::String component, Common::String initialPath, Common::String convPath);
Commit: 9fad2dd13ba40743286c3e4ea8c34d79acd4459e
https://github.com/scummvm/scummvm/commit/9fad2dd13ba40743286c3e4ea8c34d79acd4459e
Author: Nathanael Gentry (nathanael.gentrydb8 at gmail.com)
Date: 2020-08-05T11:41:30-04:00
Commit Message:
DIRECTOR: LINGO: Implement getNthFileNameInFolder
Some games clumsily use this function for detecting the CD-ROM drive letter.
This is its only known use case thus far.
Changed paths:
engines/director/lingo/lingo-builtins.cpp
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index fe918b95f2..2dfb002fc6 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1065,11 +1065,22 @@ void LB::b_closeXlib(int nargs) {
}
void LB::b_getNthFileNameInFolder(int nargs) {
- g_lingo->printSTUBWithArglist("b_getNthFileNameInFolder", nargs);
+ ARGNUMCHECK(2);
- g_lingo->dropStack(nargs);
+ int fileNum = g_lingo->pop().asInt() - 1;
+ Common::String path = pathMakeRelative(g_lingo->pop().asString(), true, false, true);
+ Common::FSNode d = Common::FSNode(*g_director->getGameDataDir()).getChild(path);
- g_lingo->push(Datum(0));
+ Datum r;
+ if (d.exists()) {
+ Common::FSList f;
+ d.getChildren(f, Common::FSNode::kListAll);
+
+ if ((uint)fileNum < f.size())
+ r = Datum(f.operator[](fileNum).getName());
+ }
+
+ g_lingo->push(r);
}
void LB::b_open(int nargs) {
More information about the Scummvm-git-logs
mailing list