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

bluegr noreply at scummvm.org
Mon May 11 00:43:34 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:
29ee640aba NANCY: Update engine status
e2e01acfcf NANCY: Sync the journal sceneID field in Nancy9+ and bump save version


Commit: 29ee640aba0145f9a66f3c380489b16de1ec2ae5
    https://github.com/scummvm/scummvm/commit/29ee640aba0145f9a66f3c380489b16de1ec2ae5
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-05-11T03:42:55+03:00

Commit Message:
NANCY: Update engine status

Changed paths:
    engines/nancy/nancy.h


diff --git a/engines/nancy/nancy.h b/engines/nancy/nancy.h
index b9d9d15f773..bb253eb079c 100644
--- a/engines/nancy/nancy.h
+++ b/engines/nancy/nancy.h
@@ -43,13 +43,13 @@ class Serializer;
  *
  * Status of this engine:
  * The Vampire Diaries and all Nancy Drew games up to and including
- * Nancy Drew: Ghost Dogs of Moon Lake are fully completable.
+ * Nancy Drew: Danger on Deception Island are fully completable.
  * Every other game is untested but definitely unplayable.
  *
  * Games using this engine:
  *	- The Vampire Diaries (1996)
  *	- Almost every mainline Nancy Drew game by HeR Interactive,
- *		beginnning with Nancy Drew: Secrets can Kill (1998)
+ *		beginning with Nancy Drew: Secrets can Kill (1998)
  *		up to and including Nancy Drew: Sea of Darkness (2015)
  */
 namespace Nancy {


Commit: e2e01acfcfc0c57f08965e1df88dcfd93552f00b
    https://github.com/scummvm/scummvm/commit/e2e01acfcfc0c57f08965e1df88dcfd93552f00b
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-05-11T03:42:56+03:00

Commit Message:
NANCY: Sync the journal sceneID field in Nancy9+ and bump save version

Now, the sceneID field is properly synchronized in saved games. The
workaround for older saved games has been kept, to ensure they're still
compatible.

This is a follow-up to commit 6725db80577821a3d028a039730dd2504ea1c485.
Fully fixes the issue described in #16776.

Changed paths:
    engines/nancy/action/datarecords.cpp
    engines/nancy/nancy.h
    engines/nancy/puzzledata.cpp


diff --git a/engines/nancy/action/datarecords.cpp b/engines/nancy/action/datarecords.cpp
index b85f73dfce4..6c4e26cd288 100644
--- a/engines/nancy/action/datarecords.cpp
+++ b/engines/nancy/action/datarecords.cpp
@@ -439,16 +439,15 @@ void ModifyListEntry::execute() {
 		}
 
 		if (found && g_nancy->getGameType() == kGameTypeNancy9 && NancySceneState.getSceneInfo().sceneID == 2491) {
-			// WORKAROUND: We do not persist the sceneID information for journal entries in
-			// nancy9 saved games, due to an oversight when the sceneID field was added. This
-			// means that for the search functionality in the laptop (which is the only place
-			// where the sceneID field is used in nancy9), the sceneID values will always be
-			// lost on save/load. Fortunately, these are always initialized by the game scripts,
-			// so we can use those script values instead. This code will ensure that the sceneID
-			// values are obtained from the game scripts in that scene, instead of the
-			// broken saved values, so the search functionality will work correctly even after
-			// save/load. Refer to JournalData::synchronize(), for a note on the missing sync
-			// of the SceneID field.
+			// WORKAROUND: We did not persist the sceneID information for journal entries in
+			// nancy9 saved games earlier than version 4, due to an oversight when the sceneID
+			// field was added. This means that for the search functionality in the laptop
+			// (which is the only place where the sceneID field is used in nancy9), the sceneID
+			// values won't be correctly initialized on save/load in older saved games.
+			// Fortunately, these are always initialized by the game scripts, so we can use
+			// those script values instead. This code will ensure that the sceneID values are
+			// obtained from the game scripts in that scene when they're missing, so the search
+			// functionality will work correctly.
 			if (_stringID.hasPrefix("S0") && found->mark == _mark && _mark >= 10 &&
 				found->sceneID == kNoScene && _sceneID != kNoScene) {
 				found->sceneID = _sceneID;
diff --git a/engines/nancy/nancy.h b/engines/nancy/nancy.h
index bb253eb079c..142465a4624 100644
--- a/engines/nancy/nancy.h
+++ b/engines/nancy/nancy.h
@@ -54,7 +54,7 @@ class Serializer;
  */
 namespace Nancy {
 
-static const int kSavegameVersion = 3;
+static const int kSavegameVersion = 4;
 
 struct NancyGameDescription;
 
diff --git a/engines/nancy/puzzledata.cpp b/engines/nancy/puzzledata.cpp
index 39b7e33bf8b..cd6076c71d8 100644
--- a/engines/nancy/puzzledata.cpp
+++ b/engines/nancy/puzzledata.cpp
@@ -149,14 +149,16 @@ void JournalData::synchronize(Common::Serializer &ser) {
 				entry.push_back(Entry());
 				ser.syncString(entry.back().stringID);
 				ser.syncAsUint16LE(entry.back().mark);
-				// NOTE: We do not persist sceneID for journal entries in nancy9.
-				// Unfortunately, this field was added but the sync code was not
-				// updated, so it is always lost on save/load. Fortunately for us,
-				// this field is only used in scene 2491, when using the search
-				// functionality in the laptop, and it's always initialized by the
-				// game scripts, so we can use the script values instead in that
-				// scene. Refer to the workaround in ModifyListEntry::execute(),
-				// which fixes these values for that scene.
+				if (g_nancy->getGameType() >= kGameTypeNancy9) {
+					// NOTE: We did not persist sceneID for journal entries in nancy9
+					// in save versions before 4. Fortunately for us, this field is
+					// only used in scene 2491, when using the search functionality
+					// in the laptop, and it's always initialized by the game scripts,
+					// so we can use the script values instead in that scene. Refer to
+					// the workaround in ModifyListEntry::execute(), which fixes these
+					// values for that scene, in older saved games.
+					ser.syncAsUint16LE(entry.back().sceneID, 4);
+				}
 			}
 		}
 	} else {
@@ -168,6 +170,8 @@ void JournalData::synchronize(Common::Serializer &ser) {
 			for (uint i = 0; i < numStrings; ++i) {
 				ser.syncString(a._value[i].stringID);
 				ser.syncAsUint16LE(a._value[i].mark);
+				if (g_nancy->getGameType() >= kGameTypeNancy9)
+					ser.syncAsUint16LE(a._value[i].sceneID);	// added in save version 4
 			}
 		}
 	}




More information about the Scummvm-git-logs mailing list