aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2016-07-23 17:21:38 -0400
committerPaul Gilbert2016-07-23 17:21:38 -0400
commitd979dcd020d65aa0019d7a53c1dcd8b4f4a0f909 (patch)
treeb4dea5cd29cfe4f19e96b4ac48750a6caf8e0daa
parent00c568e17572ce2ac4e9c97c21c00a734951ae9a (diff)
downloadscummvm-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.cpp10
-rw-r--r--engines/titanic/game/cdrom.cpp2
-rw-r--r--engines/titanic/game/cdrom_tray.cpp46
-rw-r--r--engines/titanic/game/cdrom_tray.h2
-rw-r--r--engines/titanic/game/computer_screen.cpp6
-rw-r--r--engines/titanic/game_state.cpp14
-rw-r--r--engines/titanic/game_state.h6
-rw-r--r--engines/titanic/input_handler.cpp2
-rw-r--r--engines/titanic/main_game_window.cpp8
-rw-r--r--engines/titanic/support/avi_surface.h2
-rw-r--r--engines/titanic/support/files_manager.cpp2
-rw-r--r--engines/titanic/support/time_event_info.cpp2
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++;