[Scummvm-git-logs] scummvm master -> bb877c97a3661aef5dd11106e7c5f1f7b5b29d6d
bluegr
noreply at scummvm.org
Mon May 4 20:57:32 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:
bb877c97a3 NANCY: Fix issues with onebuildpuzzle (e.g. pipe puzzle in Nancy 9)
Commit: bb877c97a3661aef5dd11106e7c5f1f7b5b29d6d
https://github.com/scummvm/scummvm/commit/bb877c97a3661aef5dd11106e7c5f1f7b5b29d6d
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-05-04T23:56:42+03:00
Commit Message:
NANCY: Fix issues with onebuildpuzzle (e.g. pipe puzzle in Nancy 9)
- Read subtitles properly
- Use autotext entries for subtitles
- Pick up and rotate pieces when right clicking on them
- Use grab cursor when picking up pieces
Fix #16742
Changed paths:
engines/nancy/action/puzzle/onebuildpuzzle.cpp
diff --git a/engines/nancy/action/puzzle/onebuildpuzzle.cpp b/engines/nancy/action/puzzle/onebuildpuzzle.cpp
index e3f0cd5ab6a..799b1022ac7 100644
--- a/engines/nancy/action/puzzle/onebuildpuzzle.cpp
+++ b/engines/nancy/action/puzzle/onebuildpuzzle.cpp
@@ -124,26 +124,35 @@ void OneBuildPuzzle::readData(Common::SeekableReadStream &stream) {
readFilename(stream, _goodAlt2Filename);
_goodTexts.resize(3);
+
+ const CVTX *autotext = (const CVTX *)g_nancy->getEngineData("AUTOTEXT");
+ assert(autotext);
+
Common::String unusedKey;
- for (uint i = 0; i < 3; ++i)
- readFilename(stream, unusedKey);
char textBuf[200];
+
for (uint i = 0; i < 3; ++i) {
stream.read(textBuf, 200);
assembleTextLine(textBuf, _goodTexts[i], 200);
+ if (!_goodTexts[i].empty() && autotext->texts.contains(_goodTexts[i]))
+ _goodTexts[i] = autotext->texts[_goodTexts[i]];
}
+ for (uint i = 0; i < 3; ++i)
+ readFilename(stream, unusedKey);
_badPlacementSound.readNormal(stream); // +0x841
readFilename(stream, _badAlt1Filename);
readFilename(stream, _badAlt2Filename);
_badTexts.resize(3);
- for (uint i = 0; i < 3; ++i)
- readFilename(stream, unusedKey);
for (uint i = 0; i < 3; ++i) {
stream.read(textBuf, 200);
assembleTextLine(textBuf, _badTexts[i], 200);
+ if (!_badTexts[i].empty() && autotext->texts.contains(_badTexts[i]))
+ _badTexts[i] = autotext->texts[_badTexts[i]];
}
+ for (uint i = 0; i < 3; ++i)
+ readFilename(stream, unusedKey);
stream.skip(4); // unknown bytes at +0xb6f
_solveScene.readData(stream);
@@ -151,6 +160,8 @@ void OneBuildPuzzle::readData(Common::SeekableReadStream &stream) {
readFilename(stream, unusedKey);
stream.read(textBuf, 200);
assembleTextLine(textBuf, _completionText, 200);
+ if (!_completionText.empty() && autotext->texts.contains(_completionText))
+ _completionText = autotext->texts[_completionText];
_cancelScene.readData(stream);
readRect(stream, _exitHotspot);
@@ -320,19 +331,19 @@ void OneBuildPuzzle::handleInput(NancyInput &input) {
}
if (topmostAny != -1) {
- g_nancy->_cursor->setCursorType(CursorManager::kHotspot);
-
- // Right click: rotate topmost piece under cursor
- if (input.input & NancyInput::kRightMouseButtonUp) {
- rotatePiece(topmostAny);
- playPickupSound();
- return;
- }
+ g_nancy->_cursor->setCursorType(CursorManager::kCustom1);
// Left click on an unplaced piece: pick it up
- if ((input.input & NancyInput::kLeftMouseButtonUp) && topmostUnplaced != -1) {
- Piece &pp = _pieces[topmostUnplaced];
+ // Right click: pick it up and rotate it
+ bool leftClick = (input.input & NancyInput::kLeftMouseButtonUp);
+ bool rightClick = (input.input & NancyInput::kRightMouseButtonUp);
+ if ((leftClick || rightClick) && topmostUnplaced != -1) {
_pickedUpPiece = topmostUnplaced;
+
+ if (rightClick)
+ rotatePiece(_pickedUpPiece);
+
+ Piece &pp = _pieces[_pickedUpPiece];
_isDragging = true;
_pickedUpWidth = pp.rotateSurfaces[pp.curRotation].w;
_pickedUpHeight = pp.rotateSurfaces[pp.curRotation].h;
More information about the Scummvm-git-logs
mailing list