[Scummvm-git-logs] scummvm master -> 91ab581ede415fe1143c10162b32b8d861377e2f

sev- noreply at scummvm.org
Sat May 20 21:27:18 UTC 2023


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:
91ab581ede BLADERUNNER: Support merging of CDs in original layout.


Commit: 91ab581ede415fe1143c10162b32b8d861377e2f
    https://github.com/scummvm/scummvm/commit/91ab581ede415fe1143c10162b32b8d861377e2f
Author: Vladimir Serbinenko (phcoder at gmail.com)
Date: 2023-05-20T23:27:14+02:00

Commit Message:
BLADERUNNER: Support merging of CDs in original layout.

Right now we ask user to reshuffle files. After this commit it's
possible to just merge contents of all CDs.

Changed paths:
    engines/bladerunner/bladerunner.cpp
    engines/bladerunner/detection.cpp
    engines/bladerunner/slice_animations.cpp


diff --git a/engines/bladerunner/bladerunner.cpp b/engines/bladerunner/bladerunner.cpp
index cbee15b8880..4234e98a691 100644
--- a/engines/bladerunner/bladerunner.cpp
+++ b/engines/bladerunner/bladerunner.cpp
@@ -352,6 +352,12 @@ void BladeRunnerEngine::pauseEngineIntern(bool pause) {
 
 Common::Error BladeRunnerEngine::run() {
 	Common::Array<Common::String> missingFiles;
+	const Common::FSNode gameDataDir(ConfMan.get("path"));
+	SearchMan.addSubDirectoryMatching(gameDataDir, "base");
+	SearchMan.addSubDirectoryMatching(gameDataDir, "cd1");
+	SearchMan.addSubDirectoryMatching(gameDataDir, "cd2");
+	SearchMan.addSubDirectoryMatching(gameDataDir, "cd3");
+	SearchMan.addSubDirectoryMatching(gameDataDir, "cd4");
 	if (!_isNonInteractiveDemo && !checkFiles(missingFiles)) {
 		Common::String missingFileStr = "";
 		for (uint i = 0; i < missingFiles.size(); ++i) {
@@ -558,15 +564,9 @@ bool BladeRunnerEngine::checkFiles(Common::Array<Common::String> &missingFiles)
 	bool hasHdFrames = Common::File::exists("HDFRAMES.DAT");
 
 	if (!hasHdFrames) {
-		requiredFiles.clear();
-		requiredFiles.push_back("CDFRAMES1.DAT");
-		requiredFiles.push_back("CDFRAMES2.DAT");
-		requiredFiles.push_back("CDFRAMES3.DAT");
-		requiredFiles.push_back("CDFRAMES4.DAT");
-
-		for (uint i = 0; i < requiredFiles.size(); ++i) {
-			if (!Common::File::exists(requiredFiles[i])) {
-				missingFiles.push_back(requiredFiles[i]);
+		for (uint i = 1; i <= 4; ++i) {
+			if (!Common::File::exists(Common::String::format("CDFRAMES%d.DAT", i)) && !Common::File::exists(Common::String::format("CD%d/CDFRAMES.DAT", i))) {
+				missingFiles.push_back(Common::String::format("CD%d/CDFRAMES.DAT", i));
 			}
 		}
 	}
diff --git a/engines/bladerunner/detection.cpp b/engines/bladerunner/detection.cpp
index 748cbe6edd4..8bba32c2c9e 100644
--- a/engines/bladerunner/detection.cpp
+++ b/engines/bladerunner/detection.cpp
@@ -46,6 +46,10 @@ static const PlainGameDescriptor bladeRunnerGames[] = {
 	{nullptr, nullptr}
 };
 
+static const char *const directoryGlobs[] = {
+	"BASE",
+	nullptr
+};
 } // End of namespace BladeRunner
 
 class BladeRunnerMetaEngineDetection : public AdvancedMetaEngineDetection {
@@ -72,6 +76,8 @@ BladeRunnerMetaEngineDetection::BladeRunnerMetaEngineDetection()
 		// and expects ScummVM to detect both, offer a choice on which to add,
 		// and finally launch the proper one depending on which was added.
 		_flags = kADFlagUseExtraAsHint;
+		_maxScanDepth = 2;
+		_directoryGlobs = BladeRunner::directoryGlobs;
 }
 
 const char *BladeRunnerMetaEngineDetection::getName() const {
diff --git a/engines/bladerunner/slice_animations.cpp b/engines/bladerunner/slice_animations.cpp
index 2994ac4ff3d..744091c8167 100644
--- a/engines/bladerunner/slice_animations.cpp
+++ b/engines/bladerunner/slice_animations.cpp
@@ -135,6 +135,11 @@ bool SliceAnimations::openFrames(int fileNumber) {
 			_framesPageFile.close(_framesPageFile._fileNumber);
 		}
 		_framesPageFile._fileNumber = fileNumber;
+
+		if (_framesPageFile.open(Common::String::format("CD%d/CDFRAMES.DAT", fileNumber), fileNumber)) {
+			return true;
+		}
+
 		// For Chapter1 we try both CDFRAMES.DAT and CDFRAMES1.DAT
 		if (fileNumber == 1 && _framesPageFile.open("CDFRAMES.DAT", fileNumber)) {
 			return true;
@@ -151,11 +156,13 @@ bool SliceAnimations::openFrames(int fileNumber) {
 			_framesPageFile.close(i);
 			if (i == 1
 			    && (!_framesPageFile.open("CDFRAMES.DAT", i))
+			    && (!_framesPageFile.open(Common::String::format("CD%d/CDFRAMES.DAT", i), i))
 			    && (!_framesPageFile.open(Common::String::format("CDFRAMES%d.DAT", i), i))
 			) {
 				// For Chapter1 we try both CDFRAMES.DAT and CDFRAMES1.DAT
 				return false;
 			} else if (i != 1 &&
+				   (!_framesPageFile.open(Common::String::format("CD%d/CDFRAMES.DAT", i), i)) &&
 			          !_framesPageFile.open(Common::String::format("CDFRAMES%d.DAT", i), i)
 			) {
 				return false;




More information about the Scummvm-git-logs mailing list