[Scummvm-git-logs] scummvm master -> 6628fce95c05fafefb1921938c2a3a048855c515

bluegr noreply at scummvm.org
Thu May 28 22:19:54 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:
322dc6ae0c NANCY: Cleanup Nancy10+ cursors, and hook up the new drag hand cursor
6628fce95c NANCY: Fix sticky hotspot when trying to leave Harlan's room in Nancy8


Commit: 322dc6ae0c01a34308523ee6ae484019de047e1e
    https://github.com/scummvm/scummvm/commit/322dc6ae0c01a34308523ee6ae484019de047e1e
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-05-29T01:19:43+03:00

Commit Message:
NANCY: Cleanup Nancy10+ cursors, and hook up the new drag hand cursor

Changed paths:
    engines/nancy/action/puzzle/beadpuzzle.cpp
    engines/nancy/action/puzzle/sortpuzzle.cpp
    engines/nancy/cursor.cpp
    engines/nancy/cursor.h


diff --git a/engines/nancy/action/puzzle/beadpuzzle.cpp b/engines/nancy/action/puzzle/beadpuzzle.cpp
index 291403e224d..ec6d860ff01 100644
--- a/engines/nancy/action/puzzle/beadpuzzle.cpp
+++ b/engines/nancy/action/puzzle/beadpuzzle.cpp
@@ -279,7 +279,7 @@ void BeadPuzzle::handleInput(NancyInput &input) {
 		if ((int)_placed.size() < (int)_numSlots &&
 		    !_removeHotspot.isEmpty() &&
 		    _removeHotspot.contains(mouseVP)) {
-			g_nancy->_cursor->setCursorType(CursorManager::kHotspot);
+			g_nancy->_cursor->setCursorType(CursorManager::kDragHand);
 			if (input.input & NancyInput::kLeftMouseButtonUp) {
 				g_nancy->_sound->stopSound(_pickupSound);
 				if (_placeSound.name != "NO SOUND") {
@@ -299,7 +299,7 @@ void BeadPuzzle::handleInput(NancyInput &input) {
 		if (_heldBead >= 0 && _heldBead < (int)_numBeadTypes &&
 		    !_pickupHotspots[_heldBead].isEmpty() &&
 		    _pickupHotspots[_heldBead].contains(mouseVP)) {
-			g_nancy->_cursor->setCursorType(CursorManager::kHotspot);
+			g_nancy->_cursor->setCursorType(CursorManager::kDragHand);
 			if (input.input & NancyInput::kLeftMouseButtonUp) {
 				_heldBead = -1;
 				g_nancy->_sound->stopSound(_pickupSound);
diff --git a/engines/nancy/action/puzzle/sortpuzzle.cpp b/engines/nancy/action/puzzle/sortpuzzle.cpp
index fdb103184ee..c2cd20dfb0f 100644
--- a/engines/nancy/action/puzzle/sortpuzzle.cpp
+++ b/engines/nancy/action/puzzle/sortpuzzle.cpp
@@ -300,7 +300,8 @@ void SortPuzzle::handleInput(NancyInput &input) {
 		return;
 	}
 
-	g_nancy->_cursor->setCursorType(CursorManager::kHotspot);
+	g_nancy->_cursor->setCursorType(_hasHeld ? CursorManager::kDragHand
+	                                         : CursorManager::kHotspot);
 	if (!(input.input & NancyInput::kLeftMouseButtonUp))
 		return;
 
diff --git a/engines/nancy/cursor.cpp b/engines/nancy/cursor.cpp
index ca66d8026da..f39c61e34c7 100644
--- a/engines/nancy/cursor.cpp
+++ b/engines/nancy/cursor.cpp
@@ -155,7 +155,7 @@ uint CursorManager::resolveNancy10CursorID(CursorType type, int16 itemID) {
 	case kNormal:               return kNewNormal;
 	case kHotspot:              return kNewHotspot;
 	case kHotspotTalk:          return kNewHotspotTalk;
-	case kDragHand:             return kNewUse;		// TODO: Use the correct cursor here
+	case kDragHand:             return kNewDragHand;
 	case kNormalArrow:          return kNewNormalArrow;
 	case kHotspotArrow:         return kNewHotspotArrow;
 	case kExit:                 return kNewExit;
diff --git a/engines/nancy/cursor.h b/engines/nancy/cursor.h
index f0e6c250c63..0dbf7c4a336 100644
--- a/engines/nancy/cursor.h
+++ b/engines/nancy/cursor.h
@@ -58,32 +58,36 @@ public:
 		kHotspotTalk			= 22,	// Speech-bubble hover cursor (Nancy 10+)
 		kDragHand				= 23,	// Hand cursor used when dragging an item (Nancy 10+)
 
-		// Cursors in Nancy10 and newer games. Each cursor type stores
-		// two consecutive entries in the chunk: an idle slot at
-		// (type * 2) and a hotspot/highlighted slot at (type * 2 + 1).
-		kNewNormal 				= 0,	// Type 0 idle  — Eyeglass
-		kNewHotspot 			= 1,	// Type 0 hotspot — Eyeglass highlighted (only "hotspot" variant we expose)
-		kNewUse					= 2,	// Type 1 idle  — Used for interaction with characters and objects
-		kNewHotspotUse			= 3,	// Type 1 hotspot
-		kNewLockedUse			= 4,	// Type 2 idle
-		kNewHotspotLockedUse	= 5,	// Type 2 hotspot
-		kNewTalk				= 6,	// Type 3 idle  — Speech-bubble (talking to characters)
-		kNewHotspotTalk			= 7,	// Type 3 hotspot
-		kNewNormalArrow			= 8,	// Type 4 idle  — when the cursor is over the taskbar
-		kNewHotspotArrow		= 9,	// Type 4 hotspot
-		kNewExit 				= 10,	// Type 5 idle  — Used for movement and exiting puzzles
-		kNewRotateCW 			= 12,	// Type 6 idle  — Used in puzzles only
-		kNewRotateCCW 			= 14,	// Type 7 idle  — Used in puzzles only
-		kNewMoveLeft 			= 16,	// Type 8 idle  — Used for movement and turning in 360 scenes
-		kNewMoveRight 			= 18,	// Type 9 idle  — Used for movement and turning in 360 scenes
-		kNewMoveForward			= 20,	// Type 10 idle — Used for movement
-		kNewMoveBackward		= 22,	// Type 11 idle — Used for movement and exiting puzzles
-		kNewMoveUp				= 24,	// Type 12 idle — Used for movement
-		kNewMoveDown			= 26,	// Type 13 idle — Used for movement
-		kNewRotateRight			= 28,	// Type 14 idle — Used in 360 scenes
-		kNewRotateLeft			= 30,	// Type 15 idle — Used in 360 scenes
-		kNewInvertedRotateRight = 32,	// Type 16 idle — Used in 360 scenes
-		kNewInvertedRotateLeft	= 34,	// Type 17 idle — Used in 360 scenes
+		// Cursors in Nancy10 and newer games. The CURS chunk holds 37 system
+		// cursor types in pairs; type T's idle slot is (T*2) and its hotspot
+		// slot is (T*2 + 1). Types 0–4 and 18–26 have visually distinct idle
+		// vs. hotspot sprites; types 5–17 and 27–36 use the same sprite for
+		// both. Types 18+ are Nancy 10-specific puzzle/inventory cursors.
+		kNewNormal 				= 0,	// Type 0  — Eyeglass
+		kNewHotspot 			= 1,	// Type 0  hotspot — Eyeglass highlighted
+		kNewUse					= 2,	// Type 1  — Open-hand "use" cursor (interact with characters/objects)
+		kNewHotspotUse			= 3,	// Type 1  hotspot
+		kNewLockedUse			= 4,	// Type 2  — Locked variant of the use hand
+		kNewHotspotLockedUse	= 5,	// Type 2  hotspot
+		kNewTalk				= 6,	// Type 3  — Speech-bubble (talking to characters)
+		kNewHotspotTalk			= 7,	// Type 3  hotspot
+		kNewNormalArrow			= 8,	// Type 4  — Taskbar arrow
+		kNewHotspotArrow		= 9,	// Type 4  hotspot
+		kNewExit 				= 10,	// Type 5  — Exit / back movement
+		kNewRotateCW 			= 12,	// Type 6  — Puzzle rotation
+		kNewRotateCCW 			= 14,	// Type 7  — Puzzle rotation
+		kNewMoveLeft 			= 16,	// Type 8  — Movement / 360 turn
+		kNewMoveRight 			= 18,	// Type 9  — Movement / 360 turn
+		kNewMoveForward			= 20,	// Type 10 — Movement
+		kNewMoveBackward		= 22,	// Type 11 — Movement / exit puzzles
+		kNewMoveUp				= 24,	// Type 12 — Movement
+		kNewMoveDown			= 26,	// Type 13 — Movement
+		kNewRotateRight			= 28,	// Type 14 — 360 scenes
+		kNewRotateLeft			= 30,	// Type 15 — 360 scenes
+		kNewInvertedRotateRight = 32,	// Type 16 — Inverted 360 rotation
+		kNewInvertedRotateLeft	= 34,	// Type 17 — Inverted 360 rotation
+		kNewDragHand			= 38,	// Type 19 — Hand used while dragging puzzle pieces (e.g. SortPuzzle pickup action sets this)
+		kNewDropHand			= 64,	// Type 32 — Hand shown when a held piece is dropped (briefly set on the drop action)
 	};
 
 	CursorManager();


Commit: 6628fce95c05fafefb1921938c2a3a048855c515
    https://github.com/scummvm/scummvm/commit/6628fce95c05fafefb1921938c2a3a048855c515
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-05-29T01:19:44+03:00

Commit Message:
NANCY: Fix sticky hotspot when trying to leave Harlan's room in Nancy8

When trying to leave Harlan's room while holding the videotape in
Nancy8, a hotspot of type HotMultiframeMultiSceneChange is triggered,
which is supposed to tell the player that it's not possible to leave
without returning the video tape. However, that AR type didn't set an
_isDone flag after executing, resulting in running in each frame after
its execution ended. In Harlan's room, this resulted in a hotspot that,
when triggered, appeared in every frame without doing anything.

Fix #16710

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


diff --git a/engines/nancy/action/navigationrecords.cpp b/engines/nancy/action/navigationrecords.cpp
index b7334a00fa6..cb37292cd28 100644
--- a/engines/nancy/action/navigationrecords.cpp
+++ b/engines/nancy/action/navigationrecords.cpp
@@ -207,6 +207,7 @@ void HotMultiframeMultiSceneChange::execute() {
 		} else {
 			_onFalse.execute();
 		}
+		_isDone = true;
 
 		break;
 	}




More information about the Scummvm-git-logs mailing list