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

bluegr noreply at scummvm.org
Tue Mar 31 00:30:38 UTC 2026


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

Summary:
424f2d87fb NANCY: More work on movement action records for Nancy10+
5576227ebc NANCY: Fix loading saved games for Nancy10+
c2efe9cf72 NANCY: Update FrameTextBox AR stub for Nancy11+


Commit: 424f2d87fbba4345ce25d840e587e6d8e1f505e8
    https://github.com/scummvm/scummvm/commit/424f2d87fbba4345ce25d840e587e6d8e1f505e8
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-03-31T03:29:31+03:00

Commit Message:
NANCY: More work on movement action records for Nancy10+

Changed paths:
    engines/nancy/action/arfactory.cpp
    engines/nancy/action/navigationrecords.cpp
    engines/nancy/action/navigationrecords.h


diff --git a/engines/nancy/action/arfactory.cpp b/engines/nancy/action/arfactory.cpp
index 9d7dd58cdc3..a3e9499b36a 100644
--- a/engines/nancy/action/arfactory.cpp
+++ b/engines/nancy/action/arfactory.cpp
@@ -81,9 +81,19 @@ namespace Action {
 ActionRecord *ActionManager::createActionRecord(uint16 type, Common::SeekableReadStream *recordStream) {
 	switch (type) {
 	case 10:
-		return new Hot1FrSceneChange(CursorManager::kHotspot);
+		if (g_nancy->getGameType() <= kGameTypeNancy9) {
+			return new Hot1FrSceneChange(CursorManager::kHotspot);
+		} else {
+			return new SceneChange();
+		}
 	case 11:
-		return new HotMultiframeSceneChange(CursorManager::kHotspot);
+		if (g_nancy->getGameType() <= kGameTypeNancy9) {
+			return new HotMultiframeSceneChange(CursorManager::kHotspot);
+		} else {
+			// TODO: Handle this correctly, as it messes up scene hotspots
+			return nullptr;
+			//return new HotSingleFrameSceneChange(true);
+		}
 	case 12:
 		return new SceneChange();
 	case 13:
@@ -109,8 +119,10 @@ ActionRecord *ActionManager::createActionRecord(uint16 type, Common::SeekableRea
 	case 21:
 		if (g_nancy->getGameType() == kGameTypeVampire) {
 			return new PaletteNextScene();
-		} else {
+		} else if (g_nancy->getGameType() <= kGameTypeNancy9) {
 			return new HotMultiframeSceneChange(CursorManager::kMoveDown);
+		} else {
+			return new HotSingleFrameSceneChange();
 		}
 	case 22:
 		if (g_nancy->getGameType() <= kGameTypeNancy9) {
@@ -222,6 +234,10 @@ ActionRecord *ActionManager::createActionRecord(uint16 type, Common::SeekableRea
 		return new ModifyListEntry(ModifyListEntry::kDelete);
 	case 73:
 		return new ModifyListEntry(ModifyListEntry::kMark);
+	case 74:
+		// Nancy 10+
+		warning("FrameTextBox - not implemented yet");
+		return nullptr;
 	case 75:
 		return new TextBoxWrite();
 	case 76:
diff --git a/engines/nancy/action/navigationrecords.cpp b/engines/nancy/action/navigationrecords.cpp
index f3fe72a153a..368b55e00ac 100644
--- a/engines/nancy/action/navigationrecords.cpp
+++ b/engines/nancy/action/navigationrecords.cpp
@@ -71,12 +71,38 @@ void HotMultiframeSceneChange::execute() {
 	}
 }
 
+void HotSingleFrameSceneChange::readData(Common::SeekableReadStream &stream) {
+	_hoverCursor = (CursorManager::CursorType)stream.readUint16LE();
+	_sceneChange.sceneID = stream.readUint16LE();
+	_sceneChange.continueSceneSound = kContinueSceneSound;
+	_sceneChange.listenerFrontVector.set(0, 0, 1);
+	readRect(stream, _sceneHotspot.coords);
+	if (_readExtra) {
+		uint16 unk1 = stream.readUint16LE();
+		uint16 unk2 = stream.readUint16LE();
+		debug("Read extra data for HotSingleFrameSceneChange: %u, %u", unk1, unk2);
+	}
+}
+
+void HotSingleFrameSceneChange::execute() {
+	switch (_state) {
+	case kBegin:
+		_hotspot = _sceneHotspot.coords;
+		_state = kRun;
+		// fall through
+	case kRun:
+		_hasHotspot = true;
+		break;
+	case kActionTrigger:
+		SceneChange::execute();
+		break;
+	}
+}
+
 void Hot1FrSceneChange::readData(Common::SeekableReadStream &stream) {
 	if (!_isTerse) {
 		SceneChange::readData(stream);
 		_hotspotDesc.readData(stream);
-		if (g_nancy->getGameType() >= kGameTypeNancy10)
-			stream.skip(14);	// TODO
 	} else {
 		_sceneChange.sceneID = stream.readUint16LE();
 		_sceneChange.continueSceneSound = kContinueSceneSound;
diff --git a/engines/nancy/action/navigationrecords.h b/engines/nancy/action/navigationrecords.h
index 03e7d9a46cf..e6b193a7977 100644
--- a/engines/nancy/action/navigationrecords.h
+++ b/engines/nancy/action/navigationrecords.h
@@ -39,6 +39,29 @@ protected:
 	Common::String getRecordTypeName() const override { return "SceneChange"; }
 };
 
+// Changes the scene when clicked
+class HotSingleFrameSceneChange : public SceneChange {
+public:
+	HotSingleFrameSceneChange(bool readExtra = false) : _readExtra(readExtra) {
+		_hasHotspot = false;
+	}
+	virtual ~HotSingleFrameSceneChange() {}
+
+	void readData(Common::SeekableReadStream &stream) override;
+	void execute() override;
+
+	CursorManager::CursorType getHoverCursor() const override { return _hoverCursor; }
+
+	HotspotDescription _sceneHotspot;
+
+protected:
+	CursorManager::CursorType _hoverCursor;
+	bool _readExtra;
+
+	bool canHaveHotspot() const override { return true; }
+	Common::String getRecordTypeName() const override { return "HotSingleFrameSceneChange"; }
+};
+
 // Changes the scene when clicked. Hotspot can move along with scene background frame.
 // Nancy4 introduced several sub-types with a specific mouse cursor to show when
 // hovering; all of them are handled in this class as well.


Commit: 5576227ebc50fffa4ea1041ac0fba07fde90b556
    https://github.com/scummvm/scummvm/commit/5576227ebc50fffa4ea1041ac0fba07fde90b556
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-03-31T03:29:32+03:00

Commit Message:
NANCY: Fix loading saved games for Nancy10+

Changed paths:
    engines/nancy/state/scene.cpp


diff --git a/engines/nancy/state/scene.cpp b/engines/nancy/state/scene.cpp
index 97998820aec..80e0e30aa05 100644
--- a/engines/nancy/state/scene.cpp
+++ b/engines/nancy/state/scene.cpp
@@ -685,7 +685,7 @@ void Scene::synchronize(Common::Serializer &ser) {
 		order.pop_back();
 	}
 
-	if (ser.isLoading()) {
+	if (ser.isLoading() && g_nancy->getGameType() <= kGameTypeNancy9) {
 		// Make sure the shades are open if we have items
 		getInventoryBox().onReorder();
 	}


Commit: c2efe9cf72366941b771621b28db1218c9d8a54a
    https://github.com/scummvm/scummvm/commit/c2efe9cf72366941b771621b28db1218c9d8a54a
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-03-31T03:29:33+03:00

Commit Message:
NANCY: Update FrameTextBox AR stub for Nancy11+

Changed paths:
    engines/nancy/action/arfactory.cpp


diff --git a/engines/nancy/action/arfactory.cpp b/engines/nancy/action/arfactory.cpp
index a3e9499b36a..2de25ae3499 100644
--- a/engines/nancy/action/arfactory.cpp
+++ b/engines/nancy/action/arfactory.cpp
@@ -234,8 +234,8 @@ ActionRecord *ActionManager::createActionRecord(uint16 type, Common::SeekableRea
 		return new ModifyListEntry(ModifyListEntry::kDelete);
 	case 73:
 		return new ModifyListEntry(ModifyListEntry::kMark);
-	case 74:
-		// Nancy 10+
+	case 74:	// Nancy 10
+	case 81:	// Nancy 11+
 		warning("FrameTextBox - not implemented yet");
 		return nullptr;
 	case 75:




More information about the Scummvm-git-logs mailing list