aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/titanic/true_talk/tt_word.cpp34
-rw-r--r--engines/titanic/true_talk/tt_word.h5
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();