diff --git a/engines/saga/animation.cpp b/engines/saga/animation.cpp index 00abc02d86e..7de88abc7a9 100644 --- a/engines/saga/animation.cpp +++ b/engines/saga/animation.cpp @@ -312,12 +312,13 @@ void Anim::clearCutaway(void) { _vm->_interface->restoreMode(); if (_vm->getGameId() != GID_IHNM_DEMO) { - if (_vm->_scene->currentSceneNumber() >= 144 && _vm->_scene->currentSceneNumber() <= 149) { + _vm->_gfx->showCursor(true); + } else { + if (_vm->_scene->isNonInteractiveIHNMDemoPart()) { // Don't show the mouse cursor in the non-interactive part of the IHNM demo } else { _vm->_gfx->showCursor(true); } - } else { // Enable the save reminder state after each cutaway for the IHNM demo _vm->_interface->setSaveReminderState(true); } diff --git a/engines/saga/gfx.cpp b/engines/saga/gfx.cpp index 7aec6a05ce1..31e730d8d25 100644 --- a/engines/saga/gfx.cpp +++ b/engines/saga/gfx.cpp @@ -462,6 +462,10 @@ void Gfx::palFade(PalEntry *srcPal, int16 from, int16 to, int16 start, int16 num } void Gfx::showCursor(bool state) { + // Don't show the mouse cursor in the non-interactive part of the IHNM demo + if (_vm->_scene->isNonInteractiveIHNMDemoPart()) + state = false; + CursorMan.showMouse(state); } diff --git a/engines/saga/interface.cpp b/engines/saga/interface.cpp index 23c590765ef..4ed1c696499 100644 --- a/engines/saga/interface.cpp +++ b/engines/saga/interface.cpp @@ -351,15 +351,6 @@ int Interface::activate() { draw(); } - if (_vm->getGameId() != GID_IHNM_DEMO) { - _vm->_gfx->showCursor(true); - } else { - if (_vm->_scene->currentSceneNumber() >= 144 && _vm->_scene->currentSceneNumber() <= 149) { - // Don't show the mouse cursor in the non-interactive part of the IHNM demo - } else { - _vm->_gfx->showCursor(true); - } - } return SUCCESS; } @@ -406,9 +397,6 @@ void Interface::setMode(int mode) { if (_vm->getGameId() == GID_IHNM_DEMO) { _inMainMode = true; _saveReminderState = 1; - if ((_vm->_scene->currentSceneNumber() >= 144 && _vm->_scene->currentSceneNumber() <= 149) || - _vm->_scene->currentSceneNumber() == 0 || _vm->_scene->currentSceneNumber() == -1) - _vm->_gfx->showCursor(false); } } else if (mode == kPanelOption) { // Show the cursor in the IHNM demo @@ -512,10 +500,8 @@ bool Interface::processAscii(uint16 ascii) { return true; } - if (_vm->getGameId() == GID_IHNM_DEMO) { - if (_vm->_scene->currentSceneNumber() >= 144 && _vm->_scene->currentSceneNumber() <= 149) - _vm->_scene->showIHNMDemoSpecialScreen(); - } + if (_vm->_scene->isNonInteractiveIHNMDemoPart()) + _vm->_scene->showIHNMDemoSpecialScreen(); break; case kPanelCutaway: if (ascii == 27) { // Esc @@ -525,10 +511,8 @@ bool Interface::processAscii(uint16 ascii) { return true; } - if (_vm->getGameId() == GID_IHNM_DEMO) { - if (_vm->_scene->currentSceneNumber() >= 144 && _vm->_scene->currentSceneNumber() <= 149) - _vm->_scene->showIHNMDemoSpecialScreen(); - } + if (_vm->_scene->isNonInteractiveIHNMDemoPart()) + _vm->_scene->showIHNMDemoSpecialScreen(); break; case kPanelVideo: if (ascii == 27) { // Esc @@ -542,10 +526,8 @@ bool Interface::processAscii(uint16 ascii) { return true; } - if (_vm->getGameId() == GID_IHNM_DEMO) { - if (_vm->_scene->currentSceneNumber() >= 144 && _vm->_scene->currentSceneNumber() <= 149) - _vm->_scene->showIHNMDemoSpecialScreen(); - } + if (_vm->_scene->isNonInteractiveIHNMDemoPart()) + _vm->_scene->showIHNMDemoSpecialScreen(); break; case kPanelOption: // TODO: check input dialog keys @@ -1553,11 +1535,8 @@ void Interface::setOption(PanelButton *panelButton) { } else { if (_vm->_scene->currentChapterNumber() == 8) { setMode(kPanelChapterSelection); - } else if (_vm->getGameId() == GID_IHNM_DEMO) { - if (_vm->_scene->currentSceneNumber() >= 144 && _vm->_scene->currentSceneNumber() <= 149) - setMode(kPanelNull); - else - setMode(kPanelMain); + } else if (_vm->_scene->isNonInteractiveIHNMDemoPart()) { + setMode(kPanelNull); } else { setMode(kPanelMain); } @@ -1577,11 +1556,9 @@ void Interface::setOption(PanelButton *panelButton) { } break; case kTextSave: - // Disallow saving in the non-interactive part of the IHNM demo - if (_vm->getGameId() == GID_IHNM_DEMO) { - if (_vm->_scene->currentSceneNumber() >= 144 && _vm->_scene->currentSceneNumber() <= 149) - return; - } + // Disallow saving in the non-interactive part of the IHNM demo (original demo didn't support saving at all) + if (_vm->_scene->isNonInteractiveIHNMDemoPart()) + return; if (!_vm->isSaveListFull() && (_optionSaveFileTitleNumber == 0)) { _textInputString[0] = 0; @@ -1800,10 +1777,8 @@ void Interface::update(const Point& mousePoint, int updateFlag) { break; case kPanelNull: - if (_vm->getGameId() == GID_IHNM_DEMO && (updateFlag & UPDATE_MOUSECLICK)) { - if (_vm->_scene->currentSceneNumber() >= 144 && _vm->_scene->currentSceneNumber() <= 149) - _vm->_scene->showIHNMDemoSpecialScreen(); - } + if (_vm->_scene->isNonInteractiveIHNMDemoPart() && (updateFlag & UPDATE_MOUSECLICK)) + _vm->_scene->showIHNMDemoSpecialScreen(); break; } diff --git a/engines/saga/scene.cpp b/engines/saga/scene.cpp index 5ab7fbb4a57..3076fa26cf9 100644 --- a/engines/saga/scene.cpp +++ b/engines/saga/scene.cpp @@ -655,7 +655,7 @@ void Scene::loadScene(LoadSceneParams *loadSceneParams) { debug(3, "Loading scene number %d:", _sceneNumber); - if (_vm->getGameId() == GID_IHNM_DEMO && (_sceneNumber >= 144 && _sceneNumber <= 149)) { + if (isNonInteractiveIHNMDemoPart()) { // WORKAROUND for the non-interactive part of the IHNM demo: When restarting the // non-interactive demo, opcode sfMainMode is incorrectly called. Therefore, if any // of the scenes of the non-interactive demo are loaded (scenes 144-149), set panel diff --git a/engines/saga/scene.h b/engines/saga/scene.h index da97bddff55..47abfcb9590 100644 --- a/engines/saga/scene.h +++ b/engines/saga/scene.h @@ -345,6 +345,10 @@ class Scene { void clearPsychicProfile(); void showIHNMDemoSpecialScreen(); + bool isNonInteractiveIHNMDemoPart() { + return _vm->getGameId() == GID_IHNM_DEMO && (_sceneNumber >= 144 && _sceneNumber <= 149); + } + private: void loadScene(LoadSceneParams *loadSceneParams); void loadSceneDescriptor(uint32 resourceId);