aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/true_talk/tt_word.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2016-05-12 20:51:32 -0400
committerPaul Gilbert2016-07-10 16:39:25 -0400
commit06876335cd027529b3719cdfc6d255b00a592b02 (patch)
treec9c65b9d8f385f86bd37f0e0d4e756debff2124f /engines/titanic/true_talk/tt_word.cpp
parentae5cd8d8dda5b66a82d33b4164c06b3313522e10 (diff)
downloadscummvm-rg350-06876335cd027529b3719cdfc6d255b00a592b02.tar.gz
scummvm-rg350-06876335cd027529b3719cdfc6d255b00a592b02.tar.bz2
scummvm-rg350-06876335cd027529b3719cdfc6d255b00a592b02.zip
TITANIC: Implement TTword copy
Diffstat (limited to 'engines/titanic/true_talk/tt_word.cpp')
-rw-r--r--engines/titanic/true_talk/tt_word.cpp34
1 files changed, 33 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() {