[Scummvm-git-logs] scummvm master -> a8f082433fe3926123003525df1a00cf1874ab7a

neuromancer noreply at scummvm.org
Mon Nov 3 16:58:06 UTC 2025


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

Summary:
a8f082433f PRIVATE: Fix duplicate dossier sheets


Commit: a8f082433fe3926123003525df1a00cf1874ab7a
    https://github.com/scummvm/scummvm/commit/a8f082433fe3926123003525df1a00cf1874ab7a
Author: sluicebox (22204938+sluicebox at users.noreply.github.com)
Date: 2025-11-03T17:58:01+01:00

Commit Message:
PRIVATE: Fix duplicate dossier sheets

Bug #15854

Changed paths:
    engines/private/funcs.cpp
    engines/private/private.cpp
    engines/private/private.h


diff --git a/engines/private/funcs.cpp b/engines/private/funcs.cpp
index 7df609694bd..d9f0ca5b1e0 100644
--- a/engines/private/funcs.cpp
+++ b/engines/private/funcs.cpp
@@ -269,20 +269,15 @@ static void fBustMovie(ArgArray args) {
 }
 
 static void fDossierAdd(ArgArray args) {
-
 	assert(args.size() == 2);
 	Common::String s1 = args[0].u.str;
 	Common::String s2 = args[1].u.str;
-	DossierInfo m;
-	m.page1 = s1;
 
-	if (s2 != "\"\"") {
-		m.page2 = s2;
-	} else {
-		m.page2 = "";
+	if (s2 == "\"\"") {
+		s2 = "";
 	}
 
-	g_private->_dossiers.push_back(m);
+	g_private->addDossier(s1, s2);
 }
 
 static void fDossierBitmap(ArgArray args) {
diff --git a/engines/private/private.cpp b/engines/private/private.cpp
index aed66fb7f9a..dc5ba338d70 100644
--- a/engines/private/private.cpp
+++ b/engines/private/private.cpp
@@ -1032,6 +1032,21 @@ void PrivateEngine::selectPhoneArea(Common::Point mousePos) {
 	}
 }
 
+void PrivateEngine::addDossier(Common::String &page1, Common::String &page2) {
+	// Each dossier page can only be added once.
+	// Do this even when loading games to fix saves with duplicates.
+	for (uint i = 0; i < _dossiers.size(); i++) {
+		if (_dossiers[i].page1 == page1) {
+			return;
+		}
+	}
+
+	DossierInfo d;
+	d.page1 = page1;
+	d.page2 = page2;
+	_dossiers.push_back(d);
+}
+
 void PrivateEngine::loadDossier() {
 	int x = 40;
 	int y = 30;
@@ -1285,11 +1300,10 @@ Common::Error PrivateEngine::loadGameStream(Common::SeekableReadStream *stream)
 	// Dossiers
 	_dossiers.clear();
 	size = stream->readUint32LE();
-	DossierInfo m;
 	for (uint32 i = 0; i < size; ++i) {
-		m.page1 = stream->readString();
-		m.page2 = stream->readString();
-		_dossiers.push_back(m);
+		Common::String page1 = stream->readString();
+		Common::String page2 = stream->readString();
+		addDossier(page1, page2);
 	}
 
 	// Radios
diff --git a/engines/private/private.h b/engines/private/private.h
index dccf5d210d1..eef3b4f5b5b 100644
--- a/engines/private/private.h
+++ b/engines/private/private.h
@@ -292,6 +292,7 @@ public:
 	bool selectDossierPrevSuspect(Common::Point);
 	bool selectDossierNextSheet(Common::Point);
 	bool selectDossierPrevSheet(Common::Point);
+	void addDossier(Common::String &page1, Common::String &page2);
 	void loadDossier();
 
 	// Police Bust




More information about the Scummvm-git-logs mailing list