diff options
author | Paul Gilbert | 2016-05-17 22:36:33 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-07-15 19:12:53 -0400 |
commit | c762308bff46ccb900fa68fc40e72e235c862d89 (patch) | |
tree | 04cdf3edfbaa2e359872f09cf1ca0dbd23903234 | |
parent | 5b42ae357ebdf5fd2665351a41127fc76167beb5 (diff) | |
download | scummvm-rg350-c762308bff46ccb900fa68fc40e72e235c862d89.tar.gz scummvm-rg350-c762308bff46ccb900fa68fc40e72e235c862d89.tar.bz2 scummvm-rg350-c762308bff46ccb900fa68fc40e72e235c862d89.zip |
TITANIC: Implement TTsentence copy
-rw-r--r-- | engines/titanic/true_talk/tt_sentence.cpp | 30 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_sentence.h | 5 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_sentence_node.cpp | 5 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_sentence_node.h | 3 |
4 files changed, 40 insertions, 3 deletions
diff --git a/engines/titanic/true_talk/tt_sentence.cpp b/engines/titanic/true_talk/tt_sentence.cpp index e39a627694..446d79ab82 100644 --- a/engines/titanic/true_talk/tt_sentence.cpp +++ b/engines/titanic/true_talk/tt_sentence.cpp @@ -35,7 +35,7 @@ TTsentenceSubBase::TTsentenceSubBase() : _field0(0), _field4(0), _field8(0), TTsentence::TTsentence(int inputCtr, const TTstring &line, CScriptHandler *owner, TTroomScript *roomScript, TTnpcScript *npcScript) : _owner(owner), _field2C(1), _inputCtr(inputCtr), _field34(0), - _field38(0), _initialLine(line), _field4C(0), _roomScript(roomScript), + _field38(0), _initialLine(line), _nodesP(nullptr), _roomScript(roomScript), _npcScript(npcScript), _field58(0), _field5C(0) { _status = _initialLine.isValid() && _normalizedLine.isValid() ? SS_11: SS_VALID; } @@ -46,7 +46,35 @@ TTsentence::TTsentence(const TTsentence *src) : _initialLine(src->_initialLine), } void TTsentence::copyFrom(const TTsentence &src) { + if (!src.getStatus()) + _status = SS_5; + else if (!src._initialLine.isValid() || !src._normalizedLine.isValid()) + _status = SS_11; + else + _status = SS_VALID; + _inputCtr = src._inputCtr; + _owner = src._owner; + _roomScript = src._roomScript; + _npcScript = src._npcScript; + _field58 = src._field58; + _field5C = src._field5C; + _field34 = src._field34; + _field38 = src._field38; + _field2C = src._field2C; + _nodesP = nullptr; + + if (src._nodesP) { + // Source has processed nodes, so duplicate them + for (TTsentenceNode *node = src._nodesP; node; + node = static_cast<TTsentenceNode *>(node->_nextP)) { + TTsentenceNode *newNode = new TTsentenceNode(node->_val); + if (_nodesP) + _nodesP->addNode(newNode); + else + _nodesP = newNode; + } + } } void TTsentence::set38(int val) { diff --git a/engines/titanic/true_talk/tt_sentence.h b/engines/titanic/true_talk/tt_sentence.h index 784177dd3a..4980f2439c 100644 --- a/engines/titanic/true_talk/tt_sentence.h +++ b/engines/titanic/true_talk/tt_sentence.h @@ -25,6 +25,7 @@ #include "titanic/true_talk/tt_npc_script.h" #include "titanic/true_talk/tt_room_script.h" +#include "titanic/true_talk/tt_sentence_node.h" #include "titanic/true_talk/tt_string.h" namespace Titanic { @@ -59,7 +60,7 @@ private: int _inputCtr; int _field34; int _field38; - int _field4C; + TTsentenceNode *_nodesP; TTroomScript *_roomScript; TTnpcScript *_npcScript; int _field58; @@ -79,6 +80,8 @@ public: TTsentence(const TTsentence *src); void set38(int v); + + int getStatus() const { return _status; } }; } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_sentence_node.cpp b/engines/titanic/true_talk/tt_sentence_node.cpp index 46a1412a2a..2bec287b44 100644 --- a/engines/titanic/true_talk/tt_sentence_node.cpp +++ b/engines/titanic/true_talk/tt_sentence_node.cpp @@ -25,7 +25,10 @@ namespace Titanic { -TTsentenceNode::TTsentenceNode() : TTnode() { +TTsentenceNode::TTsentenceNode() : TTnode(), _val(0) { +} + +TTsentenceNode::TTsentenceNode(int val) : TTnode(), _val(val) { } } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_sentence_node.h b/engines/titanic/true_talk/tt_sentence_node.h index 5d22454d82..09d106cb71 100644 --- a/engines/titanic/true_talk/tt_sentence_node.h +++ b/engines/titanic/true_talk/tt_sentence_node.h @@ -29,7 +29,10 @@ namespace Titanic { class TTsentenceNode : public TTnode { public: + int _val; +public: TTsentenceNode(); + TTsentenceNode(int val); }; } // End of namespace Titanic |