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

bluegr noreply at scummvm.org
Fri Oct 9 18:37:28 UTC 2026


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

Summary:
b52b13e916 NANCY: Improve word wrapping
f130da8d4d NANCY: Show the channel of sound dependencies in the console
7abdd2543f NANCY: Move MouseFollowObject into action/
6f6831058f NANCY: NANCY13: Look event flag names up by the id of the flag
ca3afede4d NANCY: Add the Russian versions of Nancy 13, 14 and 15 to the detector


Commit: b52b13e91647944910945f22419271590ee7d7eb
    https://github.com/scummvm/scummvm/commit/b52b13e91647944910945f22419271590ee7d7eb
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-10-09T21:36:03+03:00

Commit Message:
NANCY: Improve word wrapping

This is more faithful to the original, and should partially address
#16691 and #16777

Changed paths:
    engines/nancy/font.cpp


diff --git a/engines/nancy/font.cpp b/engines/nancy/font.cpp
index 81fd8594c48..bded4095619 100644
--- a/engines/nancy/font.cpp
+++ b/engines/nancy/font.cpp
@@ -248,11 +248,31 @@ void Font::wordWrap(const Common::String &str, int maxWidth, Common::Array<Commo
 
 		temp += *c;
 		int size = getStringWidth(temp) + (lines.size() == 0 ? initWidth : 0);
-		if (size >= maxWidth) {
-			do {
+		if (size > maxWidth) {
+			// Roll back to the previous space so the wrap falls on a word
+			// boundary. The character that overflowed is dropped from temp
+			// and `c` is rewound so the outer ++c re-reads it on the next
+			// line.
+			temp.deleteLastChar();
+			--c;
+			int rewound = 1;
+			while (temp.size() && temp.lastChar() != ' ') {
 				temp.deleteLastChar();
 				--c;
-			} while (temp.size() && temp.lastChar() != ' ');
+				++rewound;
+			}
+
+			if (temp.empty()) {
+				// Word longer than the line width — break at the character
+				// before the overflow so we make forward progress instead
+				// of looping forever on the same char.
+				for (int i = 0; i < rewound; ++i) {
+					++c;
+					temp += *c;
+				}
+				temp.deleteLastChar();
+				--c;
+			}
 
 			lines.push_back(temp);
 			temp.clear();


Commit: f130da8d4d2626a986c30e1229a120db342c6437
    https://github.com/scummvm/scummvm/commit/f130da8d4d2626a986c30e1229a120db342c6437
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-10-09T21:36:07+03:00

Commit Message:
NANCY: Show the channel of sound dependencies in the console

- The channel was printed from the condition, so it always read 0
- Also show whether the dependency waits for the channel to play or to be silent

Changed paths:
    engines/nancy/console.cpp


diff --git a/engines/nancy/console.cpp b/engines/nancy/console.cpp
index 66b2d5edf38..2f90f883db4 100644
--- a/engines/nancy/console.cpp
+++ b/engines/nancy/console.cpp
@@ -628,7 +628,7 @@ void NancyConsole::recursePrintDependencies(const Action::DependencyRecord &reco
 			debugPrintf("kClosedCaptioning, %s", dep.condition == 2 ? "true" : "false");
 			break;
 		case DependencyType::kSound:
-			debugPrintf("kSound, channel %i", dep.condition);
+			debugPrintf("kSound, channel %i, %s", dep.label, dep.condition == 1 ? "playing" : "not playing");
 			break;
 		case DependencyType::kOpenParenthesis:
 			debugPrintf("((((((((\n");


Commit: 7abdd2543ff50b7c0d9db78b1d9a073df5cc0df2
    https://github.com/scummvm/scummvm/commit/7abdd2543ff50b7c0d9db78b1d9a073df5cc0df2
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-10-09T21:36:11+03:00

Commit Message:
NANCY: Move MouseFollowObject into action/

It is only used by the puzzles, so it belongs with the other
shared puzzle helpers, in the Action namespace.

Changed paths:
  A engines/nancy/action/mousefollow.cpp
  A engines/nancy/action/mousefollow.h
  R engines/nancy/misc/mousefollow.cpp
  R engines/nancy/misc/mousefollow.h
    engines/nancy/action/puzzle/assemblypuzzle.h
    engines/nancy/action/puzzle/bballpuzzle.h
    engines/nancy/action/puzzle/beadpuzzle.h
    engines/nancy/action/puzzle/blockspuzzle.h
    engines/nancy/action/puzzle/cubepuzzle.h
    engines/nancy/action/puzzle/dropsortpuzzle.h
    engines/nancy/action/puzzle/gridmappuzzle.h
    engines/nancy/action/puzzle/magicboxpuzzle.h
    engines/nancy/action/puzzle/mindpuzzle.h
    engines/nancy/action/puzzle/necklacepuzzle.h
    engines/nancy/action/puzzle/pegspuzzle.h
    engines/nancy/action/puzzle/rippedletterpuzzle.h
    engines/nancy/action/puzzle/sortpuzzle.h
    engines/nancy/action/puzzle/stepobjectspuzzle.h
    engines/nancy/action/puzzle/tangrampuzzle.h
    engines/nancy/action/puzzle/towerpuzzle.h
    engines/nancy/action/puzzle/weightsortpuzzle.h
    engines/nancy/module.mk


diff --git a/engines/nancy/misc/mousefollow.cpp b/engines/nancy/action/mousefollow.cpp
similarity index 95%
rename from engines/nancy/misc/mousefollow.cpp
rename to engines/nancy/action/mousefollow.cpp
index 6ccbe20b533..11342122c89 100644
--- a/engines/nancy/misc/mousefollow.cpp
+++ b/engines/nancy/action/mousefollow.cpp
@@ -19,13 +19,13 @@
  *
  */
 
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 #include "engines/nancy/enginedata.h"
 #include "engines/nancy/nancy.h"
 #include "engines/nancy/graphics.h"
 
 namespace Nancy {
-namespace Misc {
+namespace Action {
 
 MouseFollowObject::MouseFollowObject()
 		: RenderObject(8) {
@@ -66,5 +66,5 @@ void MouseFollowObject::handleInput(NancyInput &input) {
 	}
 }
 
-} // End of namespace Misc
+} // End of namespace Action
 } // End of namespace Nancy
diff --git a/engines/nancy/misc/mousefollow.h b/engines/nancy/action/mousefollow.h
similarity index 92%
rename from engines/nancy/misc/mousefollow.h
rename to engines/nancy/action/mousefollow.h
index 0ad0dd9ee13..ba99700bed8 100644
--- a/engines/nancy/misc/mousefollow.h
+++ b/engines/nancy/action/mousefollow.h
@@ -19,8 +19,8 @@
  *
  */
 
-#ifndef NANCY_MISC_MOUSEFOLLOW_H
-#define NANCY_MISC_MOUSEFOLLOW_H
+#ifndef NANCY_ACTION_MOUSEFOLLOW_H
+#define NANCY_ACTION_MOUSEFOLLOW_H
 
 #include "engines/nancy/renderobject.h"
 #include "engines/nancy/input.h"
@@ -29,7 +29,7 @@ namespace Nancy {
 
 struct VIEW;
 
-namespace Misc {
+namespace Action {
 
 // Describes an object that follows the mouse's movement, making
 // sure that its center stays above the mouse hotspot. The position
@@ -68,7 +68,7 @@ protected:
 	const VIEW *_viewportData = nullptr;
 };
 
-} // End of namespace Misc
+} // End of namespace Action
 } // End of namespace Nancy
 
-#endif // NANCY_MISC_MOUSEFOLLOW_H
+#endif // NANCY_ACTION_MOUSEFOLLOW_H
diff --git a/engines/nancy/action/puzzle/assemblypuzzle.h b/engines/nancy/action/puzzle/assemblypuzzle.h
index 2915e7ec9b9..94f9ed98d42 100644
--- a/engines/nancy/action/puzzle/assemblypuzzle.h
+++ b/engines/nancy/action/puzzle/assemblypuzzle.h
@@ -23,7 +23,7 @@
 #define NANCY_ACTION_ASSEMBLYPUZZLE_H
 
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 
 namespace Nancy {
 
@@ -54,7 +54,7 @@ protected:
 
 	void rotateBase(bool ccw);
 
-	struct Piece : Misc::MouseFollowObject {
+	struct Piece : MouseFollowObject {
 		Common::Array<Common::Rect> srcRects;
 		Common::Array<Common::Rect> destRects;
 
diff --git a/engines/nancy/action/puzzle/bballpuzzle.h b/engines/nancy/action/puzzle/bballpuzzle.h
index f1ab84ddb25..3c73e26ddca 100644
--- a/engines/nancy/action/puzzle/bballpuzzle.h
+++ b/engines/nancy/action/puzzle/bballpuzzle.h
@@ -23,7 +23,7 @@
 #define NANCY_ACTION_BBALLPUZZLE_H
 
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 
 namespace Nancy {
 namespace Action {
diff --git a/engines/nancy/action/puzzle/beadpuzzle.h b/engines/nancy/action/puzzle/beadpuzzle.h
index 8ffa3a9ea3b..9ff1255bec9 100644
--- a/engines/nancy/action/puzzle/beadpuzzle.h
+++ b/engines/nancy/action/puzzle/beadpuzzle.h
@@ -23,7 +23,7 @@
 #define NANCY_ACTION_BEADPUZZLE_H
 
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 #include "engines/nancy/commontypes.h"
 
 namespace Nancy {
@@ -100,7 +100,7 @@ protected:
 
 	Common::Array<int16> _placed;
 	int16 _heldBead = -1;
-	Misc::MouseFollowObject _heldBeadObject;
+	MouseFollowObject _heldBeadObject;
 
 	int16  _dropCurrentSlot = 0;
 	uint32 _dropNextTick    = 0;
diff --git a/engines/nancy/action/puzzle/blockspuzzle.h b/engines/nancy/action/puzzle/blockspuzzle.h
index d3ec5172a23..aee5081aa4c 100644
--- a/engines/nancy/action/puzzle/blockspuzzle.h
+++ b/engines/nancy/action/puzzle/blockspuzzle.h
@@ -24,7 +24,7 @@
 
 #include "engines/nancy/commontypes.h"
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 
 namespace Nancy {
 namespace Action {
@@ -124,7 +124,7 @@ protected:
 	int16 _carriedBlock = kNoBlock;		// the block on the cursor, or kNoBlock
 	byte _carriedRotation = 0;
 	Common::Rect _carriedSrc;
-	Misc::MouseFollowObject _carriedObject;
+	MouseFollowObject _carriedObject;
 
 	int16 _turnBlock = kNoBlock;		// the block being turned, or kNoBlock
 	byte _turnRotation = 0;
diff --git a/engines/nancy/action/puzzle/cubepuzzle.h b/engines/nancy/action/puzzle/cubepuzzle.h
index 50058b56c9f..c07dd676dd2 100644
--- a/engines/nancy/action/puzzle/cubepuzzle.h
+++ b/engines/nancy/action/puzzle/cubepuzzle.h
@@ -23,7 +23,7 @@
 #define NANCY_ACTION_CUBEPUZZLE_H
 
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 
 namespace Nancy {
 namespace Action {
@@ -79,7 +79,7 @@ protected:
 	// Multiple solve scenes, one for each cube orientation
 	Common::Array<uint> _solveSceneIDs;
 
-	Misc::MouseFollowObject _curPiece;
+	MouseFollowObject _curPiece;
 
 	Common::Array<bool> _placedPieces;
 	int _pickedUpPiece = -1;
diff --git a/engines/nancy/action/puzzle/dropsortpuzzle.h b/engines/nancy/action/puzzle/dropsortpuzzle.h
index 36a638ea025..d8216d0b6ad 100644
--- a/engines/nancy/action/puzzle/dropsortpuzzle.h
+++ b/engines/nancy/action/puzzle/dropsortpuzzle.h
@@ -25,7 +25,7 @@
 #include "engines/nancy/commontypes.h"
 #include "engines/nancy/movieplayer.h"
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 
 namespace Nancy {
 namespace Action {
@@ -129,7 +129,7 @@ protected:
 	int _rejectBin = -1;				// bin at the end of the belt (unsorted candies land here)
 
 	int16 _carriedType = kNoItem;
-	Misc::MouseFollowObject _carriedObject;
+	MouseFollowObject _carriedObject;
 
 	int _strikes = 0;
 	bool _solved = false;
diff --git a/engines/nancy/action/puzzle/gridmappuzzle.h b/engines/nancy/action/puzzle/gridmappuzzle.h
index d0b7811b8dd..e3f069ea082 100644
--- a/engines/nancy/action/puzzle/gridmappuzzle.h
+++ b/engines/nancy/action/puzzle/gridmappuzzle.h
@@ -23,7 +23,7 @@
 #define NANCY_ACTION_GRIDMAPPUZZLE_H
 
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 #include "engines/nancy/commontypes.h"
 
 namespace Nancy {
@@ -124,7 +124,7 @@ protected:
 
 	ItemSlot _items[kMaxItems];
 	int      _heldItem = -1;
-	Misc::MouseFollowObject _heldObject;
+	MouseFollowObject _heldObject;
 	bool     _isSolved = false;
 
 	Graphics::ManagedSurface _boardImage;
diff --git a/engines/nancy/action/puzzle/magicboxpuzzle.h b/engines/nancy/action/puzzle/magicboxpuzzle.h
index 5910992d831..1f09cade7d5 100644
--- a/engines/nancy/action/puzzle/magicboxpuzzle.h
+++ b/engines/nancy/action/puzzle/magicboxpuzzle.h
@@ -24,7 +24,7 @@
 
 #include "engines/nancy/commontypes.h"
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 
 namespace Nancy {
 namespace Action {
@@ -98,7 +98,7 @@ protected:
 	Common::Array<int> _slotContents;	// piece in each slot, or -1
 	Common::Array<int> _piecePlacement;	// slot each piece sits in, or -1 while in the tray
 	int _carriedPiece = -1;
-	Misc::MouseFollowObject _carriedObject;
+	MouseFollowObject _carriedObject;
 	bool _solved = false;
 	bool _exitRequested = false;
 	SoundDescription _endSound;
diff --git a/engines/nancy/action/puzzle/mindpuzzle.h b/engines/nancy/action/puzzle/mindpuzzle.h
index 94f1c314310..f0429cb68d9 100644
--- a/engines/nancy/action/puzzle/mindpuzzle.h
+++ b/engines/nancy/action/puzzle/mindpuzzle.h
@@ -23,7 +23,7 @@
 #define NANCY_ACTION_MINDPUZZLE_H
 
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 #include "engines/nancy/commontypes.h"
 
 namespace Nancy {
@@ -89,7 +89,7 @@ protected:
 
 	int16 _currentRow = 0;
 	int16 _heldColor = -1;
-	Misc::MouseFollowObject _heldBall;	// the held ball's sprite, riding the cursor
+	MouseFollowObject _heldBall;	// the held ball's sprite, riding the cursor
 	int16 _remainingGuesses = 0;
 	bool _solved = false;
 
diff --git a/engines/nancy/action/puzzle/necklacepuzzle.h b/engines/nancy/action/puzzle/necklacepuzzle.h
index 0c0a139e7dd..78cafa88c63 100644
--- a/engines/nancy/action/puzzle/necklacepuzzle.h
+++ b/engines/nancy/action/puzzle/necklacepuzzle.h
@@ -24,7 +24,7 @@
 
 #include "engines/nancy/commontypes.h"
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 
 namespace Nancy {
 namespace Action {
@@ -158,7 +158,7 @@ protected:
 	Common::Array<Graphics::ManagedSurface> _images;
 
 	int16 _heldBead = kNoBead;
-	Misc::MouseFollowObject _heldBeadObject;
+	MouseFollowObject _heldBeadObject;
 
 	int _fallingStrand = -1;
 	int _fallingStartY = 0;
diff --git a/engines/nancy/action/puzzle/pegspuzzle.h b/engines/nancy/action/puzzle/pegspuzzle.h
index da60b5d808d..7be3017570b 100644
--- a/engines/nancy/action/puzzle/pegspuzzle.h
+++ b/engines/nancy/action/puzzle/pegspuzzle.h
@@ -24,7 +24,7 @@
 
 #include "engines/nancy/commontypes.h"
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 
 namespace Nancy {
 namespace Action {
@@ -101,7 +101,7 @@ protected:
 	Common::Array<Common::Rect> _destRects;
 	int _carriedCol = -1;				// the peg currently picked up (dragged), or -1
 	int _carriedRow = -1;
-	Misc::MouseFollowObject _carriedObject;	// the carried peg's sprite, riding the cursor
+	MouseFollowObject _carriedObject;	// the carried peg's sprite, riding the cursor
 	bool _ended = false;
 	bool _solved = false;
 	bool _exitRequested = false;
diff --git a/engines/nancy/action/puzzle/rippedletterpuzzle.h b/engines/nancy/action/puzzle/rippedletterpuzzle.h
index 5605352404b..15209901723 100644
--- a/engines/nancy/action/puzzle/rippedletterpuzzle.h
+++ b/engines/nancy/action/puzzle/rippedletterpuzzle.h
@@ -23,7 +23,7 @@
 #define NANCY_ACTION_RIPPEDLETTERPUZZLE_H
 
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 
 namespace Nancy {
 
@@ -72,7 +72,7 @@ public:
 
 	int16 _customCursorID = -1;
 
-	Misc::MouseFollowObject _pickedUpPiece;
+	MouseFollowObject _pickedUpPiece;
 
 	SolveState _solveState = kNotSolved;
 	RippedLetterPuzzleData *_puzzleState = nullptr;
diff --git a/engines/nancy/action/puzzle/sortpuzzle.h b/engines/nancy/action/puzzle/sortpuzzle.h
index 0b79ea0e765..0efe934fb21 100644
--- a/engines/nancy/action/puzzle/sortpuzzle.h
+++ b/engines/nancy/action/puzzle/sortpuzzle.h
@@ -23,7 +23,7 @@
 #define NANCY_ACTION_SORTPUZZLE_H
 
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 #include "engines/nancy/commontypes.h"
 
 namespace Nancy {
@@ -133,7 +133,7 @@ protected:
 	bool _hasHeld   = false;
 	bool _isSolved  = false;
 
-	Misc::MouseFollowObject _heldObject;
+	MouseFollowObject _heldObject;
 
 	Graphics::ManagedSurface _boardImage;
 	Graphics::ManagedSurface _cursorImage;
diff --git a/engines/nancy/action/puzzle/stepobjectspuzzle.h b/engines/nancy/action/puzzle/stepobjectspuzzle.h
index aeed7ee6276..627a3382b54 100644
--- a/engines/nancy/action/puzzle/stepobjectspuzzle.h
+++ b/engines/nancy/action/puzzle/stepobjectspuzzle.h
@@ -24,7 +24,7 @@
 
 #include "engines/nancy/commontypes.h"
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 
 namespace Nancy {
 namespace Action {
@@ -121,7 +121,7 @@ protected:
 	Common::Array<Step> _playerSteps;
 	PuzzleState _puzzleState = kIdle;
 	int _carriedID = -1;
-	Misc::MouseFollowObject _carriedObject;
+	MouseFollowObject _carriedObject;
 	uint32 _stepSoundEnd = 0;
 	bool _lastStepWasDrop = false;
 	bool _lastStepCorrect = false;
diff --git a/engines/nancy/action/puzzle/tangrampuzzle.h b/engines/nancy/action/puzzle/tangrampuzzle.h
index 92cb4560194..8025776c0fa 100644
--- a/engines/nancy/action/puzzle/tangrampuzzle.h
+++ b/engines/nancy/action/puzzle/tangrampuzzle.h
@@ -23,7 +23,7 @@
 #define NANCY_ACTION_TANGRAMPUZZLE_H
 
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 
 namespace Nancy {
 namespace Action {
@@ -48,7 +48,7 @@ public:
 protected:
 	Common::String getRecordTypeName() const override { return "TangramPuzzle"; }
 
-	class Tile : public Misc::MouseFollowObject {
+	class Tile : public MouseFollowObject {
 	public:
 		Tile();
 		virtual ~Tile();
diff --git a/engines/nancy/action/puzzle/towerpuzzle.h b/engines/nancy/action/puzzle/towerpuzzle.h
index 173ca7bb19e..2a6057d0518 100644
--- a/engines/nancy/action/puzzle/towerpuzzle.h
+++ b/engines/nancy/action/puzzle/towerpuzzle.h
@@ -23,7 +23,7 @@
 #define NANCY_ACTION_TOWERPUZZLE_H
 
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 
 namespace Nancy {
 
@@ -61,7 +61,7 @@ protected:
 	SoundDescription _takeSound;
 	SoundDescription _dropSound;
 
-	Misc::MouseFollowObject _heldRing;
+	MouseFollowObject _heldRing;
 	int8 _heldRingID = -1;
 	int8 _heldRingPoleID = -1;
 	SolveState _solveState = kNotSolved;
diff --git a/engines/nancy/action/puzzle/weightsortpuzzle.h b/engines/nancy/action/puzzle/weightsortpuzzle.h
index 163856edd54..004580132ca 100644
--- a/engines/nancy/action/puzzle/weightsortpuzzle.h
+++ b/engines/nancy/action/puzzle/weightsortpuzzle.h
@@ -24,7 +24,7 @@
 
 #include "engines/nancy/commontypes.h"
 #include "engines/nancy/action/puzzlerecord.h"
-#include "engines/nancy/misc/mousefollow.h"
+#include "engines/nancy/action/mousefollow.h"
 
 namespace Nancy {
 namespace Action {
@@ -144,7 +144,7 @@ protected:
 	Common::Array<Object> _objects;
 	int _carriedObjectID = -1;
 	int _carriedFrom = -1;
-	Misc::MouseFollowObject _carriedObject;
+	MouseFollowObject _carriedObject;
 	int _outcome = -1;
 	bool _exitRequested = false;
 	SoundDescription _endSound;
diff --git a/engines/nancy/module.mk b/engines/nancy/module.mk
index 6a446f35090..a6774c6904b 100644
--- a/engines/nancy/module.mk
+++ b/engines/nancy/module.mk
@@ -12,6 +12,7 @@ MODULE_OBJS = \
   action/navigationrecords.o \
   action/soundrecords.o \
   action/miscrecords.o \
+  action/mousefollow.o \
   action/conversation.o \
   action/interactivevideo.o \
   action/overlay.o \
@@ -116,7 +117,6 @@ MODULE_OBJS = \
   state/setupmenu.o \
   misc/hypertext.o \
   misc/lightning.o \
-  misc/mousefollow.o \
   misc/specialeffect.o \
   cif.o \
   commontypes.o \


Commit: 6f6831058fc28d39dbe5147c467bb08487baeb8b
    https://github.com/scummvm/scummvm/commit/6f6831058fc28d39dbe5147c467bb08487baeb8b
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-10-09T21:36:14+03:00

Commit Message:
NANCY: NANCY13: Look event flag names up by the id of the flag

The names were taken by their place in the EVNT chunk, but from
Nancy13 on some flags are listed twice or out of order, and Nancy16
lists its inventory items there as well, so the console showed the
wrong names for many flags

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


diff --git a/engines/nancy/enginedata.cpp b/engines/nancy/enginedata.cpp
index 7093ff58ba0..5bc0b5d6f72 100644
--- a/engines/nancy/enginedata.cpp
+++ b/engines/nancy/enginedata.cpp
@@ -1384,15 +1384,27 @@ UINB::UINB(Common::SeekableReadStream *chunkStream) : EngineData(chunkStream) {
 }
 
 EVNT::EVNT(Common::SeekableReadStream *chunkStream) : EngineData(chunkStream) {
-	Common::String name;
-	const uint16 count = (uint16)(chunkStream->size() / (int64)kEventRecordSize);
+	numRecords = (uint16)(chunkStream->size() / (int64)kEventRecordSize);
 
-	eventFlagNames.resize(count);
+	Common::Array<Common::String> names(numRecords);
+	Common::Array<uint16> ids(numRecords);
+	uint numFlags = 0;
 
-	for (uint16 i = 0; i < count; ++i) {
-		readFilename(*chunkStream, name);
-		chunkStream->skip(2);	// flag ID (starting from 2000)
-		eventFlagNames[i] = name;
+	for (uint16 i = 0; i < numRecords; ++i) {
+		readFilename(*chunkStream, names[i]);
+		ids[i] = chunkStream->readUint16LE();
+
+		if (ids[i] >= kFirstEventFlag) {
+			numFlags = MAX<uint>(numFlags, ids[i] - kFirstEventFlag + 1);
+		}
+	}
+
+	eventFlagNames.resize(numFlags);
+
+	for (uint16 i = 0; i < numRecords; ++i) {
+		if (ids[i] >= kFirstEventFlag) {
+			eventFlagNames[ids[i] - kFirstEventFlag] = names[i];
+		}
 	}
 }
 
diff --git a/engines/nancy/enginedata.h b/engines/nancy/enginedata.h
index 15b96c23457..749e2c4c4b5 100644
--- a/engines/nancy/enginedata.h
+++ b/engines/nancy/enginedata.h
@@ -863,6 +863,14 @@ struct EVNT : public EngineData {
 
 	static const uint kEventRecordSize = 35;
 
+	// The first flag listed in the chunk; the lower ids are the engine's own flags
+	static const uint16 kFirstEventFlag = 2000;
+
+	uint16 numRecords = 0;
+
+	// Indexed by flag id, counting from kFirstEventFlag, since the records don't
+	// always follow the ids: Nancy13 and up list some flags twice or out of order,
+	// and Nancy16 starts with the inventory items, which have ids of their own.
 	Common::Array<Common::String> eventFlagNames;
 };
 
diff --git a/engines/nancy/nancy.cpp b/engines/nancy/nancy.cpp
index d6b51298ac4..9118a71be52 100644
--- a/engines/nancy/nancy.cpp
+++ b/engines/nancy/nancy.cpp
@@ -772,7 +772,7 @@ void NancyEngine::bootGameEngine() {
 		// game data instead of relying on the hardcoded value
 		auto *evnt = (const EVNT *)getEngineData("EVNT");
 		if (evnt) {
-			_staticData.numEventFlags = (uint16)(kNumGenericEventFlags + evnt->eventFlagNames.size());
+			_staticData.numEventFlags = (uint16)(kNumGenericEventFlags + evnt->numRecords);
 		}
 	}
 


Commit: ca3afede4d27c74ca6fd86e42cc8e2214da1af6e
    https://github.com/scummvm/scummvm/commit/ca3afede4d27c74ca6fd86e42cc8e2214da1af6e
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-10-09T21:36:17+03:00

Commit Message:
NANCY: Add the Russian versions of Nancy 13, 14 and 15 to the detector

Fix #17316, #17317, #17318

Changed paths:
    engines/nancy/detection_tables.h


diff --git a/engines/nancy/detection_tables.h b/engines/nancy/detection_tables.h
index 5cff852f8c1..6d38f5053f7 100644
--- a/engines/nancy/detection_tables.h
+++ b/engines/nancy/detection_tables.h
@@ -909,6 +909,17 @@ static const NancyGameDescription gameDescriptions[] = {
 		},
 		kGameTypeNancy13
 	},
+	{ // MD5 by BacchusEmperor from bug #17316
+		{
+			"nancy13", nullptr,
+			AD_ENTRY1s("ciftree.dat", "7d79b72e58d942f2fce00e90fb9b5dc3", 72327850),
+			Common::RU_RUS,
+			Common::kPlatformWindows,
+			ADGF_TESTING | ADGF_DROPPLATFORM,
+			NANCY8_GUIOPTIONS
+		},
+		kGameTypeNancy13
+	},
 	{ // MD5 by bluegr
 		{
 			"nancy14", nullptr,
@@ -920,6 +931,17 @@ static const NancyGameDescription gameDescriptions[] = {
 		},
 		kGameTypeNancy14
 	},
+	{ // MD5 by BacchusEmperor from bug #17317
+		{
+			"nancy14", nullptr,
+			AD_ENTRY1s("ciftree.dat", "e0743aa7285852d10e95ca2480260e59", 48288815),
+			Common::RU_RUS,
+			Common::kPlatformWindows,
+			ADGF_TESTING | ADGF_DROPPLATFORM,
+			NANCY8_GUIOPTIONS
+		},
+		kGameTypeNancy14
+	},
 	{ // MD5 by bluegr
 		{
 			"nancy15", nullptr,
@@ -931,6 +953,17 @@ static const NancyGameDescription gameDescriptions[] = {
 		},
 		kGameTypeNancy15
 	},
+	{ // MD5 by BacchusEmperor from bug #17318
+		{
+			"nancy15", nullptr,
+			AD_ENTRY1s("ciftree.dat", "981b1d2c25be2de48cd09d42329acd1f", 90838797),
+			Common::RU_RUS,
+			Common::kPlatformWindows,
+			ADGF_TESTING | ADGF_DROPPLATFORM,
+			NANCY8_GUIOPTIONS
+		},
+		kGameTypeNancy15
+	},
 	{ // MD5 by bluegr
 		{
 			"nancy16", nullptr,




More information about the Scummvm-git-logs mailing list