aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/titanic/support/file_reader.cpp4
-rw-r--r--engines/titanic/support/file_reader.h2
-rw-r--r--engines/titanic/titanic.cpp2
-rw-r--r--engines/titanic/titanic.h3
-rw-r--r--engines/titanic/true_talk/script_handler.cpp17
-rw-r--r--engines/titanic/true_talk/script_handler.h33
-rw-r--r--engines/titanic/true_talk/tt_npc_script.h13
-rw-r--r--engines/titanic/true_talk/tt_room_script.cpp5
-rw-r--r--engines/titanic/true_talk/tt_room_script.h6
-rw-r--r--engines/titanic/true_talk/tt_script_base.h4
10 files changed, 74 insertions, 15 deletions
diff --git a/engines/titanic/support/file_reader.cpp b/engines/titanic/support/file_reader.cpp
index c332d9995c..308d748704 100644
--- a/engines/titanic/support/file_reader.cpp
+++ b/engines/titanic/support/file_reader.cpp
@@ -24,6 +24,10 @@
namespace Titanic {
+void CFileReader::reset() {
+ _file.close();
+ _field18 = 0;
+}
} // End of namespace Titanic
diff --git a/engines/titanic/support/file_reader.h b/engines/titanic/support/file_reader.h
index 7e9eb1ac20..23ab0a6fce 100644
--- a/engines/titanic/support/file_reader.h
+++ b/engines/titanic/support/file_reader.h
@@ -30,7 +30,9 @@ namespace Titanic {
class CFileReader {
public:
Common::File _file;
+ int _field18;
public:
+ void reset();
};
} // End of namespace Titanic
diff --git a/engines/titanic/titanic.cpp b/engines/titanic/titanic.cpp
index f1d24a0a1e..e70a208552 100644
--- a/engines/titanic/titanic.cpp
+++ b/engines/titanic/titanic.cpp
@@ -53,6 +53,8 @@ TitanicEngine::TitanicEngine(OSystem *syst, const TitanicGameDescription *gameDe
_window = nullptr;
_screen = nullptr;
_screenManager = nullptr;
+ _scriptHandler = nullptr;
+ _script = nullptr;
}
TitanicEngine::~TitanicEngine() {
diff --git a/engines/titanic/titanic.h b/engines/titanic/titanic.h
index b773bec332..653ace534b 100644
--- a/engines/titanic/titanic.h
+++ b/engines/titanic/titanic.h
@@ -38,6 +38,7 @@
#include "titanic/support/movie.h"
#include "titanic/support/screen_manager.h"
#include "titanic/support/string.h"
+#include "titanic/true_talk/tt_script_base.h"
/**
* This is the namespace of the Titanic engine.
@@ -117,6 +118,8 @@ public:
OSScreenManager *_screenManager;
CMainGameWindow *_window;
Common::RandomSource _randomSource;
+ CScriptHandler *_scriptHandler;
+ TTScriptBase *_script;
CFileReader _fileReader;
CMovieList _activeMovies;
CString _itemNames[TOTAL_ITEMS];
diff --git a/engines/titanic/true_talk/script_handler.cpp b/engines/titanic/true_talk/script_handler.cpp
index beb5bee996..bd98aad15f 100644
--- a/engines/titanic/true_talk/script_handler.cpp
+++ b/engines/titanic/true_talk/script_handler.cpp
@@ -29,17 +29,26 @@ namespace Titanic {
CScriptHandler::CScriptHandler(CTitleEngine *owner, int val1, int val2) :
_owner(owner), _script(owner->_script), _reader(g_vm->_fileReader),
- _vocab(val2), _field10(0), _field14(0), _field18(0), _inputCtr(0),
+ _vocab(val2), _sub1(), _sub2(this), _field10(0), _inputCtr(0),
_field20(0), _field24(0), _field28(0), _field2C(0), _field30(0) {
-
+ g_vm->_scriptHandler = this;
+ g_vm->_script = _script;
}
-int CScriptHandler::scriptChanged(TTRoomScript *roomScript, TTNpcScript *npcScript, uint dialogueId) {
+ScriptChangedResult CScriptHandler::scriptChanged(TTRoomScript *roomScript, TTNpcScript *npcScript, uint dialogueId) {
if (!npcScript || !roomScript) {
++_inputCtr;
- return 5;
+ return SCR_5;
}
+ ScriptChangedResult result = roomScript->notifyScript(npcScript, dialogueId);
+ if (result == SCR_1)
+ result = npcScript->notifyScript(roomScript, dialogueId);
+
+ if (result != SCR_3 && result != SCR_4)
+ return result;
+
+ error("TODO: CScriptHandler::scriptChanged");
}
void CScriptHandler::processInput(TTRoomScript *roomScript, TTNpcScript *npcScript,
diff --git a/engines/titanic/true_talk/script_handler.h b/engines/titanic/true_talk/script_handler.h
index fba1e41a2e..16dff1bf36 100644
--- a/engines/titanic/true_talk/script_handler.h
+++ b/engines/titanic/true_talk/script_handler.h
@@ -32,6 +32,33 @@
namespace Titanic {
class CTitleEngine;
+class CScriptHandler;
+
+class CScriptHandlerSub1 {
+public:
+ int _field0;
+ int _field4;
+ int _field8;
+ int _fieldC;
+ int _field10;
+public:
+ CScriptHandlerSub1() : _field0(0), _field4(0), _field8(0),
+ _fieldC(0), _field10(0) {}
+};
+
+class CScriptHandlerSub2 {
+public:
+ CScriptHandler *_owner;
+ int _field4;
+ int _field8;
+ int _fieldC;
+ int _field10;
+ int _field14;
+ int _field18;
+public:
+ CScriptHandlerSub2(CScriptHandler *owner) : _owner(owner), _field4(0), _field8(0),
+ _fieldC(0), _field10(0), _field14(0), _field18(0) {}
+};
class CScriptHandler {
private:
@@ -40,8 +67,8 @@ private:
CFileReader &_reader;
STVocab _vocab;
int _field10;
- int _field14;
- int _field18;
+ CScriptHandlerSub1 _sub1;
+ CScriptHandlerSub2 _sub2;
int _inputCtr;
int _field20;
int _field24;
@@ -54,7 +81,7 @@ public:
/**
* Set the character and room
*/
- int scriptChanged(TTRoomScript *roomScript, TTNpcScript *npcScript, uint dialogueId);
+ ScriptChangedResult scriptChanged(TTRoomScript *roomScript, TTNpcScript *npcScript, uint dialogueId);
void processInput(TTRoomScript *roomScript, TTNpcScript *npcScript,
const TTString &line);
diff --git a/engines/titanic/true_talk/tt_npc_script.h b/engines/titanic/true_talk/tt_npc_script.h
index c11dc6d0b8..f3df956850 100644
--- a/engines/titanic/true_talk/tt_npc_script.h
+++ b/engines/titanic/true_talk/tt_npc_script.h
@@ -48,7 +48,7 @@ public:
/**
* Called when the script/id changes
*/
- virtual int scriptChanged(TTScriptBase *roomScript, uint id) = 0;
+ virtual ScriptChangedResult scriptChanged(TTScriptBase *roomScript, uint id) = 0;
virtual int proc11() const = 0;
virtual int proc12() const = 0;
@@ -87,8 +87,8 @@ public:
/**
* Called when the script/id changes
*/
- virtual int scriptChanged(TTScriptBase *roomScript, uint id) {
- return 2;
+ virtual ScriptChangedResult scriptChanged(TTScriptBase *roomScript, uint id) {
+ return SCR_2;
}
virtual int proc11() const;
@@ -125,6 +125,13 @@ public:
virtual int proc37() const;
void preLoad();
+
+ /**
+ * Called with the script and id changes
+ */
+ ScriptChangedResult notifyScript(TTScriptBase *npcScript, int id) {
+ return scriptChanged(npcScript, id);
+ }
};
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/tt_room_script.cpp b/engines/titanic/true_talk/tt_room_script.cpp
index 37fba1f1a9..2ade0495cf 100644
--- a/engines/titanic/true_talk/tt_room_script.cpp
+++ b/engines/titanic/true_talk/tt_room_script.cpp
@@ -53,10 +53,11 @@ void TTRoomScript::proc9() {
warning("TODO");
}
-int TTRoomScript::scriptChanged(TTScriptBase *npcScript, int id) {
+ScriptChangedResult TTRoomScript::scriptChanged(TTScriptBase *npcScript, int id) {
if (id == 1)
_field54 = 1;
- return 1;
+
+ return SCR_1;
}
void TTRoomScript::proc11() {
diff --git a/engines/titanic/true_talk/tt_room_script.h b/engines/titanic/true_talk/tt_room_script.h
index f64570995c..30133b24da 100644
--- a/engines/titanic/true_talk/tt_room_script.h
+++ b/engines/titanic/true_talk/tt_room_script.h
@@ -42,7 +42,7 @@ public:
/**
* Called when the script changes
*/
- virtual int scriptChanged(TTScriptBase *npcScript, int id) = 0;
+ virtual ScriptChangedResult scriptChanged(TTScriptBase *npcScript, int id) = 0;
virtual void proc11() = 0;
};
@@ -62,14 +62,14 @@ public:
/**
* Called when the script changes
*/
- virtual int scriptChanged(TTScriptBase *npcScript, int id);
+ virtual ScriptChangedResult scriptChanged(TTScriptBase *npcScript, int id);
virtual void proc11();
/**
* Called with the new script and id
*/
- int notifyScript(TTScriptBase *npcScript, int id) {
+ ScriptChangedResult notifyScript(TTScriptBase *npcScript, int id) {
return scriptChanged(npcScript, id);
}
};
diff --git a/engines/titanic/true_talk/tt_script_base.h b/engines/titanic/true_talk/tt_script_base.h
index 4021a0b738..fe999ab290 100644
--- a/engines/titanic/true_talk/tt_script_base.h
+++ b/engines/titanic/true_talk/tt_script_base.h
@@ -27,6 +27,10 @@
namespace Titanic {
+enum ScriptChangedResult {
+ SCR_1 = 1, SCR_2 = 2, SCR_3 = 3, SCR_4 = 4, SCR_5 = 5
+};
+
class TTScriptBase {
private:
void reset();