aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/true_talk
diff options
context:
space:
mode:
authorPaul Gilbert2016-05-08 14:37:18 -0400
committerPaul Gilbert2016-07-10 16:38:52 -0400
commit71179e376363c1c59b9c7819bfbe89196c7bbc23 (patch)
tree6786bd7f0877f9d8d4b06f4c9259951cf9414a5b /engines/titanic/true_talk
parentc4375b134a57e3217d24e146592560f1ba9342d7 (diff)
downloadscummvm-rg350-71179e376363c1c59b9c7819bfbe89196c7bbc23.tar.gz
scummvm-rg350-71179e376363c1c59b9c7819bfbe89196c7bbc23.tar.bz2
scummvm-rg350-71179e376363c1c59b9c7819bfbe89196c7bbc23.zip
TITANIC: More script handler setup
Diffstat (limited to 'engines/titanic/true_talk')
-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
6 files changed, 63 insertions, 15 deletions
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();