From 71179e376363c1c59b9c7819bfbe89196c7bbc23 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sun, 8 May 2016 14:37:18 -0400 Subject: TITANIC: More script handler setup --- engines/titanic/support/file_reader.cpp | 4 ++++ engines/titanic/support/file_reader.h | 2 ++ engines/titanic/titanic.cpp | 2 ++ engines/titanic/titanic.h | 3 +++ engines/titanic/true_talk/script_handler.cpp | 17 ++++++++++---- engines/titanic/true_talk/script_handler.h | 33 +++++++++++++++++++++++++--- engines/titanic/true_talk/tt_npc_script.h | 13 ++++++++--- engines/titanic/true_talk/tt_room_script.cpp | 5 +++-- engines/titanic/true_talk/tt_room_script.h | 6 ++--- engines/titanic/true_talk/tt_script_base.h | 4 ++++ 10 files changed, 74 insertions(+), 15 deletions(-) (limited to 'engines') 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(); -- cgit v1.2.3