diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/mads/action.cpp | 107 | ||||
-rw-r--r-- | engines/mads/action.h | 34 | ||||
-rw-r--r-- | engines/mads/game.cpp | 2 | ||||
-rw-r--r-- | engines/mads/hotspots.cpp | 6 | ||||
-rw-r--r-- | engines/mads/inventory.cpp | 9 | ||||
-rw-r--r-- | engines/mads/nebular/nebular_scenes2.cpp | 4 | ||||
-rw-r--r-- | engines/mads/nebular/nebular_scenes8.cpp | 2 | ||||
-rw-r--r-- | engines/mads/scene.cpp | 26 | ||||
-rw-r--r-- | engines/mads/screen.cpp | 6 | ||||
-rw-r--r-- | engines/mads/screen.h | 8 | ||||
-rw-r--r-- | engines/mads/user_interface.cpp | 24 | ||||
-rw-r--r-- | engines/mads/user_interface.h | 2 |
12 files changed, 125 insertions, 105 deletions
diff --git a/engines/mads/action.cpp b/engines/mads/action.cpp index 134d474e21..8ee46e2a39 100644 --- a/engines/mads/action.cpp +++ b/engines/mads/action.cpp @@ -35,28 +35,28 @@ MADSAction::MADSAction(MADSEngine *vm) : _vm(vm) { _selectedAction = 0; _inProgress = false; - _savedFields._actionMode = KERNEL_TRIGGER_PARSER; - _savedFields._actionMode2 = KERNEL_TRIGGER_PARSER; - _savedFields._selectedRow = -1; - _savedFields._hotspotId = 0; - _savedFields._v86F3A = 0; - _savedFields._v86F42 = 0; + _savedFields._commandSource = 0; + _savedFields._mainObjectSource = 0; + _savedFields._command = -1; + _savedFields._mainObject = 0; + _savedFields._secondObject = 0; + _savedFields._secondObjectSource = 0; _savedFields._articleNumber = 0; _savedFields._lookFlag = false; } void MADSAction::clear() { _interAwaiting = AWAITING_COMMAND; - _actionMode = ACTIONMODE_NONE; - _actionMode2 = ACTIONMODE2_0; - _v86F42 = 0; + _commandSource = ACTIONMODE_NONE; + _mainObjectSource = ACTIONMODE2_0; + _secondObjectSource = 0; _recentCommandSource = 0; _articleNumber = 0; _lookFlag = false; _v86F4A = 0; _selectedRow = -1; _hotspotId = -1; - _v86F3A = -1; + _secondObject = -1; _recentCommand = -1; _action._verbId = VERB_NONE; _action._objectNameId = -1; @@ -78,7 +78,7 @@ void MADSAction::checkCustomDest(int v) { Scene &scene = _vm->_game->_scene; Player &player = _vm->_game->_player; - if (_v86F4A && (v == -3 || _savedFields._selectedRow < 0)) { + if (_v86F4A && (v == -3 || _savedFields._command < 0)) { player._needToWalk = true; player._prepareWalkPos = scene._customDest; } @@ -94,7 +94,7 @@ void MADSAction::set() { _action._objectNameId = -1; _action._indirectObjectId = -1; - if (_actionMode == ACTIONMODE_TALK) { + if (_commandSource == ACTIONMODE_TALK) { // Handle showing the conversation selection. Rex at least doesn't actually seem to use this if (_selectedRow >= 0) { Common::String desc = userInterface._talkStrings[userInterface._talkIds[_selectedRow]]; @@ -105,7 +105,7 @@ void MADSAction::set() { // Two 'look' actions in succession, so the action becomes 'Look around' _statusText = kLookAroundStr; } else { - if ((_actionMode == ACTIONMODE_OBJECT) && (_selectedRow >= 0) && (_flags1 == 2) && (_flags2 == 0)) { + if ((_commandSource == ACTIONMODE_OBJECT) && (_selectedRow >= 0) && (_flags1 == 2) && (_flags2 == 0)) { // Use/to action int invIndex = userInterface._selectedInvIndex; InventoryObject &objEntry = _vm->_game->_objects.getItem(invIndex); @@ -121,7 +121,7 @@ void MADSAction::set() { } else { // Handling for if an action has been selected if (_selectedRow >= 0) { - if (_actionMode == ACTIONMODE_VERB) { + if (_commandSource == ACTIONMODE_VERB) { // Standard verb action _action._verbId = scene._verbList[_selectedRow]._id; } else { @@ -172,7 +172,7 @@ void MADSAction::set() { } } - if ((_actionMode2 == ACTIONMODE2_2) || (_actionMode2 == ACTIONMODE2_5)) { + if ((_mainObjectSource == ACTIONMODE2_2) || (_mainObjectSource == ACTIONMODE2_5)) { // Get name from given inventory object InventoryObject &invObject = _vm->_game->_objects.getItem(_hotspotId); _action._objectNameId = invObject._descId; @@ -189,13 +189,13 @@ void MADSAction::set() { if ((_hotspotId >= 0) && (_articleNumber > 0) && !flag) { if (_articleNumber == -1) { - if (_v86F3A >= 0) { + if (_secondObject >= 0) { int articleNum = 0; - if ((_v86F42 == 2) || (_v86F42 == 5)) { + if ((_secondObjectSource == 2) || (_secondObjectSource == 5)) { InventoryObject &invObject = _vm->_game->_objects.getItem(_hotspotId); articleNum = invObject._article; - } else if (_v86F3A < (int)scene._hotspots.size()) { + } else if (_secondObject < (int)scene._hotspots.size()) { articleNum = scene._hotspots[_hotspotId]._articleNumber; } else { articleNum = scene._hotspots[_hotspotId - scene._hotspots.size()]._articleNumber; @@ -217,7 +217,7 @@ void MADSAction::set() { } // Append object description if necessary - if (_v86F3A >= 0) + if (_secondObject >= 0) appendVocab(_action._indirectObjectId); // Remove any trailing space character @@ -242,7 +242,8 @@ void MADSAction::refresh() { } if (!_statusText.empty()) { - if ((_vm->_game->_screenObjects._v832EC == 0) || (_vm->_game->_screenObjects._v832EC == 2)) { + if ((_vm->_game->_screenObjects._inputMode == kInputBuildingSentences) || + (_vm->_game->_screenObjects._inputMode == kInputLimitedSentences)) { Font *font = _vm->_font->getFont(FONT_MAIN); int textSpacing = -1; @@ -273,14 +274,14 @@ void MADSAction::startAction() { player.cancelCommand(); _inProgress = true; - _v8453A = KERNEL_TRIGGER_PARSER; - _savedFields._selectedRow = _selectedRow; - _savedFields._hotspotId = _hotspotId; - _savedFields._v86F3A = _v86F3A; + _savedFields._commandError = false; + _savedFields._command = _selectedRow; + _savedFields._mainObject = _hotspotId; + _savedFields._secondObject = _secondObject; _savedFields._articleNumber = _articleNumber; - _savedFields._actionMode = _actionMode; - _savedFields._actionMode2 = _actionMode2; - _savedFields._v86F42 = _v86F42; + _savedFields._commandSource = _commandSource; + _savedFields._mainObjectSource = _mainObjectSource; + _savedFields._secondObjectSource = _secondObjectSource; _savedFields._lookFlag = _lookFlag; _activeAction = _action; @@ -288,17 +289,17 @@ void MADSAction::startAction() { _activeAction = _action; _sentence = _statusText; - if ((_actionMode2 == ACTIONMODE2_4) && (_v86F42 == 0)) - _v8453A = -1; + if ((_mainObjectSource == ACTIONMODE2_4) && (_secondObjectSource == 0)) + _savedFields._commandError = true; player._needToWalk = false; int hotspotId = -1; - if (!_savedFields._lookFlag && (_vm->_game->_screenObjects._v832EC != 1)) { - if (_savedFields._actionMode2 == ACTIONMODE2_4) - hotspotId = _savedFields._hotspotId; - else if (_v86F42 == 4) - hotspotId = _savedFields._v86F3A; + if (!_savedFields._lookFlag && (_vm->_game->_screenObjects._inputMode != kInputConversation)) { + if (_savedFields._mainObjectSource == ACTIONMODE2_4) + hotspotId = _savedFields._mainObject; + else if (_secondObjectSource == 4) + hotspotId = _savedFields._secondObject; if (hotspotId >= (int)hotspots.size()) { DynamicHotspot &hs = dynHotspots[hotspotId - hotspots.size()]; @@ -306,7 +307,7 @@ void MADSAction::startAction() { checkCustomDest(hs._feetPos.x); } else if (hs._feetPos.x == 0) { player._prepareWalkFacing = hs._facing; - } else if (_savedFields._actionMode == ACTIONMODE_NONE || hs._cursor >= CURSOR_WAIT) { + } else if (_savedFields._commandSource == ACTIONMODE_NONE || hs._cursor >= CURSOR_WAIT) { player._needToWalk = true; player._prepareWalkPos = hs._feetPos; } @@ -322,7 +323,7 @@ void MADSAction::startAction() { if (hs._feetPos.x == -1 || hs._feetPos.x != -3) { checkCustomDest(hs._feetPos.x); } else if (hs._feetPos.x >= 0) { - if (_savedFields._actionMode == ACTIONMODE_NONE || hs._cursor < CURSOR_WAIT) { + if (_savedFields._commandSource == ACTIONMODE_NONE || hs._cursor < CURSOR_WAIT) { player._needToWalk = true; player._prepareWalkPos = hs._feetPos; } @@ -353,7 +354,6 @@ bool MADSAction::isAction(int verbId, int objectNameId, int indirectObjectId) { void MADSAction::checkActionAtMousePos() { Scene &scene = _vm->_game->_scene; UserInterface &userInterface = scene._userInterface; - ScreenObjects &screenObjects = _vm->_game->_screenObjects; if ((userInterface._category == CAT_COMMAND || userInterface._category == CAT_INV_VOCAB) && _interAwaiting != AWAITING_COMMAND && _pickedWord >= 0) { @@ -377,20 +377,20 @@ void MADSAction::checkActionAtMousePos() { case CAT_INV_ANIM: if (_interAwaiting != AWAITING_THAT) { if (userInterface._selectedActionIndex >= 0) { - _actionMode = ACTIONMODE_VERB; + _commandSource = ACTIONMODE_VERB; _selectedRow = userInterface._selectedActionIndex; _flags1 = scene._verbList[_selectedRow]._action1; _flags2 = scene._verbList[_selectedRow]._action2; _interAwaiting = AWAITING_THIS; } else if (userInterface._selectedItemVocabIdx >= 0) { - _actionMode = ACTIONMODE_OBJECT; + _commandSource = ACTIONMODE_OBJECT; _selectedRow = userInterface._selectedItemVocabIdx; int objectId = _vm->_game->_objects._inventoryList[_selectedRow]; InventoryObject &invObject = _vm->_game->_objects[objectId]; _flags1 = invObject._vocabList[_selectedRow - 1]._actionFlags1; _flags2 = invObject._vocabList[_selectedRow - 1]._actionFlags2; - _actionMode2 = ACTIONMODE2_2; + _mainObjectSource = ACTIONMODE2_2; _hotspotId = userInterface._selectedInvIndex; _articleNumber = _flags2; @@ -409,7 +409,7 @@ void MADSAction::checkActionAtMousePos() { _articleNumber = 0; switch (userInterface._category) { case CAT_COMMAND: - _actionMode = ACTIONMODE_VERB; + _commandSource = ACTIONMODE_VERB; _selectedRow = _pickedWord; if (_selectedRow >= 0) { _flags1 = scene._verbList[_selectedRow]._action1; @@ -418,11 +418,11 @@ void MADSAction::checkActionAtMousePos() { break; case CAT_INV_VOCAB: - _actionMode = ACTIONMODE_OBJECT; + _commandSource = ACTIONMODE_OBJECT; _selectedRow = _pickedWord; if (_selectedRow < 0) { _hotspotId = -1; - _actionMode2 = ACTIONMODE2_0; + _mainObjectSource = ACTIONMODE2_0; } else { int objectId = _vm->_game->_objects._inventoryList[_selectedRow]; InventoryObject &invObject = _vm->_game->_objects[objectId]; @@ -430,7 +430,7 @@ void MADSAction::checkActionAtMousePos() { _flags1 = invObject._vocabList[_selectedRow - 2]._actionFlags1; _flags2 = invObject._vocabList[_selectedRow - 2]._actionFlags2; _hotspotId = userInterface._selectedInvIndex; - _actionMode2 = ACTIONMODE2_2; + _mainObjectSource = ACTIONMODE2_2; if (_flags1 == 2) _articleNumber = _flags2; @@ -439,13 +439,13 @@ void MADSAction::checkActionAtMousePos() { case CAT_HOTSPOT: _selectedRow = -1; - _actionMode = ACTIONMODE_NONE; - _actionMode2 = ACTIONMODE2_4; + _commandSource = ACTIONMODE_NONE; + _mainObjectSource = ACTIONMODE2_4; _hotspotId = _pickedWord; break; case CAT_TALK_ENTRY: - _actionMode = ACTIONMODE_TALK; + _commandSource = ACTIONMODE_TALK; _selectedRow = _pickedWord; break; @@ -461,7 +461,7 @@ void MADSAction::checkActionAtMousePos() { case CAT_HOTSPOT: case CAT_INV_ANIM: // TODO: We may not need a separate ActionMode2 enum - _actionMode2 = (ActionMode2)userInterface._category; + _mainObjectSource = userInterface._category; _hotspotId = _pickedWord; break; default: @@ -474,8 +474,8 @@ void MADSAction::checkActionAtMousePos() { case CAT_INV_LIST: case CAT_HOTSPOT: case CAT_INV_ANIM: - _v86F42 = userInterface._category; - _v86F3A = _pickedWord; + _secondObjectSource = userInterface._category; + _secondObject = _pickedWord; break; default: break; @@ -490,7 +490,6 @@ void MADSAction::checkActionAtMousePos() { void MADSAction::leftClick() { Scene &scene = _vm->_game->_scene; UserInterface &userInterface = scene._userInterface; - ScreenObjects &screenObjects = _vm->_game->_screenObjects; bool abortFlag = false; if ((userInterface._category == CAT_COMMAND || userInterface._category == CAT_INV_VOCAB) && @@ -522,7 +521,7 @@ void MADSAction::leftClick() { } else { _recentCommand = _selectedRow; - _recentCommandSource = _actionMode; + _recentCommandSource = _commandSource; _interAwaiting = AWAITING_THIS; } } @@ -551,7 +550,7 @@ void MADSAction::leftClick() { } _recentCommand = _selectedRow; - _recentCommandSource = _actionMode; + _recentCommandSource = _commandSource; } break; @@ -606,7 +605,7 @@ void MADSAction::leftClick() { case CAT_INV_LIST: case CAT_HOTSPOT: case CAT_INV_ANIM: - if (_v86F3A >= 0) { + if (_secondObject >= 0) { _selectedAction = -1; if (userInterface._category == CAT_HOTSPOT) { diff --git a/engines/mads/action.h b/engines/mads/action.h index 45886c1bca..4b51ec9b71 100644 --- a/engines/mads/action.h +++ b/engines/mads/action.h @@ -28,8 +28,9 @@ namespace MADS { -enum ActionMode { ACTIONMODE_NONE = 0, ACTIONMODE_VERB = 1, ACTIONMODE_OBJECT = 3, ACTIONMODE_TALK = 6 }; -enum ActionMode2 { ACTIONMODE2_0 = 0, ACTIONMODE2_2 = 2, ACTIONMODE2_4 = 4, ACTIONMODE2_5 = 5 }; +enum { ACTIONMODE_NONE = 0, ACTIONMODE_VERB = 1, ACTIONMODE_OBJECT = 3, ACTIONMODE_TALK = 6 }; +enum { ACTIONMODE2_0 = 0, ACTIONMODE2_2 = 2, ACTIONMODE2_4 = 4, ACTIONMODE2_5 = 5 }; + enum TriggerMode { KERNEL_TRIGGER_PARSER = 0, // Triggers parser KERNEL_TRIGGER_DAEMON = 1, // Triggers step/daemon code @@ -69,12 +70,13 @@ struct ActionDetails { }; struct ActionSavedFields { - int _actionMode; - int _selectedRow; - int _hotspotId; - int _v86F3A; - int _actionMode2; - int _v86F42; + bool _commandError; + int _commandSource; + int _command; + int _mainObject; + int _secondObject; + int _mainObjectSource; + int _secondObjectSource; int _articleNumber; int _lookFlag; }; @@ -90,8 +92,8 @@ private: public: ActionDetails _action, _activeAction; int8 _flags1, _flags2; - ActionMode _actionMode; - ActionMode2 _actionMode2; + int _commandSource; + int _mainObjectSource; int _articleNumber; bool _lookFlag; int _selectedRow; @@ -103,14 +105,13 @@ public: Common::String _sentence; // Unknown fields - int16 _v86F3A; - int16 _v86F42; + int16 _secondObject; + int16 _secondObjectSource; int16 _recentCommandSource; bool _v86F4A; int16 _recentCommand; InterAwaiting _interAwaiting; bool _inProgress; - int _v8453A; int _pickedWord; public: @@ -120,7 +121,14 @@ public: void set(); const Common::String &statusText() const { return _statusText; } void refresh(); + + /** + * Accepts the currently defined sentence from the ScreenObjects parser. + * Copies the data, and checks to see if the action requires the player + * to walk to the given hotspot. + */ void startAction(); + void checkAction(); bool isAction(int verbId, int objectNameId = 0, int indirectObjectId = 0); diff --git a/engines/mads/game.cpp b/engines/mads/game.cpp index 2736e77ef6..090ddd08ad 100644 --- a/engines/mads/game.cpp +++ b/engines/mads/game.cpp @@ -172,7 +172,7 @@ void Game::sectionLoop() { // Reset the user interface _screenObjects._v8333C = true; - _screenObjects._v832EC = 0; + _screenObjects._inputMode = kInputBuildingSentences; _scene._userInterface._scrollerY = 0; _player._loadsFirst = true; diff --git a/engines/mads/hotspots.cpp b/engines/mads/hotspots.cpp index 22e4feb8b0..fec1f6ef96 100644 --- a/engines/mads/hotspots.cpp +++ b/engines/mads/hotspots.cpp @@ -131,9 +131,9 @@ void DynamicHotspots::refresh() { DynamicHotspot &dh = (*this)[i]; if ((*this)[i]._active) { - switch (scrObjects._v832EC) { - case 0: - case 2: + switch (scrObjects._inputMode) { + case kInputBuildingSentences: + case kInputLimitedSentences: scrObjects.add(dh._bounds, _vm->_game->_scene._layer, CAT_12, dh._descId); scrObjects._v8333C = true; break; diff --git a/engines/mads/inventory.cpp b/engines/mads/inventory.cpp index a8e50e6ae1..43b7b6ea28 100644 --- a/engines/mads/inventory.cpp +++ b/engines/mads/inventory.cpp @@ -116,7 +116,8 @@ void InventoryObjects::addToInventory(int objectId) { (*this)[objectId]._roomNumber = PLAYER_INVENTORY; - if (_vm->_game->_kernelMode == KERNEL_ACTIVE_CODE && !_vm->_game->_screenObjects._v832EC) { + if (_vm->_game->_kernelMode == KERNEL_ACTIVE_CODE && + _vm->_game->_screenObjects._inputMode == kInputBuildingSentences) { userInterface.categoryChanged(); userInterface.selectObject(userInterface._selectedInvIndex); } @@ -137,7 +138,8 @@ void InventoryObjects::removeFromInventory(int objectId, int newScene) { int selectedIndex = userInterface._selectedInvIndex; bool noSelection = selectedIndex < 0; - if (_vm->_game->_kernelMode == KERNEL_ACTIVE_CODE && !_vm->_game->_screenObjects._v832EC) + if (_vm->_game->_kernelMode == KERNEL_ACTIVE_CODE && + _vm->_game->_screenObjects._inputMode == kInputBuildingSentences) userInterface.selectObject(-1); // Remove the item from the inventory list @@ -158,7 +160,8 @@ void InventoryObjects::removeFromInventory(int objectId, int newScene) { newIndex = 0; } - if (_vm->_game->_kernelMode == KERNEL_ACTIVE_CODE && !_vm->_game->_screenObjects._v832EC) { + if (_vm->_game->_kernelMode == KERNEL_ACTIVE_CODE && + _vm->_game->_screenObjects._inputMode == kInputBuildingSentences) { userInterface.categoryChanged(); userInterface.selectObject(newIndex); } diff --git a/engines/mads/nebular/nebular_scenes2.cpp b/engines/mads/nebular/nebular_scenes2.cpp index e8d8a2826a..b91384d85b 100644 --- a/engines/mads/nebular/nebular_scenes2.cpp +++ b/engines/mads/nebular/nebular_scenes2.cpp @@ -760,7 +760,7 @@ void Scene202::actions() { } _scene->_nextSceneId = 201; } else if (action->isAction(VERB_TAKE, 0x2C)) { - if (action->_actionMode2 == 4) { + if (action->_mainObjectSource == 4) { if (_game._trigger == 0) { if (_game._objects.isInInventory(OBJ_BONES)) { _vm->_dialogs->show(0x4EFB); @@ -952,7 +952,7 @@ void Scene202::actions() { } else if (action->isAction(VERB_TAKE, 0x140)) { _vm->_dialogs->show(0x4EF8); } else if (action->isAction(VERB_LOOK, 0x2D)) { - if (action->_actionMode == 4) + if (action->_commandSource == 4) _vm->_dialogs->show(0x4EF9); else return; diff --git a/engines/mads/nebular/nebular_scenes8.cpp b/engines/mads/nebular/nebular_scenes8.cpp index cb761ca138..f8eeb3748a 100644 --- a/engines/mads/nebular/nebular_scenes8.cpp +++ b/engines/mads/nebular/nebular_scenes8.cpp @@ -138,7 +138,7 @@ void Scene804::enter() { Scene8xx::enter1(); if (_globals[kInSpace] && !_globals[kWindowFixed]) { - _scene->_userInterface.setup(2); + _scene->_userInterface.setup(kInputLimitedSentences); _vm->_sound->command(19); } } diff --git a/engines/mads/scene.cpp b/engines/mads/scene.cpp index 9e27f2724e..a71eade786 100644 --- a/engines/mads/scene.cpp +++ b/engines/mads/scene.cpp @@ -160,7 +160,7 @@ void Scene::loadScene(int sceneId, const Common::String &prefix, bool palFlag) { _interfaceY = MADS_SCENE_HEIGHT; _spritesCount = _sprites.size(); - _userInterface.setup(_vm->_game->_screenObjects._v832EC); + _userInterface.setup(_vm->_game->_screenObjects._inputMode); warning("TODO: showMouse"); @@ -299,7 +299,7 @@ void Scene::doFrame() { _action.startAction(); if (_action._activeAction._verbId == Nebular::NOUN_LOOK_AT) { _action._activeAction._verbId = VERB_LOOK; - _action._savedFields._selectedRow = false; + _action._savedFields._command = false; } flag = true; @@ -438,7 +438,8 @@ void Scene::drawElements(ScreenTransition transitionType, bool surfaceFlag) { } void Scene::doPreactions() { - if (_vm->_game->_screenObjects._v832EC == 0 || _vm->_game->_screenObjects._v832EC == 2) { + if (_vm->_game->_screenObjects._inputMode == kInputBuildingSentences || + _vm->_game->_screenObjects._inputMode == kInputLimitedSentences) { _vm->_game->_triggerSetupMode = KERNEL_TRIGGER_PREPARE; _action.checkAction(); _sceneLogic->preActions(); @@ -449,37 +450,38 @@ void Scene::doPreactions() { } void Scene::doAction() { - int flag = 0; + bool flag = false; _vm->_game->_triggerSetupMode = KERNEL_TRIGGER_PARSER; - if ((_action._inProgress || _vm->_game->_trigger) && !_action._v8453A) { + if ((_action._inProgress || _vm->_game->_trigger) && !_action._savedFields._commandError) { _sceneLogic->actions(); _action._inProgress = true; - flag = -1; + flag = true; } - if (_vm->_game->_screenObjects._v832EC == 1) { + if (_vm->_game->_screenObjects._inputMode == kInputConversation) { _action._inProgress = false; } else { if ((_action._inProgress || _vm->_game->_trigger) || - (!flag && _action._v8453A == flag)) { + (!flag && _action._savedFields._commandError == flag)) { _vm->_game->_sectionHandler->sectionPtr2(); _action._inProgress = true; - flag = -1; + flag = true; } - if ((_action._inProgress || _vm->_game->_trigger) && (!flag || _action._v8453A == flag)) { + if ((_action._inProgress || _vm->_game->_trigger) && + (!flag || _action._savedFields._commandError == flag)) { _vm->_game->doObjectAction(); } if (!_action._savedFields._lookFlag) { if (!_action._inProgress) { - _action._v8453A = -1; + _action._savedFields._commandError = true; _sceneLogic->postActions(); } if (!_action._inProgress) { - _action._v8453A = -1; + _action._savedFields._commandError = true; warning("TODO: PtrUnk4"); } diff --git a/engines/mads/screen.cpp b/engines/mads/screen.cpp index b55d80c9ec..44f0907040 100644 --- a/engines/mads/screen.cpp +++ b/engines/mads/screen.cpp @@ -253,7 +253,7 @@ ScreenObject::ScreenObject() { ScreenObjects::ScreenObjects(MADSEngine *vm) : _vm(vm) { _objectY = -1; _v8333C = false; - _v832EC = 0; + _inputMode = kInputBuildingSentences; _v7FED6 = 0; _v8332A = 0; _category = CAT_NONE; @@ -285,7 +285,7 @@ void ScreenObjects::check(bool scanFlag) { Scene &scene = _vm->_game->_scene; UserInterface &userInterface = scene._userInterface; - if (!_vm->_events->_mouseButtons || _v832EC) + if (!_vm->_events->_mouseButtons || _inputMode != kInputBuildingSentences) _vm->_events->_anyStroke = false; if ((_vm->_events->_mouseMoved || _vm->_game->_scene._userInterface._scrollerY @@ -380,7 +380,7 @@ void ScreenObjects::checkScroller() { UserInterface &userInterface = _vm->_game->_scene._userInterface; Common::Array<int> &inventoryList = _vm->_game->_objects._inventoryList; - if (_v832EC) + if (_inputMode != kInputBuildingSentences) return; userInterface._scrollerY = 0; diff --git a/engines/mads/screen.h b/engines/mads/screen.h index 31fdd2a470..3595907b73 100644 --- a/engines/mads/screen.h +++ b/engines/mads/screen.h @@ -55,6 +55,12 @@ enum ScreenTransition { kVertTransition7, kCenterVertTransition }; +enum InputMode { + kInputBuildingSentences = 0, // Normal sentence building + kInputConversation = 1, // Conversation mode + kInputLimitedSentences = 2 // Use only scene hotspots +}; + class SpriteSlot; class TextDisplay; class UISlot; @@ -148,7 +154,7 @@ private: */ void checkScroller(); public: - int _v832EC; + InputMode _inputMode; int _v7FED6; int _v8332A; int _v8333C; diff --git a/engines/mads/user_interface.cpp b/engines/mads/user_interface.cpp index 7ed1884e88..4b174e8266 100644 --- a/engines/mads/user_interface.cpp +++ b/engines/mads/user_interface.cpp @@ -239,10 +239,10 @@ void UserInterface::load(const Common::String &resName) { delete pixelsStream; } -void UserInterface::setup(int id) { +void UserInterface::setup(InputMode inputMode) { Scene &scene = _vm->_game->_scene; - if (_vm->_game->_screenObjects._v832EC != id) { + if (_vm->_game->_screenObjects._inputMode != inputMode) { Common::String resName = _vm->_game->_aaName; // Strip off any extension @@ -252,7 +252,7 @@ void UserInterface::setup(int id) { } // Add on suffix if necessary - if (id) + if (inputMode != kInputBuildingSentences) resName += "A"; resName += ".INT"; @@ -260,7 +260,7 @@ void UserInterface::setup(int id) { load(resName); _surface.copyTo(this); } - _vm->_game->_screenObjects._v832EC = id; + _vm->_game->_screenObjects._inputMode = inputMode; scene._userInterface._uiSlots.clear(); scene._userInterface._uiSlots.fullRefresh(); @@ -279,7 +279,7 @@ void UserInterface::setup(int id) { } void UserInterface::drawTextElements() { - if (_vm->_game->_screenObjects._v832EC) { + if (_vm->_game->_screenObjects._inputMode) { drawTalkList(); } else { // Draw the actions @@ -408,7 +408,7 @@ void UserInterface::loadElements() { Common::Rect bounds; _vm->_game->_screenObjects.clear(); - if (!_vm->_game->_screenObjects._v832EC) { + if (_vm->_game->_screenObjects._inputMode == kInputBuildingSentences) { // Set up screen objects for the inventory scroller for (int idx = 1; idx <= 3; ++idx) { getBounds(CAT_INV_SCROLLER, idx, bounds); @@ -450,7 +450,8 @@ void UserInterface::loadElements() { CAT_INV_ANIM, 0); } - if (!_vm->_game->_screenObjects._v832EC || _vm->_game->_screenObjects._v832EC == 2) { + if (!_vm->_game->_screenObjects._inputMode == kInputBuildingSentences || + _vm->_game->_screenObjects._inputMode == kInputLimitedSentences) { _categoryIndexes[CAT_HOTSPOT - 1] = _vm->_game->_screenObjects.size() + 1; for (int hotspotIdx = scene._hotspots.size() - 1; hotspotIdx >= 0; --hotspotIdx) { Hotspot &hs = scene._hotspots[hotspotIdx]; @@ -458,7 +459,7 @@ void UserInterface::loadElements() { } } - if (_vm->_game->_screenObjects._v832EC == 1) { + if (_vm->_game->_screenObjects._inputMode == kInputConversation) { // setup areas for talk entries _categoryIndexes[CAT_TALK_ENTRY - 1] = _vm->_game->_screenObjects.size() + 1; for (int idx = 0; idx < 5; ++idx) { @@ -594,7 +595,7 @@ void UserInterface::noInventoryAnim() { _invSpritesIndex = -1; } - if (!_vm->_game->_screenObjects._v832EC) + if (_vm->_game->_screenObjects._inputMode == kInputBuildingSentences) refresh(); } @@ -608,8 +609,9 @@ void UserInterface::refresh() { void UserInterface::inventoryAnim() { Scene &scene = _vm->_game->_scene; - if (_vm->_game->_screenObjects._v832EC == 1 || _vm->_game->_screenObjects._v832EC == 2 - || _invSpritesIndex < 0) + if (_vm->_game->_screenObjects._inputMode == kInputConversation || + _vm->_game->_screenObjects._inputMode == kInputLimitedSentences || + _invSpritesIndex < 0) return; // Move to the next frame number in the sequence, resetting if at the end diff --git a/engines/mads/user_interface.h b/engines/mads/user_interface.h index 53c1e10466..445cd1e487 100644 --- a/engines/mads/user_interface.h +++ b/engines/mads/user_interface.h @@ -166,7 +166,7 @@ public: /** * Set up the interface */ - void setup(int id); + void setup(InputMode inputMode); void drawTextElements(); |