[Scummvm-git-logs] scummvm master -> 5791d56e0fc5715d4278008ea32827b9e90116d8
bluegr
noreply at scummvm.org
Mon Apr 20 01:41:37 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:
5791d56e0f NANCY: Add variants of navigation functions for Nancy10+
Commit: 5791d56e0fc5715d4278008ea32827b9e90116d8
https://github.com/scummvm/scummvm/commit/5791d56e0fc5715d4278008ea32827b9e90116d8
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-04-20T04:40:46+03:00
Commit Message:
NANCY: Add variants of navigation functions for Nancy10+
These variants are for Hot1FrSceneChange and HotMultiframeSceneChange.
HotMultiframeSceneChange has a terse mode now. Also, removed the
readExtra bytes hack for HotSingleFrameSceneChange
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 aa28ee7bf88..8380b66b9e1 100644
--- a/engines/nancy/action/arfactory.cpp
+++ b/engines/nancy/action/arfactory.cpp
@@ -89,14 +89,12 @@ ActionRecord *ActionManager::createActionRecord(uint16 type, Common::SeekableRea
if (g_nancy->getGameType() <= kGameTypeNancy9)
return new HotMultiframeSceneChange(CursorManager::kHotspot);
else
- return new Hot1FrSceneChange(CursorManager::kExit); // TODO: cursor
+ return new Hot1FrSceneChange(CursorManager::kNormal, true);
case 12:
if (g_nancy->getGameType() <= kGameTypeNancy9) {
return new SceneChange();
} else {
- // Nancy10+. A simplified version of HotMultiframeSceneChange
- // TODO: Handle this correctly
- return nullptr;
+ return new HotMultiframeSceneChange(CursorManager::kNormal, true);
}
case 13:
if (g_nancy->getGameType() <= kGameTypeNancy9)
diff --git a/engines/nancy/action/navigationrecords.cpp b/engines/nancy/action/navigationrecords.cpp
index 820fb1d3a43..834343485bd 100644
--- a/engines/nancy/action/navigationrecords.cpp
+++ b/engines/nancy/action/navigationrecords.cpp
@@ -39,7 +39,18 @@ void SceneChange::execute() {
}
void HotMultiframeSceneChange::readData(Common::SeekableReadStream &stream) {
- SceneChange::readData(stream);
+ if (_isTerse) {
+ _hoverCursor = (CursorManager::CursorType)stream.readUint16LE();
+ _sceneChange.sceneID = stream.readUint16LE();
+ _sceneChange.frameID = stream.readUint16LE();
+ _sceneChange.verticalOffset = 0;
+ _sceneChange.continueSceneSound = stream.readUint16LE();
+ _sceneChange.listenerFrontVector.set(0, 0, 1);
+ _sceneChange.frontVectorFrameID = _sceneChange.frameID;
+ } else {
+ SceneChange::readData(stream);
+ }
+
uint16 numHotspots = stream.readUint16LE();
_hotspots.reserve(numHotspots);
@@ -77,11 +88,6 @@ void HotSingleFrameSceneChange::readData(Common::SeekableReadStream &stream) {
_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() {
@@ -100,6 +106,9 @@ void HotSingleFrameSceneChange::execute() {
}
void Hot1FrSceneChange::readData(Common::SeekableReadStream &stream) {
+ if (_dynamicCursor)
+ _hoverCursor = (CursorManager::CursorType)stream.readUint16LE();
+
if (!_isTerse) {
SceneChange::readData(stream);
_hotspotDesc.readData(stream);
diff --git a/engines/nancy/action/navigationrecords.h b/engines/nancy/action/navigationrecords.h
index 091a83d89db..f7e67fc3f3e 100644
--- a/engines/nancy/action/navigationrecords.h
+++ b/engines/nancy/action/navigationrecords.h
@@ -42,7 +42,7 @@ protected:
// Changes the scene when clicked
class HotSingleFrameSceneChange : public SceneChange {
public:
- HotSingleFrameSceneChange(bool readExtra = false) : _readExtra(readExtra) {
+ HotSingleFrameSceneChange() {
_hasHotspot = false;
_hoverCursor = CursorManager::kNormal;
}
@@ -57,7 +57,6 @@ public:
protected:
CursorManager::CursorType _hoverCursor;
- bool _readExtra;
bool canHaveHotspot() const override { return true; }
Common::String getRecordTypeName() const override { return "HotSingleFrameSceneChange"; }
@@ -68,7 +67,8 @@ protected:
// hovering; all of them are handled in this class as well.
class HotMultiframeSceneChange : public SceneChange {
public:
- HotMultiframeSceneChange(CursorManager::CursorType hoverCursor) : _hoverCursor(hoverCursor) {}
+ HotMultiframeSceneChange(CursorManager::CursorType hoverCursor, bool isTerse = false) :
+ _hoverCursor(hoverCursor), _isTerse(isTerse) {}
virtual ~HotMultiframeSceneChange() {}
void readData(Common::SeekableReadStream &stream) override;
@@ -77,10 +77,14 @@ public:
CursorManager::CursorType getHoverCursor() const override { return _hoverCursor; }
Common::Array<HotspotDescription> _hotspots;
+ bool _isTerse = false;
protected:
bool canHaveHotspot() const override { return true; }
Common::String getRecordTypeName() const override {
+ if (_isTerse)
+ return "HotMultiframeSceneChangeTerse";
+
switch (_hoverCursor) {
case CursorManager::kMoveForward:
return "HotMultiframeForwardSceneChange";
@@ -101,7 +105,8 @@ protected:
// hovering; all of them are handled in this class as well.
class Hot1FrSceneChange : public SceneChange {
public:
- Hot1FrSceneChange(CursorManager::CursorType hoverCursor) : _hoverCursor(hoverCursor) {}
+ Hot1FrSceneChange(CursorManager::CursorType hoverCursor, bool dynamicCursor = false) :
+ _hoverCursor(hoverCursor), _dynamicCursor(dynamicCursor) {}
virtual ~Hot1FrSceneChange() {}
void readData(Common::SeekableReadStream &stream) override;
@@ -111,13 +116,13 @@ public:
HotspotDescription _hotspotDesc;
bool _isTerse = false;
+ bool _dynamicCursor = false;
protected:
bool canHaveHotspot() const override { return true; }
Common::String getRecordTypeName() const override {
- if (_isTerse) {
+ if (_isTerse)
return "HotSceneChangeTerse";
- }
switch (_hoverCursor) {
case CursorManager::kExit:
More information about the Scummvm-git-logs
mailing list