[Scummvm-git-logs] scummvm master -> 509884e5c0f58fae38ce53540378e81ace226997

sev- noreply at scummvm.org
Tue Mar 3 00:19:02 UTC 2026


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:
b665b19a29 AD: Enhance logic for computing candidates, added more debug output
509884e5c0 PHOENIXVR: Added detection for CD version of necrono


Commit: b665b19a29e531e1f0d2a7ed3716e28974b7dd77
    https://github.com/scummvm/scummvm/commit/b665b19a29e531e1f0d2a7ed3716e28974b7dd77
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2026-03-03T01:13:47+01:00

Commit Message:
AD: Enhance logic for computing candidates, added more debug output

Now we will always try to find candidate with biggest amount
of files and report that, instead of the first partially
matched version.

Changed paths:
    engines/advancedDetector.cpp


diff --git a/engines/advancedDetector.cpp b/engines/advancedDetector.cpp
index ab581219eb5..04c16a0ddb2 100644
--- a/engines/advancedDetector.cpp
+++ b/engines/advancedDetector.cpp
@@ -727,8 +727,8 @@ ADDetectedGames AdvancedMetaEngineDetectionBase::detectGame(const Common::FSNode
 			MD5Properties md5prop = gameFileToMD5Props(fileDesc, g->flags);
 			Common::String fname = fileDesc->fileName;
 			Common::String key = md5PropToCachePrefix(md5prop);
-				key += ':';
-				key += fname;
+			key += ':';
+			key += fname;
 
 			if (filesProps.contains(key))
 				continue;
@@ -745,6 +745,7 @@ ADDetectedGames AdvancedMetaEngineDetectionBase::detectGame(const Common::FSNode
 	}
 
 	int maxFilesMatched = 0;
+	int maxCandidateFiles = 0;
 	bool gotAnyMatchesWithAllFiles = false;
 
 	// MD5 based matching
@@ -772,6 +773,7 @@ ADDetectedGames AdvancedMetaEngineDetectionBase::detectGame(const Common::FSNode
 		ADDetectedGame game(g);
 		bool allFilesPresent = true;
 		int curFilesMatched = 0;
+		int numFilesInEntry = 0;
 
 		// Try to match all files for this game
 		for (fileDesc = game.desc->filesDescriptions; fileDesc->fileName; fileDesc++) {
@@ -781,6 +783,8 @@ ADDetectedGames AdvancedMetaEngineDetectionBase::detectGame(const Common::FSNode
 				key += ':';
 				key += tstr;
 
+			numFilesInEntry++;
+
 			if (!filesProps.contains(key) || filesProps[key].size == -1) {
 				allFilesPresent = false;
 				break;
@@ -811,6 +815,9 @@ ADDetectedGames AdvancedMetaEngineDetectionBase::detectGame(const Common::FSNode
 			curFilesMatched++;
 		}
 
+		debugC(3, kDebugGlobalDetection, "Game '%s' matched %d files all files present: %d has unknown files: %d, total files: %d",
+				g->gameId, curFilesMatched, allFilesPresent, game.hasUnknownFiles, numFilesInEntry);
+
 		// We found at least one entry with all required files present.
 		// That means that we got new variant of the game.
 		//
@@ -828,13 +835,22 @@ ADDetectedGames AdvancedMetaEngineDetectionBase::detectGame(const Common::FSNode
 				continue;
 			}
 
-			if (matched.empty() || strcmp(matched.back().desc->gameId, g->gameId) != 0)
+			if (matched.empty() || strcmp(matched.back().desc->gameId, g->gameId) != 0 || numFilesInEntry > maxCandidateFiles) {
+				if (numFilesInEntry > maxCandidateFiles) {
+					debugC(2, kDebugGlobalDetection, " ... new best candidate match, removing all previous candidates");
+					maxCandidateFiles = numFilesInEntry;
+
+					matched.clear();	// Remove any prior, lower ranked matches.
+				}
+
+				debugC(2, kDebugGlobalDetection, " ... adding candidate match");
 				matched.push_back(game);
+			}
 		}
 
 		if (allFilesPresent && !game.hasUnknownFiles) {
 			debugC(2, kDebugGlobalDetection, "Found game: %s (%s %s/%s) (%d)", g->gameId, g->extra,
-			 getPlatformDescription(g->platform), getLanguageDescription(g->language), i);
+							getPlatformDescription(g->platform), getLanguageDescription(g->language), i);
 
 			if (curFilesMatched > maxFilesMatched) {
 				debugC(2, kDebugGlobalDetection, " ... new best match, removing all previous candidates");
@@ -843,6 +859,7 @@ ADDetectedGames AdvancedMetaEngineDetectionBase::detectGame(const Common::FSNode
 				matched.clear();	// Remove any prior, lower ranked matches.
 				matched.push_back(game);
 			} else if (curFilesMatched == maxFilesMatched) {
+				debugC(2, kDebugGlobalDetection, " ... same number of files matched as the current best match, adding to candidates");
 				matched.push_back(game);
 			} else {
 				debugC(2, kDebugGlobalDetection, " ... skipped");
@@ -851,7 +868,7 @@ ADDetectedGames AdvancedMetaEngineDetectionBase::detectGame(const Common::FSNode
 			gotAnyMatchesWithAllFiles = true;
 		} else {
 			debugC(7, kDebugGlobalDetection, "Skipping game: %s (%s %s/%s) (%d)", g->gameId, g->extra,
-			 getPlatformDescription(g->platform), getLanguageDescription(g->language), i);
+							getPlatformDescription(g->platform), getLanguageDescription(g->language), i);
 		}
 	}
 


Commit: 509884e5c0f58fae38ce53540378e81ace226997
    https://github.com/scummvm/scummvm/commit/509884e5c0f58fae38ce53540378e81ace226997
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2026-03-03T01:15:23+01:00

Commit Message:
PHOENIXVR: Added detection for CD version of necrono

Changed paths:
    engines/phoenixvr/detection.cpp
    engines/phoenixvr/detection_tables.h


diff --git a/engines/phoenixvr/detection.cpp b/engines/phoenixvr/detection.cpp
index 8879a8e06dc..9eed8317a3c 100644
--- a/engines/phoenixvr/detection.cpp
+++ b/engines/phoenixvr/detection.cpp
@@ -39,6 +39,7 @@ const DebugChannelDef PhoenixVRMetaEngineDetection::debugFlagList[] = {
 
 PhoenixVRMetaEngineDetection::PhoenixVRMetaEngineDetection() : AdvancedMetaEngineDetection(
 																   PhoenixVR::gameDescriptions, PhoenixVR::phoenixvrGames) {
+	_flags = kADFlagMatchFullPaths;
 }
 
 REGISTER_PLUGIN_STATIC(PHOENIXVR_DETECTION, PLUGIN_TYPE_ENGINE_DETECTION, PhoenixVRMetaEngineDetection);
diff --git a/engines/phoenixvr/detection_tables.h b/engines/phoenixvr/detection_tables.h
index ff1d4d466dd..f121c3bccd0 100644
--- a/engines/phoenixvr/detection_tables.h
+++ b/engines/phoenixvr/detection_tables.h
@@ -39,6 +39,18 @@ const ADGameDescription gameDescriptions[] = {
 	 ADGF_DROPPLATFORM | ADGF_TESTING,
 	 GUIO1(GUIO_NONE)},
 
+    {"necrono",
+	 nullptr,
+	 AD_ENTRY4s(
+		 "script.pak", "da42a18dd02fc01f116228d5c219b2fd", 215,
+		 "textes.txt", "f795f35b079cb8ef599724a2a7336c7e", 5319,
+		"cd1/Data/Script1.pak", "626cac1db5160142313fdcf483fda2bf", 57410,
+		"cd2/Data/Script3.pak", "4f122b65627903da15b3f15156252c8d", 63979),
+	 Common::EN_USA,
+	 Common::kPlatformWindows,
+	 ADGF_DROPPLATFORM | ADGF_CD | ADGF_TESTING,
+	 GUIO1(GUIO_NONE)},
+
 	{"necrono",
 	 nullptr,
 	 AD_ENTRY2s(




More information about the Scummvm-git-logs mailing list