[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