[Scummvm-git-logs] scummvm master -> 5984f9e117e6ccc95791d343207425436b392dc9

sev- noreply at scummvm.org
Thu Jun 19 21:48:57 UTC 2025


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

Summary:
2baca911e0 AD: Expose sanitizeName in the base class
5984f9e117 DIRECTOR: Try to fetch game title from WinResources during fallback detection


Commit: 2baca911e083e0bd64d8ed08e3fc9099f541d26f
    https://github.com/scummvm/scummvm/commit/2baca911e083e0bd64d8ed08e3fc9099f541d26f
Author: nirvairu (mp42singh at gmail.com)
Date: 2025-06-19T23:47:33+02:00

Commit Message:
AD: Expose sanitizeName in the base class

Changed paths:
    engines/advancedDetector.cpp
    engines/advancedDetector.h


diff --git a/engines/advancedDetector.cpp b/engines/advancedDetector.cpp
index 1a1f63c9caf..fe1a469355a 100644
--- a/engines/advancedDetector.cpp
+++ b/engines/advancedDetector.cpp
@@ -80,7 +80,7 @@ private:
 	const AdvancedMetaEngineDetectionBase::FileMap &_fileMap;
 };
 
-static Common::String sanitizeName(const char *name, int maxLen) {
+Common::String AdvancedMetaEngineDetectionBase::sanitizeName(const char *name, int maxLen) {
 	Common::String res;
 	Common::String word;
 	Common::String lastWord;
@@ -133,7 +133,7 @@ static Common::String generatePreferredTarget(const ADGameDescription *desc, int
 	if (!targetID.empty()) {
 		res = targetID;
 	} else if (desc->flags & ADGF_AUTOGENTARGET && desc->extra && *desc->extra) {
-		res = sanitizeName(desc->extra, maxLen);
+		res = AdvancedMetaEngineDetectionBase::sanitizeName(desc->extra, maxLen);
 	} else {
 		res = desc->gameId;
 	}
diff --git a/engines/advancedDetector.h b/engines/advancedDetector.h
index be1ec9ac1c4..74c36fae1cb 100644
--- a/engines/advancedDetector.h
+++ b/engines/advancedDetector.h
@@ -525,6 +525,11 @@ public:
 
 	void dumpDetectionEntries() const override final;
 
+	/**
+	 * Sanitizes a string to be usable by gameId
+	 */
+	static Common::String sanitizeName(const char *name, int maxLen);
+
 protected:
 	/**
 	 * A hashmap of file paths and their file system nodes.
@@ -760,11 +765,11 @@ public:
 			return;
 
 		Common::Path filename = node.getPath();
-		
+
 		if (archiveHashMap.contains(filename)) {
 			delete archiveHashMap[filename];
 		}
-		
+
 		archiveHashMap.setVal(filename, archivePtr);
 	}
 


Commit: 5984f9e117e6ccc95791d343207425436b392dc9
    https://github.com/scummvm/scummvm/commit/5984f9e117e6ccc95791d343207425436b392dc9
Author: nirvairu (mp42singh at gmail.com)
Date: 2025-06-19T23:47:33+02:00

Commit Message:
DIRECTOR: Try to fetch game title from WinResources during fallback detection

Changed paths:
    engines/director/detection.cpp
    engines/director/resource.cpp


diff --git a/engines/director/detection.cpp b/engines/director/detection.cpp
index e9ac4bdc9b3..c0a1d5f315d 100644
--- a/engines/director/detection.cpp
+++ b/engines/director/detection.cpp
@@ -27,7 +27,6 @@
 #include "common/file.h"
 #include "common/formats/winexe.h"
 
-#include "director/detection.h"
 #include "director/director.h"
 
 #include "director/detection_tables.h"
@@ -85,6 +84,7 @@ static const DebugChannelDef debugFlagList[] = {
 class DirectorMetaEngineDetection : public AdvancedMetaEngineDetection<Director::DirectorGameDescription> {
 private:
 	Common::HashMap<Common::String, bool, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _customTarget;
+	Common::HashMap<Common::String, bool, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _fallback_blacklisted_names;
 
 public:
 	DirectorMetaEngineDetection() : AdvancedMetaEngineDetection(Director::gameDescriptions, directorGames) {
@@ -92,6 +92,11 @@ public:
 		_directoryGlobs = Director::directoryGlobs;
 		_flags = kADFlagMatchFullPaths | kADFlagCanPlayUnknownVariants;
 
+		_fallback_blacklisted_names["Macromedia Projector"] = true;
+		_fallback_blacklisted_names["Projector Skeleton"] = true;
+		_fallback_blacklisted_names["Director Player"] = true;
+		_fallback_blacklisted_names["Projector"] = true;
+
 		// initialize customTarget hashmap here
 		for (int i = 0; customTargetList[i].name != nullptr; i++)
 			_customTarget[customTargetList[i].name] = true;
@@ -277,10 +282,30 @@ ADDetectedGame DirectorMetaEngineDetection::fallbackDetect(const FileMap &allFil
 		desc->desc.filesDescriptions[0].fileName = s_fallbackFileNameBuffer;
 
 		Common::String extra;
+		Common::String sanitizedName;
 		Common::WinResources *exe = Common::WinResources::createFromEXE(&f);
 		if (exe) {
 			Common::WinResources::VersionInfo *versionInfo = exe->getVersionResource(1);
 			if (versionInfo) {
+				Common::String internalName = versionInfo->hash["InternalName"].encode();
+				Common::String fileDescription = versionInfo->hash["FileDescription"].encode();
+				if (!_fallback_blacklisted_names.contains(internalName)) {
+					if (extraInfo != nullptr) {
+						*extraInfo = new ADDetectedGameExtraInfo;
+						(*extraInfo)->gameName = internalName;
+
+						sanitizedName = AdvancedMetaEngineDetectionBase::sanitizeName(fileDescription.c_str(), fileDescription.size());
+						desc->desc.gameId = sanitizedName.c_str();
+					}
+				} else if (!_fallback_blacklisted_names.contains(fileDescription)) {
+					if (extraInfo != nullptr) {
+						*extraInfo = new ADDetectedGameExtraInfo;
+						(*extraInfo)->gameName = fileDescription;
+
+						sanitizedName = AdvancedMetaEngineDetectionBase::sanitizeName(fileDescription.c_str(), fileDescription.size());
+						desc->desc.gameId = sanitizedName.c_str();
+					}
+				}
 				extra = Common::String::format("v%d.%d.%dr%d", versionInfo->fileVersion[0], versionInfo->fileVersion[1], versionInfo->fileVersion[2], versionInfo->fileVersion[3]);
 				delete versionInfo;
 			}
diff --git a/engines/director/resource.cpp b/engines/director/resource.cpp
index de471203206..dd92494012f 100644
--- a/engines/director/resource.cpp
+++ b/engines/director/resource.cpp
@@ -29,6 +29,7 @@
 #include "common/bufferedstream.h"
 #include "common/substream.h"
 #include "common/formats/winexe.h"
+#include "director/detection.h"
 #include "director/types.h"
 #include "graphics/wincursor.h"
 
@@ -312,6 +313,12 @@ Archive *DirectorEngine::loadEXE(const Common::Path &movie) {
 		for (uint i = 0; i < versions.size(); i++) {
 			Common::WinResources::VersionInfo *info = exe->getVersionResource(versions[i]);
 
+			Common::String gameName = info->hash["FileDescription"];
+			Common::String versionInfo = Common::String::format("v%d.%d.%dr%d", info->fileVersion[0], info->fileVersion[1], info->fileVersion[2], info->fileVersion[3]);
+
+			debugC(5, kDebugLoading, "DirectorEngine::loadEXE(): Game name from resources: \"%s\"", gameName.c_str());
+			debugC(5, kDebugLoading, "DirectorEngine::loadEXE(): Executable version: %s", versionInfo.c_str());
+
 			for (Common::WinResources::VersionHash::const_iterator it = info->hash.begin(); it != info->hash.end(); ++it)
 				debugC(5, kDebugLoading, "DirectorEngine::loadEXE(): info <%s>: <%s>", it->_key.c_str(), it->_value.encode().c_str());
 




More information about the Scummvm-git-logs mailing list