diff options
author | Paul Gilbert | 2016-07-23 17:21:38 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-07-23 17:21:38 -0400 |
commit | d979dcd020d65aa0019d7a53c1dcd8b4f4a0f909 (patch) | |
tree | b4dea5cd29cfe4f19e96b4ac48750a6caf8e0daa | |
parent | 00c568e17572ce2ac4e9c97c21c00a734951ae9a (diff) | |
download | scummvm-rg350-d979dcd020d65aa0019d7a53c1dcd8b4f4a0f909.tar.gz scummvm-rg350-d979dcd020d65aa0019d7a53c1dcd8b4f4a0f909.tar.bz2 scummvm-rg350-d979dcd020d65aa0019d7a53c1dcd8b4f4a0f909.zip |
TITANIC: Fixes for movie notification, computer game logic cleanup
-rw-r--r-- | engines/titanic/core/game_object.cpp | 10 | ||||
-rw-r--r-- | engines/titanic/game/cdrom.cpp | 2 | ||||
-rw-r--r-- | engines/titanic/game/cdrom_tray.cpp | 46 | ||||
-rw-r--r-- | engines/titanic/game/cdrom_tray.h | 2 | ||||
-rw-r--r-- | engines/titanic/game/computer_screen.cpp | 6 | ||||
-rw-r--r-- | engines/titanic/game_state.cpp | 14 | ||||
-rw-r--r-- | engines/titanic/game_state.h | 6 | ||||
-rw-r--r-- | engines/titanic/input_handler.cpp | 2 | ||||
-rw-r--r-- | engines/titanic/main_game_window.cpp | 8 | ||||
-rw-r--r-- | engines/titanic/support/avi_surface.h | 2 | ||||
-rw-r--r-- | engines/titanic/support/files_manager.cpp | 2 | ||||
-rw-r--r-- | engines/titanic/support/time_event_info.cpp | 2 |
12 files changed, 56 insertions, 46 deletions
diff --git a/engines/titanic/core/game_object.cpp b/engines/titanic/core/game_object.cpp index 5d913ebf1f..4f9a2a5c9f 100644 --- a/engines/titanic/core/game_object.cpp +++ b/engines/titanic/core/game_object.cpp @@ -485,7 +485,7 @@ void CGameObject::petShow() { CGameManager *gameManager = getGameManager(); if (gameManager) { gameManager->_gameState._petActive = true; - gameManager->_gameState.setMode(GSMODE_SELECTED); + gameManager->_gameState.setMode(GSMODE_INTERACTIVE); gameManager->initBounds(); } } @@ -494,7 +494,7 @@ void CGameObject::petHide() { CGameManager *gameManager = getGameManager(); if (gameManager) { gameManager->_gameState._petActive = false; - gameManager->_gameState.setMode(GSMODE_SELECTED); + gameManager->_gameState.setMode(GSMODE_INTERACTIVE); gameManager->initBounds(); } } @@ -513,7 +513,7 @@ void CGameObject::playMovie(uint flags) { _resource.clear(); } - CGameObject *obj = (flags & MOVIE_NO_OBJECT) ? nullptr : this; + CGameObject *obj = (flags & MOVIE_NOTIFY_OBJECT) ? this : nullptr; if (_surface) { _surface->playMovie(flags, obj); if (flags & MOVIE_GAMESTATE) @@ -530,7 +530,7 @@ void CGameObject::playMovie(int startFrame, int endFrame, uint flags) { _resource.clear(); } - CGameObject *obj = (flags & MOVIE_NO_OBJECT) ? nullptr : this; + CGameObject *obj = (flags & MOVIE_NOTIFY_OBJECT) ? this : nullptr; if (_surface) { _surface->playMovie(startFrame, endFrame, flags, obj); if (flags & MOVIE_GAMESTATE) @@ -548,7 +548,7 @@ void CGameObject::playMovie(int startFrame, int endFrame, int initialFrame, uint _resource.clear(); } - CGameObject *obj = (flags & MOVIE_NO_OBJECT) ? nullptr : this; + CGameObject *obj = (flags & MOVIE_NOTIFY_OBJECT) ? this : nullptr; if (_surface) { _surface->playMovie(startFrame, endFrame, initialFrame, flags, obj); if (flags & MOVIE_GAMESTATE) diff --git a/engines/titanic/game/cdrom.cpp b/engines/titanic/game/cdrom.cpp index 111b090920..cd913d05f7 100644 --- a/engines/titanic/game/cdrom.cpp +++ b/engines/titanic/game/cdrom.cpp @@ -62,7 +62,7 @@ bool CCDROM::MouseDragEndMsg(CMouseDragEndMsg *msg) { if (msg->_dropTarget && msg->_dropTarget->getName() == "newComputer") { CCDROMTray *newTray = dynamic_cast<CCDROMTray *>(getRoom()->findByName("newTray")); - if (newTray->_state && newTray->_insertedCD == "None") { + if (newTray->_isOpened && newTray->_insertedCD == "None") { CActMsg actMsg(getName()); actMsg.execute(newTray); setVisible(false); diff --git a/engines/titanic/game/cdrom_tray.cpp b/engines/titanic/game/cdrom_tray.cpp index 118150bee9..1e5b135d35 100644 --- a/engines/titanic/game/cdrom_tray.cpp +++ b/engines/titanic/game/cdrom_tray.cpp @@ -33,12 +33,12 @@ BEGIN_MESSAGE_MAP(CCDROMTray, CGameObject) END_MESSAGE_MAP() -CCDROMTray::CCDROMTray() : CGameObject(), _state(0) { +CCDROMTray::CCDROMTray() : CGameObject(), _isOpened(false) { } void CCDROMTray::save(SimpleFile *file, int indent) { file->writeNumberLine(1, indent); - file->writeNumberLine(_state, indent); + file->writeNumberLine(_isOpened, indent); file->writeQuotedLine(_insertedCD, indent); CGameObject::save(file, indent); @@ -46,7 +46,7 @@ void CCDROMTray::save(SimpleFile *file, int indent) { void CCDROMTray::load(SimpleFile *file) { file->readNumber(); - _state = file->readNumber(); + _isOpened = file->readNumber(); _insertedCD = file->readString(); CGameObject::load(file); @@ -54,65 +54,73 @@ void CCDROMTray::load(SimpleFile *file) { bool CCDROMTray::ActMsg(CActMsg *msg) { if (msg->_action == "ClickedOn") { - if (_state) { + if (_isOpened) { + // Closing the tray if (_insertedCD == "None") { + // No CD in tray playMovie(55, 65, 0); playSound("a#35.wav", 50, 0, 0); - _state = 0; + _isOpened = false; } else { - CTreeItem *treeItem = getRoom()->findByName(_insertedCD); - if (treeItem) { + // Ejecting tray with CD + CTreeItem *cdrom = getRoom()->findByName(_insertedCD); + if (cdrom) { CActMsg actMsg("Ejected"); - actMsg.execute(treeItem); + actMsg.execute(cdrom); } _insertedCD = "None"; loadFrame(52); } } else if (_insertedCD == "None") { + // Opening tray with no CD playMovie(44, 54, 0); playSound("a#34.wav", 50, 0, 0); - _state = 1; + _isOpened = true; } else if (_insertedCD == "newCD1" || _insertedCD == "newCD2") { + // Opening tray with standard CD playMovie(22, 32, 0); playSound("a#34.wav", 50, 0, 0); - _state = 1; + _isOpened = true; } else if (_insertedCD == "newSTCD") { + // Opening tray with Starship Titanic CD playMovie(0, 10, 0); playSound("a#34.wav", 50, 0, 0); - _state = 1; + _isOpened = true; } - } else if (_state) { + } else if (_isOpened) { if (msg->_action == "newCD1" || msg->_action == "newCD2") { - playMovie(33, 43, 4); + // Standard CD dropped on CDROM Tray + playMovie(33, 43, MOVIE_NOTIFY_OBJECT); playSound("a#35.wav", 50, 0, 0); } else if (msg->_action == "newSTCD") { - playMovie(11, 21, 4); + // Starship Titanic CD dropped on CDROM Tray + playMovie(11, 21, MOVIE_NOTIFY_OBJECT); playSound("a#35.wav", 50, 0, 0); } else { return true; } _insertedCD = msg->_action; - _state = 0; + _isOpened = false; } return true; } bool CCDROMTray::MovieEndMsg(CMovieEndMsg *msg) { - CTreeItem *treeItem = getRoom()->findByName("newScreen"); + CTreeItem *screen = getRoom()->findByName("newScreen"); - if (treeItem) { + if (screen) { CActMsg actMsg(_insertedCD); - actMsg.execute(treeItem); + actMsg.execute(screen); } return true; } bool CCDROMTray::StatusChangeMsg(CStatusChangeMsg *msg) { - msg->_success = _state; + msg->_success = _isOpened; return true; } diff --git a/engines/titanic/game/cdrom_tray.h b/engines/titanic/game/cdrom_tray.h index dbeec170d7..c91e0450fe 100644 --- a/engines/titanic/game/cdrom_tray.h +++ b/engines/titanic/game/cdrom_tray.h @@ -34,7 +34,7 @@ class CCDROMTray : public CGameObject { bool MovieEndMsg(CMovieEndMsg *msg); bool StatusChangeMsg(CStatusChangeMsg *msg); public: - int _state; + bool _isOpened; CString _insertedCD; public: CLASSDEF diff --git a/engines/titanic/game/computer_screen.cpp b/engines/titanic/game/computer_screen.cpp index c73db4f879..b73beda8a7 100644 --- a/engines/titanic/game/computer_screen.cpp +++ b/engines/titanic/game/computer_screen.cpp @@ -47,10 +47,10 @@ void CComputerScreen::load(SimpleFile *file) { bool CComputerScreen::ActMsg(CActMsg *msg) { if (msg->_action == "newCD1" || msg->_action == "newCD2") { - playMovie(27, 53, 16); - playMovie(19, 26, 16); + playMovie(27, 53, MOVIE_GAMESTATE); + playMovie(19, 26, MOVIE_GAMESTATE); } else if (msg->_action == "newSTCD") { - playMovie(0, 18, 20); + playMovie(0, 18, MOVIE_GAMESTATE | MOVIE_NOTIFY_OBJECT); } return true; diff --git a/engines/titanic/game_state.cpp b/engines/titanic/game_state.cpp index f7ae304b29..0f2ed1798e 100644 --- a/engines/titanic/game_state.cpp +++ b/engines/titanic/game_state.cpp @@ -36,7 +36,7 @@ bool CGameStateMovieList::clear() { CGameState::CGameState(CGameManager *gameManager) : _gameManager(gameManager), _gameLocation(this), - _passengerClass(0), _priorClass(0), _mode(GSMODE_UNSELECTED), + _passengerClass(0), _priorClass(0), _mode(GSMODE_NONE), _field14(0), _petActive(false), _field1C(false), _quitGame(false), _field24(0), _nodeChangeCtr(0), _nodeEnterTicks(0), _field38(0) { } @@ -69,14 +69,14 @@ void CGameState::load(SimpleFile *file) { void CGameState::setMode(GameStateMode newMode) { CScreenManager *sm = CScreenManager::_screenManagerPtr; - if (newMode == GSMODE_2 && newMode != _mode) { + if (newMode == GSMODE_CUTSCENE && newMode != _mode) { if (_gameManager) _gameManager->lockInputHandler(); if (sm && sm->_mouseCursor) sm->_mouseCursor->hide(); - } else if (newMode != GSMODE_2 && newMode != _mode) { + } else if (newMode != GSMODE_CUTSCENE && newMode != _mode) { if (sm && sm->_mouseCursor) sm->_mouseCursor->show(); @@ -123,7 +123,7 @@ void CGameState::changeView(CViewItem *newView, CMovieClip *clip) { if (g_vm->_window->isSpecialPressed(MK_SHIFT)) clip = nullptr; - if (_mode == GSMODE_2) { + if (_mode == GSMODE_CUTSCENE) { _movieList._view = newView; _movieList._movieClip = clip; } else { @@ -143,8 +143,8 @@ void CGameState::changeView(CViewItem *newView, CMovieClip *clip) { } void CGameState::checkForViewChange() { - if (_mode == GSMODE_2 && _movieList.clear()) { - setMode(GSMODE_SELECTED); + if (_mode == GSMODE_CUTSCENE && _movieList.clear()) { + setMode(GSMODE_INTERACTIVE); if (_movieList._view) enterView(); } @@ -152,7 +152,7 @@ void CGameState::checkForViewChange() { void CGameState::addMovie(CMovie *movie) { _movieList.push_back(new CMovieListItem(movie)); - setMode(GSMODE_2); + setMode(GSMODE_CUTSCENE); } } // End of namespace Titanic diff --git a/engines/titanic/game_state.h b/engines/titanic/game_state.h index d90c845ed5..0bfa0d5b31 100644 --- a/engines/titanic/game_state.h +++ b/engines/titanic/game_state.h @@ -33,8 +33,10 @@ namespace Titanic { class CGameManager; -enum GameStateMode { GSMODE_UNSELECTED = 0, GSMODE_SELECTED = 1, GSMODE_2 = 2, GSMODE_3 = 3, GSMODE_4 = 4, GSMODE_5 = 5, - GSMODE_PENDING_LOAD }; +enum GameStateMode { + GSMODE_NONE = 0, GSMODE_INTERACTIVE = 1, GSMODE_CUTSCENE = 2, + GSMODE_3 = 3, GSMODE_4 = 4, GSMODE_5 = 5, GSMODE_PENDING_LOAD = 6 +}; PTR_LIST_ITEM(CMovie); class CGameStateMovieList : public List<CMovieListItem> { diff --git a/engines/titanic/input_handler.cpp b/engines/titanic/input_handler.cpp index 289e707bb0..395f55df6f 100644 --- a/engines/titanic/input_handler.cpp +++ b/engines/titanic/input_handler.cpp @@ -50,7 +50,7 @@ void CInputHandler::decLockCount() { void CInputHandler::handleMessage(CMessage &msg, bool respectLock) { if (!respectLock || _lockCount <= 0) { - if (_gameManager->_gameState._mode == GSMODE_SELECTED) { + if (_gameManager->_gameState._mode == GSMODE_INTERACTIVE) { processMessage(&msg); } else if (!msg.isMouseMsg()) { g_vm->_filesManager->loadDrive(); diff --git a/engines/titanic/main_game_window.cpp b/engines/titanic/main_game_window.cpp index 2ecc319257..46d658b004 100644 --- a/engines/titanic/main_game_window.cpp +++ b/engines/titanic/main_game_window.cpp @@ -75,7 +75,7 @@ void CMainGameWindow::applicationStarting() { // Load either a new game or selected existing save _project->loadGame(saveSlot); _inputAllowed = true; - _gameManager->_gameState.setMode(GSMODE_SELECTED); + _gameManager->_gameState.setMode(GSMODE_INTERACTIVE); // TODO: Cursor/image @@ -147,8 +147,8 @@ void CMainGameWindow::draw() { scrManager->clearSurface(SURFACE_BACKBUFFER, &_gameManager->_bounds); switch (_gameManager->_gameState._mode) { - case GSMODE_SELECTED: - case GSMODE_2: + case GSMODE_INTERACTIVE: + case GSMODE_CUTSCENE: if (_gameManager->_gameState._petActive) drawPet(scrManager); @@ -163,7 +163,7 @@ void CMainGameWindow::draw() { case GSMODE_PENDING_LOAD: // Pending savegame to load - _gameManager->_gameState.setMode(GSMODE_SELECTED); + _gameManager->_gameState.setMode(GSMODE_INTERACTIVE); _vm->_window->_project->loadGame(_pendingLoadSlot); break; diff --git a/engines/titanic/support/avi_surface.h b/engines/titanic/support/avi_surface.h index 53e2aae6fc..d21182bca9 100644 --- a/engines/titanic/support/avi_surface.h +++ b/engines/titanic/support/avi_surface.h @@ -34,7 +34,7 @@ class CSoundManager; class CVideoSurface; enum MovieFlag { - MOVIE_REPEAT = 1, MOVIE_STOP_PREVIOUS = 2, MOVIE_NO_OBJECT = 4, + MOVIE_REPEAT = 1, MOVIE_STOP_PREVIOUS = 2, MOVIE_NOTIFY_OBJECT = 4, MOVIE_REVERSE = 8, MOVIE_GAMESTATE = 0x10 }; diff --git a/engines/titanic/support/files_manager.cpp b/engines/titanic/support/files_manager.cpp index 1d2b1d9a8e..04928b96d6 100644 --- a/engines/titanic/support/files_manager.cpp +++ b/engines/titanic/support/files_manager.cpp @@ -109,7 +109,7 @@ void CFilesManager::debug(CScreenManager *screenManager) { void CFilesManager::resetView() { if (_gameManager) { - _gameManager->_gameState.setMode(GSMODE_SELECTED); + _gameManager->_gameState.setMode(GSMODE_INTERACTIVE); _gameManager->initBounds(); } } diff --git a/engines/titanic/support/time_event_info.cpp b/engines/titanic/support/time_event_info.cpp index 041a01ccfb..a1922338d1 100644 --- a/engines/titanic/support/time_event_info.cpp +++ b/engines/titanic/support/time_event_info.cpp @@ -100,7 +100,7 @@ CTimeEventInfo::CTimeEventInfo() : ListItem(), _lockCounter(0), CTimeEventInfo::CTimeEventInfo(uint ticks, uint f14, uint firstDuration, uint duration, CTreeItem *target, int timerVal3, const CString &action) : ListItem(), _lockCounter(0), _field14(f14), _firstDuration(firstDuration), - _duration(duration), _target(target), _field2C(0), _field30(0), + _duration(duration), _target(target), _actionVal(0), _field2C(0), _field30(0), _timerCtr(0), _lastTimerTicks(ticks), _field3C(0), _done(false), _field44(true) { _id = _nextId++; |