aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2016-01-09 18:34:43 +1100
committerPaul Gilbert2016-01-09 18:34:43 +1100
commit2b1f7d6ebc6b272b7f91c7f89149a19fbb22f143 (patch)
tree095fee049d7735aeaa4301f7cc3eb69e4d4911d2
parentb3e81dba14cfc0ae3fb07dc43a3aaf84eb4d4570 (diff)
downloadscummvm-rg350-2b1f7d6ebc6b272b7f91c7f89149a19fbb22f143.tar.gz
scummvm-rg350-2b1f7d6ebc6b272b7f91c7f89149a19fbb22f143.tar.bz2
scummvm-rg350-2b1f7d6ebc6b272b7f91c7f89149a19fbb22f143.zip
MADS: Hook up calls to conversation update where necessary
-rw-r--r--engines/mads/conversations.cpp2
-rw-r--r--engines/mads/conversations.h7
-rw-r--r--engines/mads/scene.cpp23
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() {