diff options
-rw-r--r-- | engines/kyra/kyra_hof.cpp | 8 | ||||
-rw-r--r-- | engines/kyra/kyra_lok.cpp | 8 | ||||
-rw-r--r-- | engines/kyra/kyra_mr.cpp | 8 | ||||
-rw-r--r-- | engines/kyra/kyra_v1.cpp | 1 | ||||
-rw-r--r-- | engines/kyra/kyra_v1.h | 3 | ||||
-rw-r--r-- | engines/kyra/lol.cpp | 8 | ||||
-rw-r--r-- | engines/kyra/saveload_hof.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/saveload_lok.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/saveload_lol.cpp | 2 | ||||
-rw-r--r-- | engines/kyra/saveload_mr.cpp | 2 |
10 files changed, 40 insertions, 4 deletions
diff --git a/engines/kyra/kyra_hof.cpp b/engines/kyra/kyra_hof.cpp index 5c471a8c8b..990e55bcf2 100644 --- a/engines/kyra/kyra_hof.cpp +++ b/engines/kyra/kyra_hof.cpp @@ -504,6 +504,14 @@ void KyraEngine_HoF::runLoop() { int inputFlag = checkInput(_buttonList, true); removeInputTop(); + if (_updateHandItemCursor) { + // This works around an issue which would occur when setHandItem(_itemInHand) + // was called from inside loadGameState(). When loading via GMM the + // mouse cursor would not be set correctly. + _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 d46fc2d502..7526216066 100644 --- a/engines/kyra/kyra_lok.cpp +++ b/engines/kyra/kyra_lok.cpp @@ -819,6 +819,14 @@ void KyraEngine_LoK::updateMousePointer(bool forceUpdate) { newY = 4; } + if (_updateHandItemCursor) { + // This works around an issue which would occur when setHandItem(_itemInHand) + // was called from inside loadGameState(). When loading via GMM the + // mouse cursor would not be set correctly. + _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 a6b99fffbf..b863ef5725 100644 --- a/engines/kyra/kyra_mr.cpp +++ b/engines/kyra/kyra_mr.cpp @@ -966,6 +966,14 @@ void KyraEngine_MR::runLoop() { int inputFlag = checkInput(_mainButtonList, true); removeInputTop(); + if (_updateHandItemCursor) { + // This works around an issue which would occur when setHandItem(_itemInHand) + // was called from inside loadGameState(). When loading via GMM the + // mouse cursor would not be set correctly. + _updateHandItemCursor = false; + setHandItem(_itemInHand); + } + update(); _timer->update(); diff --git a/engines/kyra/kyra_v1.cpp b/engines/kyra/kyra_v1.cpp index f5b96410e8..fec37dccc9 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 12b9fb5942..cf51774b0f 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 36bc0c99d7..7003d8c38f 100644 --- a/engines/kyra/lol.cpp +++ b/engines/kyra/lol.cpp @@ -931,6 +931,14 @@ void LoLEngine::runLoop() { checkFloatingPointerRegions(); gui_updateInput(); + if (_updateHandItemCursor) { + // This works around an issue which would occur when setHandItem(_itemInHand) + // was called from inside loadGameState(). When loading via GMM the + // mouse cursor would not be set correctly. + _updateHandItemCursor = false; + setHandItem(_itemInHand); + } + update(); if (_sceneUpdateRequired) diff --git a/engines/kyra/saveload_hof.cpp b/engines/kyra/saveload_hof.cpp index ced103b7e3..7a487dcf7b 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 3e11d3dad3..012ff138b5 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 ee4fbf4dc1..b6c0693a16 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 7c583f95ee..a5e9b9e0f5 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); |