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

bluegr noreply at scummvm.org
Mon Mar 16 12:54:54 UTC 2026


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:
d203e9ce60 NANCY: Sync quiz puzzle data


Commit: d203e9ce60af363d22e29f1a3e13713dd29d1cda
    https://github.com/scummvm/scummvm/commit/d203e9ce60af363d22e29f1a3e13713dd29d1cda
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-03-16T14:54:44+02:00

Commit Message:
NANCY: Sync quiz puzzle data

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


diff --git a/engines/nancy/puzzledata.cpp b/engines/nancy/puzzledata.cpp
index 9a2dc6b0894..d24a3561604 100644
--- a/engines/nancy/puzzledata.cpp
+++ b/engines/nancy/puzzledata.cpp
@@ -201,6 +201,46 @@ void TableData::synchronize(Common::Serializer &ser) {
 	ser.syncArray(comboValues.data(), num, Common::Serializer::FloatLE);
 }
 
+void QuizPuzzleData::synchronize(Common::Serializer &ser) {
+	// Serialize as: numScenes, then for each scene: sceneID, numBoxes, box data
+	uint16 numScenes = (uint16)boxCorrect.size();
+	ser.syncAsUint16LE(numScenes);
+
+	if (ser.isLoading()) {
+		boxCorrect.clear();
+		typedText.clear();
+		for (uint16 s = 0; s < numScenes; ++s) {
+			uint16 sceneID = 0;
+			ser.syncAsUint16LE(sceneID);
+			byte num = 0;
+			ser.syncAsByte(num);
+			auto &bc = boxCorrect[sceneID];
+			auto &tt = typedText[sceneID];
+			bc.resize(num, false);
+			tt.resize(num);
+			for (uint i = 0; i < num; ++i) {
+				byte b = 0;
+				ser.syncAsByte(b);
+				bc[i] = (b != 0);
+				ser.syncString(tt[i]);
+			}
+		}
+	} else {
+		for (auto &entry : boxCorrect) {
+			uint16 sceneID = entry._key;
+			ser.syncAsUint16LE(sceneID);
+			byte num = (byte)entry._value.size();
+			ser.syncAsByte(num);
+			auto &tt = typedText[sceneID];
+			for (uint i = 0; i < num; ++i) {
+				byte b = entry._value[i] ? 1 : 0;
+				ser.syncAsByte(b);
+				ser.syncString(tt[i]);
+			}
+		}
+	}
+}
+
 void TableData::setSingleValue(uint16 index, int16 value) {
 	if (singleValues.size() <= index) {
 		singleValues.resize(index + 1, kNoTableValue);
@@ -239,6 +279,8 @@ PuzzleData *makePuzzleData(const uint32 tag) {
 		return new SoundEqualizerPuzzleData();
 	case AssemblyPuzzleData::getTag():
 		return new AssemblyPuzzleData();
+	case QuizPuzzleData::getTag():
+		return new QuizPuzzleData();
 	case JournalData::getTag():
 		return new JournalData();
 	case TableData::getTag():
diff --git a/engines/nancy/puzzledata.h b/engines/nancy/puzzledata.h
index 145378862c0..bf11859d3ea 100644
--- a/engines/nancy/puzzledata.h
+++ b/engines/nancy/puzzledata.h
@@ -114,6 +114,19 @@ struct AssemblyPuzzleData : public SimplePuzzleData {
 	static constexpr uint32 getTag() { return MKTAG('A', 'S', 'M', 'B'); }
 };
 
+struct QuizPuzzleData : public PuzzleData {
+	QuizPuzzleData() {}
+	virtual ~QuizPuzzleData() {}
+
+	static constexpr uint32 getTag() { return MKTAG('Q', 'U', 'I', 'Z'); }
+	virtual void synchronize(Common::Serializer &ser);
+
+	// Keyed by solve-scene ID so that multiple QuizPuzzle instances
+	// (e.g. a two-page Nancy 9 puzzle) each maintain their own state.
+	Common::HashMap<uint16, Common::Array<bool>> boxCorrect;
+	Common::HashMap<uint16, Common::Array<Common::String>> typedText;
+};
+
 struct JournalData : public PuzzleData {
 	JournalData() {}
 	virtual ~JournalData() {}




More information about the Scummvm-git-logs mailing list