diff options
Diffstat (limited to 'engines/tsage/core.cpp')
-rw-r--r-- | engines/tsage/core.cpp | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp index f7fbb1daa1..488eacceab 100644 --- a/engines/tsage/core.cpp +++ b/engines/tsage/core.cpp @@ -2482,7 +2482,8 @@ void SceneObject::postInit(SceneObjectList *OwnerList) { if (!OwnerList) OwnerList = g_globals->_sceneObjects; - if (!OwnerList->contains(this) || ((_flags & OBJFLAG_REMOVE) != 0)) { + bool isExisting = OwnerList->contains(this); + if (!isExisting || ((_flags & OBJFLAG_REMOVE) != 0)) { _percent = 100; _priority = 255; _flags = OBJFLAG_ZOOMED; @@ -2501,7 +2502,8 @@ void SceneObject::postInit(SceneObjectList *OwnerList) { _numFrames = 10; _regionBitList = 0; - OwnerList->push_back(this); + if (!isExisting) + OwnerList->push_back(this); _flags |= OBJFLAG_PANES; } } @@ -3322,20 +3324,24 @@ void Player::postInit(SceneObjectList *OwnerList) { void Player::disableControl() { _canWalk = false; - _uiEnabled = false; g_globals->_events.setCursor(CURSOR_NONE); _enabled = false; - if ((g_vm->getGameID() != GType_Ringworld) && T2_GLOBALS._uiElements._active) - T2_GLOBALS._uiElements.hide(); + if (g_vm->getGameID() != GType_Ringworld2) { + _uiEnabled = false; + + if ((g_vm->getGameID() != GType_Ringworld) && T2_GLOBALS._uiElements._active) + T2_GLOBALS._uiElements.hide(); + } } void Player::enableControl() { CursorType cursor; _canWalk = true; - _uiEnabled = true; _enabled = true; + if (g_vm->getGameID() != GType_Ringworld2) + _uiEnabled = true; switch (g_vm->getGameID()) { case GType_BlueForce: @@ -3343,7 +3349,7 @@ void Player::enableControl() { cursor = g_globals->_events.getCursor(); g_globals->_events.setCursor(cursor); - if (T2_GLOBALS._uiElements._active) + if (g_vm->getGameID() == GType_BlueForce && T2_GLOBALS._uiElements._active) T2_GLOBALS._uiElements.show(); break; @@ -4253,11 +4259,11 @@ void SceneHandler::process(Event &event) { g_vm->_debugger->onFrame(); } - if ((event.eventType == EVENT_KEYPRESS) && g_globals->_player._enabled && g_globals->_player._canWalk) { + if ((event.eventType == EVENT_KEYPRESS) && g_globals->_player._enabled) { // Keyboard shortcuts for different actions switch (event.kbd.keycode) { case Common::KEYCODE_w: - g_globals->_events.setCursor(CURSOR_WALK); + g_globals->_events.setCursor(GLOBALS._player._canWalk ? CURSOR_WALK : CURSOR_USE); event.handled = true; break; case Common::KEYCODE_l: |