From 35d89e25a67efdedb6906ebb148cfb3371fa591b Mon Sep 17 00:00:00 2001 From: David Fioramonti Date: Tue, 26 Jun 2018 18:18:30 -0700 Subject: [PATCH] MYST3: Add RoomID enum to help working with Rooms No behavior changes. Not all rooms were given useful names, but the most used were. More useful names for the more obscure rooms can be added later. --- engines/myst3/database.cpp | 72 ++++++++++++++++++------------------- engines/myst3/database.h | 40 ++++++++++++++++++++- engines/myst3/inventory.cpp | 12 ++++--- engines/myst3/menu.cpp | 16 ++++----- engines/myst3/myst3.cpp | 20 +++++------ engines/myst3/script.cpp | 14 ++++---- 6 files changed, 108 insertions(+), 66 deletions(-) diff --git a/engines/myst3/database.cpp b/engines/myst3/database.cpp index e5caecad3aa..97bfc3f619c 100644 --- a/engines/myst3/database.cpp +++ b/engines/myst3/database.cpp @@ -372,70 +372,70 @@ NodeWalker::~NodeWalker() { } static const RoomData roomsXXXX[] = { - { 101, "XXXX" } + { kRoomShared, "XXXX" } }; static const RoomData roomsINTR[] = { - { 201, "INTR" } + { kRoomIntro, "INTR" } }; static const RoomData roomsTOHO[] = { - { 301, "TOHO" } + { kRoomTomahnaStart, "TOHO" } }; static const RoomData roomsTOHB[] = { - { 401, "TOHB" } + { kRoomTomahnaReturn, "TOHB" } }; static const RoomData roomsLE[] = { - { 501, "LEIS" }, - { 502, "LEOS" }, - { 503, "LEET" }, - { 504, "LELT" }, - { 505, "LEMT" }, - { 506, "LEOF" } + { kJnaninStart, "LEIS" }, + { kRoomLeos, "LEOS" }, + { kRoomLeet, "LEET" }, + { kRoomLelt, "LELT" }, + { kRoomLemt, "LEMT" }, + { kRoomLeof, "LEOF" } }; static const RoomData roomsLI[] = { - { 601, "LIDR" }, - { 602, "LISW" }, - { 603, "LIFO" }, - { 604, "LISP" }, - { 605, "LINE" } + { kRoomEdannaStart, "LIDR" }, + { kRoomLisw, "LISW" }, + { kRoomLifo, "LIFO" }, + { kRoomLisp, "LISP" }, + { kRoomLine, "LINE" } }; static const RoomData roomsEN[] = { - { 701, "ENSI" }, - { 703, "ENPP" }, - { 704, "ENEM" }, - { 705, "ENLC" }, - { 706, "ENDD" }, - { 707, "ENCH" }, - { 708, "ENLI" } + { kRoomVoltaicStart, "ENSI" }, + { kRoomEnpp, "ENPP" }, + { kRoomEnem, "ENEM" }, + { kRoomEnlc, "ENLC" }, + { kRoomEndd, "ENDD" }, + { kRoomEnch, "ENCH" }, + { kRoomEnli, "ENLI" } }; static const RoomData roomsNA[] = { - { 801, "NACH" } + { kRoomNarayan, "NACH" } }; static const RoomData roomsMENU[] = { - { 901, "MENU" }, - { 902, "JRNL" }, - { 903, "DEMO" }, - { 904, "ATIX" } + { kRoomMenu, "MENU" }, + { kRoomJournals, "JRNL" }, + { kRoomDemo, "DEMO" }, + { kRoomAtix, "ATIX" } }; static const RoomData roomsMA[] = { - { 1001, "MACA" }, - { 1002, "MAIS" }, - { 1003, "MALL" }, - { 1004, "MASS" }, - { 1005, "MAWW" }, - { 1006, "MATO" } + { kRoomAmateriaStart, "MACA" }, + { kRoomMais, "MAIS" }, + { kRoomMall, "MALL" }, + { kRoomMass, "MASS" }, + { kRoomMaww, "MAWW" }, + { kRoomMato, "MATO" } }; static const RoomData roomsLOGO[] = { - { 1101, "LOGO" } + { kLogo, "LOGO" } }; const AgeData Database::_ages[] = { @@ -687,7 +687,7 @@ void Database::patchNodeScripts(const RoomData *room, Common::Array &no } bool Database::isCommonRoom(uint32 roomID, uint32 ageID) const { - return roomID == 101 || roomID == 901 || roomID == 902; + return roomID == kRoomShared || roomID == kRoomMenu || roomID == kRoomJournals; } void Database::cacheRoom(uint32 roomID, uint32 ageID) { @@ -864,7 +864,7 @@ void Database::patchLanguageMenu() { // op 194, runPuzzle1 ( 18 ) // op 194, runPuzzle1 ( 19 ) - NodePtr languageMenu = getNodeData(530, 901, 9); + NodePtr languageMenu = getNodeData(530, kRoomMenu, 9); languageMenu->hotspots[5].script[1].args[1] = getGameLanguageCode(); } diff --git a/engines/myst3/database.h b/engines/myst3/database.h index 3b1871cf6f2..8cc9dfb0ba2 100644 --- a/engines/myst3/database.h +++ b/engines/myst3/database.h @@ -23,8 +23,9 @@ #ifndef DATABASE_H_ #define DATABASE_H_ -#include "common/scummsys.h" #include "engines/myst3/hotspot.h" + +#include "common/scummsys.h" #include "common/str.h" #include "common/language.h" #include "common/platform.h" @@ -51,6 +52,43 @@ enum MystLanguage { kSpanish = 5 }; +enum RoomID { + kRoomShared = 101, + kRoomIntro = 201, + kRoomTomahnaStart = 301, + kRoomTomahnaReturn = 401, + kJnaninStart = 501, + kRoomLeos = 502, + kRoomLeet = 503, + kRoomLelt = 504, + kRoomLemt = 505, + kRoomLeof = 506, + kRoomEdannaStart = 601, + kRoomLisw = 602, + kRoomLifo = 603, + kRoomLisp = 604, + kRoomLine = 605, + kRoomVoltaicStart = 701, + kRoomEnpp = 703, + kRoomEnem = 704, + kRoomEnlc = 705, + kRoomEndd = 706, + kRoomEnch = 707, + kRoomEnli = 708, + kRoomNarayan = 801, + kRoomMenu = 901, + kRoomJournals = 902, + kRoomDemo = 903, + kRoomAtix = 904, + kRoomAmateriaStart = 1001, + kRoomMais = 1002, + kRoomMall = 1003, + kRoomMass = 1004, + kRoomMaww = 1005, + kRoomMato = 1006, + kLogo = 1101 +}; + struct NodeData { int16 id; int16 zipBitIndex; diff --git a/engines/myst3/inventory.cpp b/engines/myst3/inventory.cpp index dc7a74bb0dc..8e3346bc2ad 100644 --- a/engines/myst3/inventory.cpp +++ b/engines/myst3/inventory.cpp @@ -21,7 +21,9 @@ */ #include "engines/myst3/inventory.h" + #include "engines/myst3/cursor.h" +#include "engines/myst3/database.h" #include "engines/myst3/state.h" namespace Myst3 { @@ -210,22 +212,22 @@ void Inventory::useItem(uint16 var) { case 277: // Atrus closeAllBooks(); _vm->_state->setJournalAtrusState(2); - openBook(9, 902, 100); + openBook(9, kRoomJournals, 100); break; case 279: // Saavedro closeAllBooks(); _vm->_state->setJournalSaavedroState(2); - openBook(9, 902, 200); + openBook(9, kRoomJournals, 200); break; case 480: // Tomahna closeAllBooks(); _vm->_state->setBookStateTomahna(2); - openBook(8, 801, 220); + openBook(8, kRoomNarayan, 220); break; case 481: // Releeshahn closeAllBooks(); _vm->_state->setBookStateReleeshahn(2); - openBook(9, 902, 300); + openBook(9, kRoomJournals, 300); break; case 345: _vm->dragSymbol(345, 1002); @@ -269,7 +271,7 @@ void Inventory::addSaavedroChapter(uint16 var) { _vm->_state->setJournalSaavedroState(2); _vm->_state->setJournalSaavedroChapter(var - 285); _vm->_state->setJournalSaavedroPageInChapter(0); - openBook(9, 902, 200); + openBook(9, kRoomJournals, 200); } void Inventory::loadFromState() { diff --git a/engines/myst3/menu.cpp b/engines/myst3/menu.cpp index 0a0b6bbd884..4414b93bfb8 100644 --- a/engines/myst3/menu.cpp +++ b/engines/myst3/menu.cpp @@ -309,7 +309,7 @@ Graphics::Surface *Menu::captureThumbnail() { } void Menu::goToNode(uint16 node) { - if (_vm->_state->getMenuSavedAge() == 0 && _vm->_state->getLocationRoom() != 901) { + if (_vm->_state->getMenuSavedAge() == 0 && _vm->_state->getLocationRoom() != kRoomMenu) { // Entering menu, save current location ... _vm->_state->setMenuSavedAge(_vm->_state->getLocationAge()); _vm->_state->setMenuSavedRoom(_vm->_state->getLocationRoom()); @@ -340,7 +340,7 @@ void Menu::goToNode(uint16 node) { } _vm->_state->setLocationNextAge(9); - _vm->_state->setLocationNextRoom(901); + _vm->_state->setLocationNextRoom(kRoomMenu); _vm->goToNode(node, kTransitionNone); } @@ -396,7 +396,7 @@ uint16 Menu::dialogSaveValue() { Common::String Menu::getAgeLabel(GameState *gameState) { uint32 age = 0; uint32 room = gameState->getLocationRoom(); - if (room == 901) + if (room == kRoomMenu) age = gameState->getMenuSavedAge(); else age = gameState->getLocationAge(); @@ -445,7 +445,7 @@ void Menu::setSaveLoadSpotItem(uint16 id, SpotItemFace *spotItem) { } bool Menu::isOpen() const { - return _vm->_state->getLocationAge() == 9 && _vm->_state->getLocationRoom() == 901; + return _vm->_state->getLocationAge() == 9 && _vm->_state->getLocationRoom() == kRoomMenu; } void Menu::generateSaveThumbnail() { @@ -681,7 +681,7 @@ void PagingMenu::draw() { uint16 room = _vm->_state->getLocationRoom(); uint16 age = _vm->_state->getLocationAge(); - if (room != 901 || !(node == 200 || node == 300)) + if (room != kRoomMenu || !(node == 200 || node == 300)) return; int16 page = _vm->_state->getMenuSaveLoadCurrentPage(); @@ -731,7 +731,7 @@ bool PagingMenu::handleInput(const Common::KeyState &e) { uint16 room = _vm->_state->getLocationRoom(); uint16 item = _vm->_state->getMenuSaveLoadSelectedItem(); - if (room != 901 || node != 300 || item != 7) + if (room != kRoomMenu || node != 300 || item != 7) return false; Common::String display = prepareSaveNameForDisplay(_saveName); @@ -794,7 +794,7 @@ void AlbumMenu::draw() { uint16 room = _vm->_state->getLocationRoom(); // Load and save menus only - if (room != 901 || !(node == 200 || node == 300)) + if (room != kRoomMenu || !(node == 200 || node == 300)) return; if (!_saveLoadAgeName.empty()) { @@ -903,7 +903,7 @@ void AlbumMenu::loadMenuSelect() { uint16 room = _vm->_state->getLocationRoom(); // Details are only updated on the load menu - if (room != 901 || node != 200) + if (room != kRoomMenu || node != 200) return; int32 selectedSave = _vm->_state->getMenuSelectedSave(); diff --git a/engines/myst3/myst3.cpp b/engines/myst3/myst3.cpp index 377232e573f..c7dab9abd07 100644 --- a/engines/myst3/myst3.cpp +++ b/engines/myst3/myst3.cpp @@ -191,11 +191,11 @@ Common::Error Myst3Engine::run() { } else { if (getPlatform() == Common::kPlatformXbox) { // Play the logo videos - loadNode(1, 1101, 11); + loadNode(1, kLogo, 11); } // Game init script, loads the menu - loadNode(1, 101, 1); + loadNode(1, kRoomShared, 1); } while (!shouldQuit()) { @@ -494,7 +494,7 @@ void Myst3Engine::processInput(bool interactive) { case Common::KEYCODE_F5: // Open main menu if (_cursor->isVisible() && interactive) { - if (_state->getLocationRoom() != 901) + if (_state->getLocationRoom() != kRoomMenu) _menu->goToNode(100); } break; @@ -553,7 +553,7 @@ void Myst3Engine::processInput(bool interactive) { if (_inputEscapePressedNotConsumed && interactive) { _inputEscapePressedNotConsumed = false; if (_cursor->isVisible() && _state->hasVarMenuEscapePressed()) { - if (_state->getLocationRoom() != 901) + if (_state->getLocationRoom() != kRoomMenu) _menu->goToNode(100); else _state->setMenuEscapePressed(1); @@ -731,7 +731,7 @@ void Myst3Engine::drawFrame(bool noSwap) { if (getPlatform() == Common::kPlatformXbox) { // The cursor is not drawn in the Xbox version menus and journals - cursorVisible &= !(_state->getLocationRoom() == 901 || _state->getLocationRoom() == 902); + cursorVisible &= !(_state->getLocationRoom() == kRoomMenu || _state->getLocationRoom() == kRoomJournals); } if (cursorVisible) @@ -852,7 +852,7 @@ void Myst3Engine::loadNode(uint16 nodeID, uint32 roomID, uint32 ageID) { // WORKAROUND: In Narayan, the scripts in node NACH 9 test on var 39 // without first reinitializing it leading to Saavedro not always giving // Releeshan to the player when he is trapped between both shields. - if (nodeID == 9 && roomID == 801) + if (nodeID == 9 && roomID == kRoomNarayan) _state->setVar(39, 0); } @@ -993,9 +993,9 @@ void Myst3Engine::runBackgroundSoundScriptsFromNode(uint16 nodeID, uint32 roomID // Stop previous music when changing room if (_backgroundSoundScriptLastRoomId != roomID) { if (_backgroundSoundScriptLastRoomId != 0 - && _backgroundSoundScriptLastRoomId != 901 - && _backgroundSoundScriptLastRoomId != 902 - && roomID != 0 && roomID != 901 && roomID != 902) { + && _backgroundSoundScriptLastRoomId != kRoomMenu + && _backgroundSoundScriptLastRoomId != kRoomJournals + && roomID != 0 && roomID != kRoomMenu && roomID != kRoomJournals) { _sound->stopMusic(_state->getSoundScriptFadeOutDelay()); if (nodeData->backgroundSoundScripts.size() != 0) { @@ -1486,7 +1486,7 @@ void Myst3Engine::dragItem(uint16 statusVar, uint16 movie, uint16 frame, uint16 } bool Myst3Engine::canSaveGameStateCurrently() { - bool inMenuWithNoGameLoaded = _state->getLocationRoom() == 901 && _state->getMenuSavedAge() == 0; + bool inMenuWithNoGameLoaded = _state->getLocationRoom() == kRoomMenu && _state->getMenuSavedAge() == 0; return canLoadGameStateCurrently() && !inMenuWithNoGameLoaded && _cursor->isVisible(); } diff --git a/engines/myst3/script.cpp b/engines/myst3/script.cpp index 6d3a4f67b26..02fb79e1248 100644 --- a/engines/myst3/script.cpp +++ b/engines/myst3/script.cpp @@ -20,16 +20,18 @@ * */ -#include "engines/myst3/myst3.h" #include "engines/myst3/script.h" -#include "engines/myst3/hotspot.h" -#include "engines/myst3/state.h" + +#include "engines/myst3/ambient.h" #include "engines/myst3/cursor.h" +#include "engines/myst3/database.h" +#include "engines/myst3/hotspot.h" #include "engines/myst3/inventory.h" +#include "engines/myst3/myst3.h" #include "engines/myst3/puzzles.h" #include "engines/myst3/scene.h" #include "engines/myst3/sound.h" -#include "engines/myst3/ambient.h" +#include "engines/myst3/state.h" #include "common/events.h" @@ -2454,7 +2456,7 @@ void Script::runScriptWithVar(Context &c, const Opcode &cmd) { void Script::runCommonScript(Context &c, const Opcode &cmd) { debugC(kDebugScript, "Opcode %d: Run common script %d", cmd.op, cmd.args[0]); - _vm->runScriptsFromNode(cmd.args[0], 101, 1); + _vm->runScriptsFromNode(cmd.args[0], kRoomShared, 1); } void Script::runCommonScriptWithVar(Context &c, const Opcode &cmd) { @@ -2462,7 +2464,7 @@ void Script::runCommonScriptWithVar(Context &c, const Opcode &cmd) { _vm->_state->setVar(26, cmd.args[1]); - _vm->runScriptsFromNode(cmd.args[0], 101, 1); + _vm->runScriptsFromNode(cmd.args[0], kRoomShared, 1); } void Script::runPuzzle1(Context &c, const Opcode &cmd) {