diff --git a/engines/titanic/true_talk/tt_word.cpp b/engines/titanic/true_talk/tt_word.cpp index 55de72b3d6d..4d4f968efd9 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 9bdb810ae6c..d9127514bb9 100644 --- a/engines/titanic/true_talk/tt_word.h +++ b/engines/titanic/true_talk/tt_word.h @@ -78,6 +78,11 @@ public: const char *c_str() const { return _string.c_str(); } operator const char *() const { return c_str(); } + /** + * Return the status of the word + */ + TTStringStatus getStatus() const { return _status; } + /** * Creates a copy of the word */