diff options
-rw-r--r-- | engines/titanic/true_talk/tt_word.cpp | 34 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_word.h | 5 |
2 files changed, 38 insertions, 1 deletions
diff --git a/engines/titanic/true_talk/tt_word.cpp b/engines/titanic/true_talk/tt_word.cpp index 55de72b3d6..4d4f968efd 100644 --- a/engines/titanic/true_talk/tt_word.cpp +++ b/engines/titanic/true_talk/tt_word.cpp @@ -33,7 +33,39 @@ TTword::TTword(TTString &str, int mode, int val2) : _string(str), } TTword::TTword(TTword *src) { - // TODO + if (src->getStatus() != SS_VALID) { + _status = SS_5; + return; + } + + _string = src->_string; + _wordMode = src->_wordMode; + _field1C = src->_field1C; + _field20 = src->_field20; + _synP = nullptr; + + TTsynonym *priorSyn = nullptr; + for (TTsynonym *synP = _synP; synP && !_status;) { + TTsynonym *newSyn = new TTsynonym(synP); + if (!newSyn) { + _status = SS_7; + } else { + newSyn->_pPrior = priorSyn; + newSyn->_pNext = nullptr; + + if (priorSyn) { + priorSyn->_pNext = newSyn; + } else { + _synP = newSyn; + } + + priorSyn = newSyn; + } + } + + _pNext = src->_pNext; + _field24 = src->_field24; + _field28 = src->_field28; } void TTword::deleteSiblings() { diff --git a/engines/titanic/true_talk/tt_word.h b/engines/titanic/true_talk/tt_word.h index 9bdb810ae6..d9127514bb 100644 --- a/engines/titanic/true_talk/tt_word.h +++ b/engines/titanic/true_talk/tt_word.h @@ -79,6 +79,11 @@ public: operator const char *() const { return c_str(); } /** + * Return the status of the word + */ + TTStringStatus getStatus() const { return _status; } + + /** * Creates a copy of the word */ virtual TTword *copy(); |