diff --git a/engines/kyra/kyra_hof.cpp b/engines/kyra/kyra_hof.cpp index 5c471a8c8b7..49b1d17d73b 100644 --- a/engines/kyra/kyra_hof.cpp +++ b/engines/kyra/kyra_hof.cpp @@ -504,6 +504,11 @@ void KyraEngine_HoF::runLoop() { int inputFlag = checkInput(_buttonList, true); removeInputTop(); + if (_updateHandItemCursor) { + _updateHandItemCursor = false; + setHandItem(_itemInHand); + } + update(); if (inputFlag == 198 || inputFlag == 199) { diff --git a/engines/kyra/kyra_lok.cpp b/engines/kyra/kyra_lok.cpp index d46fc2d5029..4468a53a948 100644 --- a/engines/kyra/kyra_lok.cpp +++ b/engines/kyra/kyra_lok.cpp @@ -819,6 +819,11 @@ void KyraEngine_LoK::updateMousePointer(bool forceUpdate) { newY = 4; } + if (_updateHandItemCursor) { + _updateHandItemCursor = false; + setHandItem(_itemInHand); + } + if ((newMouseState && _mouseState != newMouseState) || (newMouseState && forceUpdate)) { _mouseState = newMouseState; _screen->hideMouse(); diff --git a/engines/kyra/kyra_mr.cpp b/engines/kyra/kyra_mr.cpp index a6b99fffbf8..461ed26710b 100644 --- a/engines/kyra/kyra_mr.cpp +++ b/engines/kyra/kyra_mr.cpp @@ -966,6 +966,11 @@ void KyraEngine_MR::runLoop() { int inputFlag = checkInput(_mainButtonList, true); removeInputTop(); + if (_updateHandItemCursor) { + _updateHandItemCursor = false; + setHandItem(_itemInHand); + } + update(); _timer->update(); diff --git a/engines/kyra/kyra_v1.cpp b/engines/kyra/kyra_v1.cpp index f5b96410e85..fec37dccc96 100644 --- a/engines/kyra/kyra_v1.cpp +++ b/engines/kyra/kyra_v1.cpp @@ -65,6 +65,7 @@ KyraEngine_v1::KyraEngine_v1(OSystem *system, const GameFlags &flags) _gameToLoad = -1; _mouseState = -1; + _updateHandItemCursor = false; _deathHandler = -1; memset(_flagsTable, 0, sizeof(_flagsTable)); diff --git a/engines/kyra/kyra_v1.h b/engines/kyra/kyra_v1.h index 12b9fb59421..cf51774b0f0 100644 --- a/engines/kyra/kyra_v1.h +++ b/engines/kyra/kyra_v1.h @@ -343,6 +343,9 @@ protected: virtual void setHandItem(Item item) = 0; virtual void removeHandItem() = 0; + void setDelayedCursorUpdate() { _updateHandItemCursor = true; } + bool _updateHandItemCursor; + // game flags uint8 _flagsTable[100]; // TODO: check this value diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp index 36bc0c99d7a..63a36e33878 100644 --- a/engines/kyra/lol.cpp +++ b/engines/kyra/lol.cpp @@ -931,6 +931,11 @@ void LoLEngine::runLoop() { checkFloatingPointerRegions(); gui_updateInput(); + if (_updateHandItemCursor) { + _updateHandItemCursor = false; + setHandItem(_itemInHand); + } + update(); if (_sceneUpdateRequired) diff --git a/engines/kyra/saveload_hof.cpp b/engines/kyra/saveload_hof.cpp index ced103b7e3a..7a487dcf7b3 100644 --- a/engines/kyra/saveload_hof.cpp +++ b/engines/kyra/saveload_hof.cpp @@ -311,7 +311,7 @@ Common::Error KyraEngine_HoF::loadGameState(int slot) { _mainCharacter.facing = 4; enterNewScene(_mainCharacter.sceneId, _mainCharacter.facing, 0, 0, 1); - setHandItem(_itemInHand); + setDelayedCursorUpdate(); if (_lastMusicCommand >= 0 && !_unkSceneScreenFlag1) snd_playWanderScoreViaMap(_lastMusicCommand, 1); diff --git a/engines/kyra/saveload_lok.cpp b/engines/kyra/saveload_lok.cpp index 3e11d3dad3e..012ff138b57 100644 --- a/engines/kyra/saveload_lok.cpp +++ b/engines/kyra/saveload_lok.cpp @@ -176,7 +176,7 @@ Common::Error KyraEngine_LoK::loadGameState(int slot) { _screen->copyRegion(8, 8, 8, 8, 304, 212, 10, 0); } - setHandItem(_itemInHand); + setDelayedCursorUpdate(); // Will-O-Wisp uses a different shape size than Brandon's usual // shape, thus we need to setup the correct size depending on diff --git a/engines/kyra/saveload_lol.cpp b/engines/kyra/saveload_lol.cpp index ee4fbf4dc17..b6c0693a164 100644 --- a/engines/kyra/saveload_lol.cpp +++ b/engines/kyra/saveload_lol.cpp @@ -263,7 +263,7 @@ Common::Error LoLEngine::loadGameState(int slot) { int t = _credits; _credits = 0; giveCredits(t, 0); - setHandItem(_itemInHand); + setDelayedCursorUpdate(); loadLevel(_currentLevel); gui_drawPlayField(); timerSpecialCharacterUpdate(0); diff --git a/engines/kyra/saveload_mr.cpp b/engines/kyra/saveload_mr.cpp index 7c583f95ee9..a5e9b9e0f59 100644 --- a/engines/kyra/saveload_mr.cpp +++ b/engines/kyra/saveload_mr.cpp @@ -308,7 +308,7 @@ Common::Error KyraEngine_MR::loadGameState(int slot) { _goodConsciencePosition = false; enterNewScene(_mainCharacter.sceneId, _mainCharacter.facing, 0, 0, 1); - setHandItem(_itemInHand); + setDelayedCursorUpdate(); if (_lastMusicCommand >= 0 && !_unkSceneScreenFlag1) snd_playWanderScoreViaMap(_lastMusicCommand, 1);