[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