[Scummvm-git-logs] scummvm master -> 3233cdadc6733e8023767b3219e91c055def270d
bluegr
noreply at scummvm.org
Wed Jun 10 00:55:26 UTC 2026
This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
24ba7b9812 NANCY: Add new functionality for secondary videos in Nancy10+
5147519578 NANCY: Implement new functionality in collisionpuzzle for Nancy10+
50d6f13a1d NANCY: Add a temporary hack for character availability in Nancy10
5bbbcc20b6 NANCY: Set the event flag after meeting Dave in the cellar in Nancy10
06811cb9b6 NANCY: Implement some of the changes to multibuildpuzzle for Nancy10
3233cdadc6 NANCY: Implement event flag handling for scene hotspots in Nancy10+
Commit: 24ba7b9812a22639b3d802aee6bbc98ac1753f22
https://github.com/scummvm/scummvm/commit/24ba7b9812a22639b3d802aee6bbc98ac1753f22
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-06-10T03:55:10+03:00
Commit Message:
NANCY: Add new functionality for secondary videos in Nancy10+
- Event flags can now be set per frame IDs, same as in secondary movies
- The current scene is pushed based on a flag when the video is
triggered, in contract with previous games, where this happened
unconditionally
Changed paths:
engines/nancy/action/secondaryvideo.cpp
engines/nancy/action/secondaryvideo.h
diff --git a/engines/nancy/action/secondaryvideo.cpp b/engines/nancy/action/secondaryvideo.cpp
index 808362db49e..407bbc787e9 100644
--- a/engines/nancy/action/secondaryvideo.cpp
+++ b/engines/nancy/action/secondaryvideo.cpp
@@ -105,6 +105,13 @@ void PlaySecondaryVideo::updateGraphics() {
if (_decoder.needsUpdate()) {
GraphicsManager::copyToManaged(*_decoder.decodeNextFrame(), _fullFrame, !_paletteFilename.empty(), _videoFormat == kSmallVideoFormat);
_needsRedraw = true;
+
+ for (const FlagAtFrame &f : _frameFlags) {
+ if (f.flagDesc.label != -1 &&
+ _decoder.getCurFrame() == f.frameID) {
+ NancySceneState.setEventFlag(f.flagDesc);
+ }
+ }
}
if (lastAnimationFrame > -1 &&
@@ -155,6 +162,9 @@ void PlaySecondaryVideo::handleInput(NancyInput &input) {
}
void PlaySecondaryVideo::readData(Common::SeekableReadStream &stream) {
+ uint16 numFrameEvents = 0;
+ uint16 numVideoDescs = 0;
+
Common::Serializer ser(&stream, nullptr);
ser.setVersion(g_nancy->getGameType());
@@ -176,14 +186,25 @@ void PlaySecondaryVideo::readData(Common::SeekableReadStream &stream) {
ser.syncAsUint16LE(_onHoverEndLastFrame);
_sceneChange.readData(stream, ser.getVersion() == kGameTypeVampire);
- ser.skip(1, kGameTypeNancy1);
- // Count of extra 6-byte entries that sit between the header and the
- // video descs in the original layout. Always 0 in practice.
- ser.skip(2, kGameTypeNancy10);
+ if (g_nancy->getGameType() <= kGameTypeNancy9) {
+ ser.skip(1, kGameTypeNancy1);
+ } else {
+ byte pushSceneByte = 0;
+ ser.syncAsByte(pushSceneByte);
+ _pushSceneOnTrigger = (pushSceneByte == 1);
+ ser.syncAsUint16LE(numFrameEvents);
+ }
- uint16 numVideoDescs = 0;
ser.syncAsUint16LE(numVideoDescs);
+
+ _frameFlags.resize(numFrameEvents);
+ for (uint i = 0; i < numFrameEvents; ++i) {
+ ser.syncAsSint16LE(_frameFlags[i].frameID);
+ ser.syncAsSint16LE(_frameFlags[i].flagDesc.label);
+ ser.syncAsUint16LE(_frameFlags[i].flagDesc.flag);
+ }
+
_videoDescs.resize(numVideoDescs);
for (uint i = 0; i < numVideoDescs; ++i) {
_videoDescs[i].readData(stream);
@@ -242,7 +263,8 @@ void PlaySecondaryVideo::execute() {
break;
}
case kActionTrigger:
- NancySceneState.pushScene();
+ if (g_nancy->getGameType() < kGameTypeNancy10 || _pushSceneOnTrigger)
+ NancySceneState.pushScene();
NancySceneState.changeScene(_sceneChange);
finishExecution();
break;
diff --git a/engines/nancy/action/secondaryvideo.h b/engines/nancy/action/secondaryvideo.h
index 9117dedb011..d6cde625e98 100644
--- a/engines/nancy/action/secondaryvideo.h
+++ b/engines/nancy/action/secondaryvideo.h
@@ -68,6 +68,16 @@ public:
uint16 _onHoverEndLastFrame = 0;
SceneChangeDescription _sceneChange;
+ // Nancy 10+: push current scene before the sceneChange target.
+ bool _pushSceneOnTrigger = false;
+
+ // Nancy 10+: set an event flag when playback reaches frameID.
+ struct FlagAtFrame {
+ int16 frameID;
+ FlagDescription flagDesc;
+ };
+ Common::Array<FlagAtFrame> _frameFlags;
+
Common::Array<SecondaryVideoDescription> _videoDescs;
bool canHaveHotspot() const override { return true; }
Commit: 514751957847e5b0601b2573ecdc41b639d1dde9
https://github.com/scummvm/scummvm/commit/514751957847e5b0601b2573ecdc41b639d1dde9
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-06-10T03:55:10+03:00
Commit Message:
NANCY: Implement new functionality in collisionpuzzle for Nancy10+
Fixes the cellar staircase puzzle in Nancy10
Changed paths:
engines/nancy/action/puzzle/collisionpuzzle.cpp
engines/nancy/action/puzzle/collisionpuzzle.h
diff --git a/engines/nancy/action/puzzle/collisionpuzzle.cpp b/engines/nancy/action/puzzle/collisionpuzzle.cpp
index 8de4dc95f53..60e73452dc6 100644
--- a/engines/nancy/action/puzzle/collisionpuzzle.cpp
+++ b/engines/nancy/action/puzzle/collisionpuzzle.cpp
@@ -187,26 +187,35 @@ void CollisionPuzzle::readData(Common::SeekableReadStream &stream) {
readFilename(stream, _imageName);
uint16 numPieces = 0;
- uint16 width = stream.readUint16LE();
- uint16 height = stream.readUint16LE();
+ // Nancy 10+ TileMove stores rows then cols (was width then height for square grids)
+ uint16 width, height;
+ if (_puzzleType == kTileMove && g_nancy->getGameType() >= kGameTypeNancy10) {
+ height = stream.readUint16LE();
+ width = stream.readUint16LE();
+ } else {
+ width = stream.readUint16LE();
+ height = stream.readUint16LE();
+ }
if (_puzzleType == kCollision) {
numPieces = stream.readUint16LE();
} else {
_tileMoveExitPos.y = stream.readUint16LE();
_tileMoveExitPos.x = stream.readUint16LE();
- _tileMoveExitSize = stream.readUint16LE();
+ _tileMoveExitIndex = stream.readUint16LE();
numPieces = 6;
}
+ const uint maxGridSize = (_puzzleType == kTileMove && g_nancy->getGameType() >= kGameTypeNancy10) ? 11 : 8;
+
_grid.resize(height, Common::Array<uint16>(width));
for (uint y = 0; y < height; ++y) {
for (uint x = 0; x < width; ++x) {
_grid[y][x] = stream.readUint16LE();
}
- stream.skip((8 - width) * 2);
+ stream.skip((maxGridSize - width) * 2);
}
- stream.skip((8 - height) * 8 * 2);
+ stream.skip((maxGridSize - height) * maxGridSize * 2);
if (_puzzleType == kCollision) {
_startLocations.resize(numPieces);
@@ -240,15 +249,21 @@ void CollisionPuzzle::readData(Common::SeekableReadStream &stream) {
if (g_nancy->getGameType() <= kGameTypeNancy7) {
stream.skip(3);
+ } else if (_puzzleType == kCollision && g_nancy->getGameType() >= kGameTypeNancy10) {
+ stream.skip(3);
} else if (_puzzleType == kTileMove) {
uint16 numTimerGraphics = stream.readUint16LE();
_timerTime = stream.readUint32LE();
- readRectArray(stream, _timerSrcs, numTimerGraphics, 10);
- _timerFlagIds.resize(numTimerGraphics);
- for (uint i = 0; i < numTimerGraphics; ++i) {
- _timerFlagIds[i] = stream.readSint16LE();
+ if (numTimerGraphics) {
+ readRectArray(stream, _timerSrcs, numTimerGraphics, 10);
+ _timerFlagIds.resize(numTimerGraphics);
+ for (uint i = 0; i < numTimerGraphics; ++i) {
+ _timerFlagIds[i] = stream.readSint16LE();
+ }
+ stream.skip((10 - numTimerGraphics) * 2);
+ } else {
+ stream.skip(10 * 16 + 10 * 2); // 10x16-byte rects + 10x2-byte flag IDs
}
- stream.skip((10 - numTimerGraphics) * 2);
readRect(stream, _timerDest);
}
@@ -300,13 +315,30 @@ void CollisionPuzzle::execute() {
return;
}
}
+ } else if (_tileMoveExitIndex == 20 && g_nancy->getGameType() >= kGameTypeNancy10) {
+ // Stair-slider sentinel: solves when the exit cell is uncovered
+ bool exitCovered = false;
+ for (uint i = 0; i < _pieces.size(); ++i) {
+ Common::Rect r(_pieces[i]._gridPos.x, _pieces[i]._gridPos.y,
+ _pieces[i]._gridPos.x + _pieces[i]._w,
+ _pieces[i]._gridPos.y + _pieces[i]._h);
+ if (r.contains(_tileMoveExitPos)) {
+ exitCovered = true;
+ break;
+ }
+ }
+ if (exitCovered) {
+ return;
+ }
} else {
// Check if either:
// - the solve tile is over the exit or;
// - the solve tile is outside the bounds of the grid (and is thus inside the exit)
Common::Point pos = _pieces[0]._gridPos;
Common::Rect posRect(pos.x, pos.y, pos.x + _pieces[0]._w, pos.y + _pieces[0]._h);
- Common::Rect gridRect(_grid.size(), _grid[0].size());
+ int16 w = g_nancy->getGameType() <= kGameTypeNancy9 ? _grid.size() : _grid[0].size();
+ int16 h = g_nancy->getGameType() <= kGameTypeNancy9 ? _grid[0].size() : _grid.size();
+ Common::Rect gridRect(w, h);
if (!posRect.contains(_tileMoveExitPos) && gridRect.contains(pos)) {
return;
}
@@ -458,9 +490,9 @@ Common::Point CollisionPuzzle::movePiece(uint pieceID, WallType direction) {
Common::Rect compareRect(newPos.x, newPos.y, newPos.x + _pieces[pieceID]._w, newPos.y + _pieces[pieceID]._h);
if (compareRect.contains(_tileMoveExitPos)) {
if (horizontal && (_tileMoveExitPos.x == 0 || _tileMoveExitPos.x == (int)_grid[0].size() - 1)) {
- newPos.x += inc * _tileMoveExitSize;
+ newPos.x += inc * _tileMoveExitIndex;
} else if (!horizontal && (_tileMoveExitPos.y == 0 || _tileMoveExitPos.y == (int)_grid.size() - 1)) {
- newPos.y += inc * _tileMoveExitSize;
+ newPos.y += inc * _tileMoveExitIndex;
}
}
}
diff --git a/engines/nancy/action/puzzle/collisionpuzzle.h b/engines/nancy/action/puzzle/collisionpuzzle.h
index 034d0566d61..ab8c29638fe 100644
--- a/engines/nancy/action/puzzle/collisionpuzzle.h
+++ b/engines/nancy/action/puzzle/collisionpuzzle.h
@@ -88,7 +88,7 @@ protected:
Common::Rect _blockSrc;
Common::Point _tileMoveExitPos = Common::Point(-1, -1);
- uint _tileMoveExitSize = 0;
+ uint _tileMoveExitIndex = 0;
bool _usesExitButton = false;
Common::Rect _exitButtonSrc;
Commit: 50d6f13a1d87666cf76af16541203bc35ad73078
https://github.com/scummvm/scummvm/commit/50d6f13a1d87666cf76af16541203bc35ad73078
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-06-10T03:55:11+03:00
Commit Message:
NANCY: Add a temporary hack for character availability in Nancy10
Character checks are currently not being handled correctly in
secondary videos in Nancy10. Adding a temporary hack and TODO for
now, till we figure out what's missing.
Changed paths:
engines/nancy/action/secondaryvideo.cpp
diff --git a/engines/nancy/action/secondaryvideo.cpp b/engines/nancy/action/secondaryvideo.cpp
index 407bbc787e9..ff51376a40d 100644
--- a/engines/nancy/action/secondaryvideo.cpp
+++ b/engines/nancy/action/secondaryvideo.cpp
@@ -241,6 +241,18 @@ void PlaySecondaryVideo::execute() {
_currentViewportFrame = -1;
}
+ // HACK: Checks for character availability in Nancy10. These are
+ // currently not handled correctly, so we hardcode them here at the moment.
+ // TODO: Find out why these are not handled correctly and implement a
+ // proper solution for them.
+ if (g_nancy->getGameType() == kGameTypeNancy10) {
+ uint16 sceneId = NancySceneState.getSceneInfo().sceneID;
+ if ((sceneId == 2307 && NancySceneState.getEventFlag(556, g_nancy->_false)) || // EV_ST_Available
+ (sceneId == 2605 && NancySceneState.getEventFlag(588, g_nancy->_false)) || // EV_TB_Available
+ (sceneId == 2915 && NancySceneState.getEventFlag(156, g_nancy->_false))) // EV_DG_Available
+ _currentViewportFrame = -1;
+ }
+
if (_currentViewportFrame != -1) {
if (!_isInFrame) {
_decoder.start();
Commit: 5bbbcc20b67ae98bcac6b8cbc389e3445b077230
https://github.com/scummvm/scummvm/commit/5bbbcc20b67ae98bcac6b8cbc389e3445b077230
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-06-10T03:55:12+03:00
Commit Message:
NANCY: Set the event flag after meeting Dave in the cellar in Nancy10
The event flag for meeting Dave in the Cellar is not set correctly in
Nancy 10, so we hardcode the flag change to avoid talking with him over
and over again. This is a temporary hack with an associated TODO for
now, till we figure out what's missing.
Changed paths:
engines/nancy/state/scene.cpp
diff --git a/engines/nancy/state/scene.cpp b/engines/nancy/state/scene.cpp
index f3f856c11ce..808785d48a7 100644
--- a/engines/nancy/state/scene.cpp
+++ b/engines/nancy/state/scene.cpp
@@ -250,6 +250,14 @@ void Scene::changeScene(const SceneChangeDescription &sceneDescription) {
return;
}
+ // HACK: The event flag for meeting Dave in the cellar is not set
+ // correctly in Nancy 10, so we hardcode the flag change here to
+ // avoid talking with him over and over again.
+ // TODO: Find out why this flag is not set correctly and implement a
+ // proper solution for it.
+ if (g_nancy->getGameType() == kGameTypeNancy10 && sceneDescription.sceneID == 3996)
+ NancySceneState.setEventFlag(314, g_nancy->_true); // EV_Met_DG_Cellar
+
_sceneState.nextScene = sceneDescription;
_state = kLoad;
}
Commit: 06811cb9b6b368fa1ff789ea19e01e1775caa04f
https://github.com/scummvm/scummvm/commit/06811cb9b6b368fa1ff789ea19e01e1775caa04f
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-06-10T03:55:14+03:00
Commit Message:
NANCY: Implement some of the changes to multibuildpuzzle for Nancy10
Partially fixes the cake mixing puzzle in Nancy10, although there's
still work to be done
Changed paths:
engines/nancy/action/puzzle/multibuildpuzzle.cpp
engines/nancy/action/puzzle/multibuildpuzzle.h
diff --git a/engines/nancy/action/puzzle/multibuildpuzzle.cpp b/engines/nancy/action/puzzle/multibuildpuzzle.cpp
index 88ec7581676..91a03ab0300 100644
--- a/engines/nancy/action/puzzle/multibuildpuzzle.cpp
+++ b/engines/nancy/action/puzzle/multibuildpuzzle.cpp
@@ -86,6 +86,8 @@ void MultiBuildPuzzle::registerGraphics() {
}
void MultiBuildPuzzle::readData(Common::SeekableReadStream &stream) {
+ const bool isNancy10 = g_nancy->getGameType() >= kGameTypeNancy10;
+
readFilename(stream, _primaryImageName);
Common::String secName;
@@ -93,6 +95,10 @@ void MultiBuildPuzzle::readData(Common::SeekableReadStream &stream) {
_closeupImageName = Common::Path(secName);
_hasCloseupImage = (secName != "NO_FILE" && !secName.empty());
+ if (isNancy10) {
+ _retainState = stream.readByte() != 0; // TODO: state isn't saved yet
+ }
+
_numPieces = stream.readUint16LE();
_requiredPieces = stream.readUint16LE();
@@ -108,23 +114,48 @@ void MultiBuildPuzzle::readData(Common::SeekableReadStream &stream) {
_allowAltZoneSnap = stream.readByte() != 0;
_checkOverlapOnDrop = stream.readByte() != 0;
+ if (isNancy10) {
+ // Completion-animation block: image name + sprite-sheet rect + 4 layout
+ // shorts (cols, framesPerStep, spacing, totalRows). TODO: not wired up.
+ Common::String animName;
+ readFilename(stream, animName);
+ _animImageName = Common::Path(animName);
+ _hasAnimImage = (animName != "NO_FILE" && !animName.empty());
+ readRect(stream, _animRect);
+ for (uint i = 0; i < 4; ++i)
+ _animLayout[i] = stream.readSint16LE();
+ }
+
// Pieces: data file always has 20 Ã 67-byte slots; only _numPieces are used.
// Reserve up-front so counter-spawn push_back doesn't reallocate (pieces are
// RenderObjects already registered with the graphics manager).
+ // In Nancy 10, the pieces have been bumped up to 83.
_pieces.reserve(80);
_pieces.resize(_numPieces);
for (uint i = 0; i < 20; ++i) {
if (i < _numPieces) {
Piece &p = _pieces[i];
- readRect(stream, p.srcRect);
- readRect(stream, p.homeRect);
- readRect(stream, p.altSrcRect);
- readRect(stream, p.cuSrcRect);
- p.counterByte = stream.readByte();
- p.mustPlace = stream.readByte();
- p.mustNotPlace = stream.readByte();
+ if (isNancy10) {
+ stream.skip(16); // TODO: leading reserved rect, empty in cake puzzle.
+ readRect(stream, p.srcRect);
+ readRect(stream, p.altSrcRect);
+ readRect(stream, p.cuSrcRect);
+ readRect(stream, p.placedDstRect);
+ p.counterByte = stream.readByte();
+ p.mustPlace = stream.readByte();
+ p.mustNotPlace = stream.readByte();
+ p.homeRect = p.srcRect;
+ } else {
+ readRect(stream, p.srcRect);
+ readRect(stream, p.homeRect);
+ readRect(stream, p.altSrcRect);
+ readRect(stream, p.cuSrcRect);
+ p.counterByte = stream.readByte();
+ p.mustPlace = stream.readByte();
+ p.mustNotPlace = stream.readByte();
+ }
} else {
- stream.skip(67);
+ stream.skip(isNancy10 ? 83 : 67);
}
}
@@ -132,6 +163,12 @@ void MultiBuildPuzzle::readData(Common::SeekableReadStream &stream) {
_pickupSound.readNormal(stream);
_dropSound.readNormal(stream);
+ if (isNancy10) {
+ _animSound.readNormal(stream);
+ stream.skip(7 * 33); // TODO: 7 unknown strings
+ stream.skip(2); // TODO: 4th cursor id at the front of the block; role TBD.
+ }
+
_dragCursorID = stream.readSint16LE();
_exitCursorID1 = stream.readSint16LE();
_exitCursorID2 = stream.readSint16LE();
@@ -369,6 +406,16 @@ void MultiBuildPuzzle::handleInput(NancyInput &input) {
if (!viewData)
return;
Common::Rect vpScreen = viewData->screenPosition;
+
+ // Exit hotspots are checked against full-screen coords, so they work even
+ // when the cursor strays below the viewport (cake mixing's bottom-edge
+ // exit at y=340 sits outside the viewport in Nancy 10).
+ if (!_isDragging && _selectedPiece == -1 && !vpScreen.contains(input.mousePos)) {
+ if (!checkExitHotspot(_exitHotspot, _exitCursorID1, input))
+ checkExitHotspot(_exitHotspot2, _exitCursorID2, input);
+ return;
+ }
+
if (!vpScreen.contains(input.mousePos))
return;
@@ -622,6 +669,20 @@ void MultiBuildPuzzle::updatePieceRender(int pieceIdx) {
bool isSelected = (!_isDragging && pieceIdx == _selectedPiece);
bool isDragging = (_isDragging && pieceIdx == _pickedUpPiece);
+ // Nancy 10: at-rest pieces are already painted into the primary scene
+ // overlay at their home positions, so the engine doesn't draw them.
+ // Hide the placed piece too when a completion-animation overlay handles
+ // the visual (cake mixing).
+ if (g_nancy->getGameType() >= kGameTypeNancy10 && !isDragging && !isSelected) {
+ if (!p.isPlaced || _hasAnimImage) {
+ p.setVisible(false);
+ p.moveTo(p.gameRect);
+ return;
+ }
+ }
+
+ p.setVisible(true);
+
if (p.isPlaced || isDragging) {
// Placed or being dragged: show rotation sprite.
int rot = p.curRotation;
diff --git a/engines/nancy/action/puzzle/multibuildpuzzle.h b/engines/nancy/action/puzzle/multibuildpuzzle.h
index 0a3b755982d..df8e5b7a686 100644
--- a/engines/nancy/action/puzzle/multibuildpuzzle.h
+++ b/engines/nancy/action/puzzle/multibuildpuzzle.h
@@ -64,6 +64,7 @@ protected:
Common::Rect homeRect; // Slot position in viewport coords
Common::Rect altSrcRect; // If non-empty: used as source for sprite creation
Common::Rect cuSrcRect; // Source in closeup image
+ Common::Rect placedDstRect; // Nancy 10: placement destination on screen
uint8 counterByte = 0; // Non-zero: respawns on placement; doesn't count toward solve
uint8 mustPlace = 0; // Must be placed for solution
uint8 mustNotPlace = 0; // Placing this fails the solution check
@@ -85,6 +86,14 @@ protected:
Common::Path _closeupImageName;
bool _hasCloseupImage = false;
+ // Nancy 10 additions
+ bool _retainState = false; // TODO: state-persistence not yet wired up
+ Common::Path _animImageName; // Completion animation sprite sheet
+ bool _hasAnimImage = false;
+ Common::Rect _animRect;
+ int16 _animLayout[4] = {}; // cols / framesPerStep / spacing / totalRows
+ SoundDescription _animSound; // Sound played during the animation
+
uint16 _numPieces = 0;
uint16 _requiredPieces = 0; // Minimum placed pieces (counterByte==0) for solve check
bool _autoSolveOnDrop = false; // If true, solve check fires after each drop
Commit: 3233cdadc6733e8023767b3219e91c055def270d
https://github.com/scummvm/scummvm/commit/3233cdadc6733e8023767b3219e91c055def270d
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2026-06-10T03:55:15+03:00
Commit Message:
NANCY: Implement event flag handling for scene hotspots in Nancy10+
Changed paths:
engines/nancy/action/datarecords.cpp
diff --git a/engines/nancy/action/datarecords.cpp b/engines/nancy/action/datarecords.cpp
index 0f6bf6bcd68..500ab2797af 100644
--- a/engines/nancy/action/datarecords.cpp
+++ b/engines/nancy/action/datarecords.cpp
@@ -387,14 +387,18 @@ void EventFlagsMultiHS::execute() {
break;
case kActionTrigger:
- if (_hoverCursor != CursorManager::kCustom1 && _hoverCursor != CursorManager::kCustom2) {
+ // Swallow clicks if the cursor is in the puzzle-drag range
+ if (g_nancy->getGameType() <= kGameTypeNancy9 && (_hoverCursor == CursorManager::kCustom1 || _hoverCursor == CursorManager::kCustom2)) {
+ _state = kRun;
+ } else if (g_nancy->getGameType() >= kGameTypeNancy10 && (int)_hoverCursor >= 35) {
+ _state = kRun;
+ } else {
_hasHotspot = false;
EventFlags::execute();
finishExecution();
- break;
- } else {
- _state = kRun;
}
+
+ break;
}
}
More information about the Scummvm-git-logs
mailing list