[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