aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/titanic/core/project_item.cpp8
-rw-r--r--engines/titanic/core/project_item.h16
-rw-r--r--engines/titanic/game_manager.cpp19
-rw-r--r--engines/titanic/game_manager.h14
-rw-r--r--engines/titanic/sound/music_room.cpp5
-rw-r--r--engines/titanic/sound/music_room.h5
-rw-r--r--engines/titanic/sound/sound.cpp8
-rw-r--r--engines/titanic/sound/sound.h5
-rw-r--r--engines/titanic/sound/sound_manager.h6
-rw-r--r--engines/titanic/true_talk/true_talk_manager.cpp4
-rw-r--r--engines/titanic/true_talk/true_talk_manager.h5
11 files changed, 82 insertions, 13 deletions
diff --git a/engines/titanic/core/project_item.cpp b/engines/titanic/core/project_item.cpp
index bf31388963..90e6d06ed1 100644
--- a/engines/titanic/core/project_item.cpp
+++ b/engines/titanic/core/project_item.cpp
@@ -142,8 +142,9 @@ void CProjectItem::resetGameManager() {
void CProjectItem::loadGame(int slotId) {
CompressedFile file;
- // Clear any existing project contents
+ // Clear any existing project contents and call preload code
clear();
+ preLoad();
// Open either an existing savegame slot or the new game template
if (slotId >= 0) {
@@ -272,6 +273,11 @@ void CProjectItem::saveData(SimpleFile *file, CTreeItem *item) const {
}
}
+void CProjectItem::preLoad() {
+ if (_gameManager)
+ _gameManager->preLoad();
+}
+
void CProjectItem::postLoad() {
CGameManager *gameManager = getGameManager();
if (gameManager)
diff --git a/engines/titanic/core/project_item.h b/engines/titanic/core/project_item.h
index bb96f81245..87dfc3f0dd 100644
--- a/engines/titanic/core/project_item.h
+++ b/engines/titanic/core/project_item.h
@@ -54,7 +54,6 @@ public:
* Load the data for the class from file
*/
virtual void load(SimpleFile *file);
-
};
/**
@@ -78,6 +77,16 @@ private:
* Called during save, iterates through the children to do some stuff
*/
void buildFilesList();
+
+ /**
+ * Called at the beginning of loading a game
+ */
+ void preLoad();
+
+ /**
+ * Does post-loading processing
+ */
+ void postLoad();
/**
* Finds the first child instance of a given class type
@@ -98,11 +107,6 @@ private:
* Save project data to the passed file
*/
void saveData(SimpleFile *file, CTreeItem *item) const;
-
- /**
- * Does post-loading processing
- */
- void postLoad();
public:
CLASSDEF
CProjectItem();
diff --git a/engines/titanic/game_manager.cpp b/engines/titanic/game_manager.cpp
index a2732d8b1c..b181edcaeb 100644
--- a/engines/titanic/game_manager.cpp
+++ b/engines/titanic/game_manager.cpp
@@ -48,7 +48,7 @@ CGameManager::CGameManager(CProjectItem *project, CGameView *gameView):
_inputHandler(this), _inputTranslator(&_inputHandler),
_gameState(this), _sound(this), _musicRoom(this),
_field30(0), _field34(0), _field4C(0),
- _dragItem(nullptr), _field54(0), _tickCount1(0), _tickCount2(0) {
+ _dragItem(nullptr), _field54(0), _lastDiskTicksCount(0), _tickCount2(0) {
_videoSurface1 = nullptr;
_videoSurface2 = CScreenManager::_screenManagerPtr->createSurface(600, 340);
@@ -65,6 +65,15 @@ void CGameManager::load(SimpleFile *file) {
_sound.load(file);
}
+void CGameManager::preLoad() {
+ updateDiskTicksCount();
+ _list.destroyContents();
+ _field34 = 0;
+
+ _trueTalkManager.preLoad();
+ _sound.preLoad();
+}
+
void CGameManager::postLoad(CProjectItem *project) {
if (_gameView) {
_gameView->postLoad();
@@ -77,11 +86,11 @@ void CGameManager::postLoad(CProjectItem *project) {
}
// Signal to anything interested that the game has been loaded
- CLoadSuccessMsg msg(_tickCount1 - _tickCount2);
+ CLoadSuccessMsg msg(_lastDiskTicksCount - _tickCount2);
msg.execute(project, nullptr, MSGFLAG_SCAN);
// Signal to any registered list items
- _list.postLoad(_tickCount1, _project);
+ _list.postLoad(_lastDiskTicksCount, _project);
// Signal the true talk manager and sound
_trueTalkManager.postLoad();
@@ -100,4 +109,8 @@ void CGameManager::update() {
warning("TODO: CGameManager::update");
}
+void CGameManager::updateDiskTicksCount() {
+ _lastDiskTicksCount = g_vm->_events->getTicksCount();
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/game_manager.h b/engines/titanic/game_manager.h
index a331f3a0b4..4380e4f8ec 100644
--- a/engines/titanic/game_manager.h
+++ b/engines/titanic/game_manager.h
@@ -54,7 +54,6 @@ class CGameManager {
private:
CGameView *_gameView;
CSound _sound;
- CMusicRoom _musicRoom;
CTrueTalkManager _trueTalkManager;
CGameManagerList _list;
int _field30;
@@ -63,7 +62,7 @@ private:
int _field4C;
int _field54;
CVideoSurface *_videoSurface2;
- uint _tickCount1;
+ uint _lastDiskTicksCount;
uint _tickCount2;
public:
CProjectItem *_project;
@@ -72,6 +71,7 @@ public:
CInputHandler _inputHandler;
CInputTranslator _inputTranslator;
CTreeItem *_dragItem;
+ CMusicRoom _musicRoom;
public:
CGameManager(CProjectItem *project, CGameView *gameView);
~CGameManager();
@@ -82,10 +82,20 @@ public:
void load(SimpleFile *file);
/**
+ * Called when a game is about to be loaded
+ */
+ void preLoad();
+
+ /**
* Called after loading a game has finished
*/
void postLoad(CProjectItem *project);
+ /**
+ * Updates the game time when the last disk access started
+ */
+ void updateDiskTicksCount();
+
CViewItem *getView() { return _gameState._gameLocation.getView(); }
/**
diff --git a/engines/titanic/sound/music_room.cpp b/engines/titanic/sound/music_room.cpp
index 2b959a0847..593c572277 100644
--- a/engines/titanic/sound/music_room.cpp
+++ b/engines/titanic/sound/music_room.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/sound/music_room.h"
+#include "common/textconsole.h"
namespace Titanic {
@@ -28,4 +29,8 @@ CMusicRoom::CMusicRoom(CGameManager *gameManager) :
_gameManager(gameManager) {
}
+void CMusicRoom::preLoad() {
+ warning("TODO: CMusicRoom::preLoad");
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/sound/music_room.h b/engines/titanic/sound/music_room.h
index 7fcd99db1e..ce262a2b99 100644
--- a/engines/titanic/sound/music_room.h
+++ b/engines/titanic/sound/music_room.h
@@ -32,6 +32,11 @@ public:
CGameManager *_gameManager;
public:
CMusicRoom(CGameManager *owner);
+
+ /**
+ * Called when a game is about to be loaded
+ */
+ void preLoad();
};
} // End of namespace Titanic
diff --git a/engines/titanic/sound/sound.cpp b/engines/titanic/sound/sound.cpp
index 35c1c708a6..062e43debc 100644
--- a/engines/titanic/sound/sound.cpp
+++ b/engines/titanic/sound/sound.cpp
@@ -21,6 +21,7 @@
*/
#include "titanic/sound/sound.h"
+#include "titanic/game_manager.h"
namespace Titanic {
@@ -35,4 +36,11 @@ void CSound::load(SimpleFile *file) {
_soundManager.load(file);
}
+void CSound::preLoad() {
+ _soundManager.preLoad();
+
+ if (_gameManager)
+ _gameManager->_musicRoom.preLoad();
+}
+
} // End of namespace Titanic z
diff --git a/engines/titanic/sound/sound.h b/engines/titanic/sound/sound.h
index a78bc79741..1b98507a93 100644
--- a/engines/titanic/sound/sound.h
+++ b/engines/titanic/sound/sound.h
@@ -48,6 +48,11 @@ public:
void load(SimpleFile *file);
/**
+ * Called when a game is about to be loaded
+ */
+ void preLoad();
+
+ /**
* Called when loading a game is complete
*/
void postLoad() { _soundManager.postLoad(); }
diff --git a/engines/titanic/sound/sound_manager.h b/engines/titanic/sound/sound_manager.h
index cb88b6684c..6a2e5a79d3 100644
--- a/engines/titanic/sound/sound_manager.h
+++ b/engines/titanic/sound/sound_manager.h
@@ -57,7 +57,11 @@ public:
virtual void proc20(int v) { _field8 = v; }
virtual void proc21(int v) { _fieldC = v; }
virtual void proc22(int v) { _field10 = v; }
- virtual void proc23() { proc10(); }
+
+ /**
+ * Called when a game is about to be loaded
+ */
+ virtual void preLoad() { proc10(); }
/**
* Load the data for the class from file
diff --git a/engines/titanic/true_talk/true_talk_manager.cpp b/engines/titanic/true_talk/true_talk_manager.cpp
index f176b2f3cf..5afaeb3873 100644
--- a/engines/titanic/true_talk/true_talk_manager.cpp
+++ b/engines/titanic/true_talk/true_talk_manager.cpp
@@ -175,4 +175,8 @@ void CTrueTalkManager::saveNPC(SimpleFile *file, int charId) const {
}
}
+void CTrueTalkManager::preLoad() {
+ warning("TODO: CTrueTalkManager::preLoad");
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/true_talk_manager.h b/engines/titanic/true_talk/true_talk_manager.h
index 904f3c479b..ac36102cf0 100644
--- a/engines/titanic/true_talk/true_talk_manager.h
+++ b/engines/titanic/true_talk/true_talk_manager.h
@@ -78,6 +78,11 @@ public:
void load(SimpleFile *file);
/**
+ * Called when a game is about to be loaded
+ */
+ void preLoad();
+
+ /**
* Called when loading a game is complete
*/
void postLoad() {}