diff options
| author | Paul Gilbert | 2016-05-08 14:37:18 -0400 | 
|---|---|---|
| committer | Paul Gilbert | 2016-07-10 16:38:52 -0400 | 
| commit | 71179e376363c1c59b9c7819bfbe89196c7bbc23 (patch) | |
| tree | 6786bd7f0877f9d8d4b06f4c9259951cf9414a5b | |
| parent | c4375b134a57e3217d24e146592560f1ba9342d7 (diff) | |
| download | scummvm-rg350-71179e376363c1c59b9c7819bfbe89196c7bbc23.tar.gz scummvm-rg350-71179e376363c1c59b9c7819bfbe89196c7bbc23.tar.bz2 scummvm-rg350-71179e376363c1c59b9c7819bfbe89196c7bbc23.zip  | |
TITANIC: More script handler setup
| -rw-r--r-- | engines/titanic/support/file_reader.cpp | 4 | ||||
| -rw-r--r-- | engines/titanic/support/file_reader.h | 2 | ||||
| -rw-r--r-- | engines/titanic/titanic.cpp | 2 | ||||
| -rw-r--r-- | engines/titanic/titanic.h | 3 | ||||
| -rw-r--r-- | engines/titanic/true_talk/script_handler.cpp | 17 | ||||
| -rw-r--r-- | engines/titanic/true_talk/script_handler.h | 33 | ||||
| -rw-r--r-- | engines/titanic/true_talk/tt_npc_script.h | 13 | ||||
| -rw-r--r-- | engines/titanic/true_talk/tt_room_script.cpp | 5 | ||||
| -rw-r--r-- | engines/titanic/true_talk/tt_room_script.h | 6 | ||||
| -rw-r--r-- | engines/titanic/true_talk/tt_script_base.h | 4 | 
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();  | 
