From 2b1f7d6ebc6b272b7f91c7f89149a19fbb22f143 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 9 Jan 2016 18:34:43 +1100 Subject: MADS: Hook up calls to conversation update where necessary --- engines/mads/conversations.cpp | 2 +- engines/mads/conversations.h | 7 ++++++- engines/mads/scene.cpp | 23 ++++++++++++++++++++++- 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/engines/mads/conversations.cpp b/engines/mads/conversations.cpp index 5077abdc6a..95c088a98f 100644 --- a/engines/mads/conversations.cpp +++ b/engines/mads/conversations.cpp @@ -277,7 +277,7 @@ void GameConversations::reset(int id) { warning("TODO: GameConversations::reset"); } -void GameConversations::update(bool isRelease) { +void GameConversations::update(bool flag) { warning("TODO: GameConversations::update"); } diff --git a/engines/mads/conversations.h b/engines/mads/conversations.h index b62f4fbf22..e3e958ebc4 100644 --- a/engines/mads/conversations.h +++ b/engines/mads/conversations.h @@ -312,7 +312,7 @@ public: /** * Handles updating the conversation display */ - void update(bool isRelease); + void update(bool flag); /** * Returns true if any conversation is currently atcive @@ -328,6 +328,11 @@ public: * Returns _restoreRunning value */ int restoreRunning() const { return _restoreRunning; } + + /** + * Returns the current conversation mode + */ + ConversationMode currentMode() const { return _currentMode; } }; } // End of namespace MADS diff --git a/engines/mads/scene.cpp b/engines/mads/scene.cpp index cbc15b9da8..83ab1151a9 100644 --- a/engines/mads/scene.cpp +++ b/engines/mads/scene.cpp @@ -419,14 +419,24 @@ void Scene::doFrame() { } if (_currentSceneId != _nextSceneId) { + _vm->_gameConv->stop(); _freeAnimationFlag = true; + // TODO: Handle Phantom/Dragonsphere animation list free } else { doSceneStep(); checkKeyboard(); if (_currentSceneId != _nextSceneId) { + _vm->_gameConv->stop(); _freeAnimationFlag = true; + // TODO: Handle Phantom/Dragonsphere animation list free } else { + // Handle conversation updates if one is active + if (!_vm->_game->_trigger && _vm->_gameConv->active() && + !_vm->_game->_camX._activeFl && !_vm->_game->_camY._activeFl) + _vm->_gameConv->update(false); + + // Update the player player.nextFrame(); // Cursor update code @@ -548,13 +558,20 @@ void Scene::doPreactions() { void Scene::doAction() { bool flag = false; + // Don't allow the player to move if a conversation is active + if (_vm->_gameConv->active()) { + _vm->_game->_scene._action._savedFields._lookFlag = false; + if (_vm->_gameConv->currentMode() == CONVMODE_2 || _vm->_gameConv->currentMode() == CONVMODE_3) + _vm->_game->_player._stepEnabled = false; + } + _vm->_game->_triggerSetupMode = SEQUENCE_TRIGGER_PARSER; if ((_action._inProgress || _vm->_game->_trigger) && !_action._savedFields._commandError) { _sceneLogic->actions(); flag = !_action._inProgress; } - if (_vm->_game->_screenObjects._inputMode == kInputConversation) { + if (_vm->_gameConv->active() || _vm->_game->_screenObjects._inputMode == kInputConversation) { _action._inProgress = false; } else { if ((_action._inProgress || _vm->_game->_trigger) || @@ -587,6 +604,10 @@ void Scene::doAction() { _action._inProgress = false; if (_vm->_game->_triggerMode == SEQUENCE_TRIGGER_PARSER) _vm->_game->_trigger = 0; + + if (_vm->_gameConv->active() && (_vm->_gameConv->currentMode() == CONVMODE_1 || + _vm->_gameConv->currentMode() == CONVMODE_2)) + _vm->_gameConv->update(true); } void Scene::doSceneStep() { -- cgit v1.2.3