diff options
author | Paul Gilbert | 2016-05-13 20:50:47 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-07-10 16:39:31 -0400 |
commit | eb948946885bc128c01f5c09da0bbdba95d2c472 (patch) | |
tree | 28baa25dd2090c629bf47ddb5aface40758bdf26 /engines | |
parent | 2f9d7f228459db6877ea5afec01f00110d17931a (diff) | |
download | scummvm-rg350-eb948946885bc128c01f5c09da0bbdba95d2c472.tar.gz scummvm-rg350-eb948946885bc128c01f5c09da0bbdba95d2c472.tar.bz2 scummvm-rg350-eb948946885bc128c01f5c09da0bbdba95d2c472.zip |
TITANIC: Implement TTword hierarchy virtual methods
Diffstat (limited to 'engines')
26 files changed, 263 insertions, 104 deletions
diff --git a/engines/titanic/support/simple_file.cpp b/engines/titanic/support/simple_file.cpp index 61d941b680..f4351f920f 100644 --- a/engines/titanic/support/simple_file.cpp +++ b/engines/titanic/support/simple_file.cpp @@ -73,7 +73,7 @@ size_t SimpleFile::unsafeRead(void *dst, size_t count) { return _inStream->read(dst, count); } -size_t SimpleFile::write(const void *src, size_t count) { +size_t SimpleFile::write(const void *src, size_t count) const { assert(_outStream); return _outStream->write(src, count); } @@ -237,12 +237,12 @@ void SimpleFile::readBuffer(char *buffer, size_t count) { } } -void SimpleFile::writeLine(const CString &str) { +void SimpleFile::writeLine(const CString &str) const { write(str.c_str(), str.size()); write("\r\n", 2); } -void SimpleFile::writeString(const CString &str) { +void SimpleFile::writeString(const CString &str) const { if (str.empty()) return; @@ -279,58 +279,69 @@ void SimpleFile::writeString(const CString &str) { } } -void SimpleFile::writeQuotedString(const CString &str) { +void SimpleFile::writeQuotedString(const CString &str) const { write("\"", 1); writeString(str); write("\" ", 2); } -void SimpleFile::writeQuotedLine(const CString &str, int indent) { +void SimpleFile::writeQuotedLine(const CString &str, int indent) const { writeIndent(indent); writeQuotedString(str); write("\n", 1); } -void SimpleFile::writeNumber(int val) { +void SimpleFile::writeNumber(int val) const { CString str = CString::format("%d ", val); write(str.c_str(), str.size()); } -void SimpleFile::writeNumberLine(int val, int indent) { +void SimpleFile::writeNumberLine(int val, int indent) const { writeIndent(indent); writeNumber(val); write("\n", 1); } -void SimpleFile::writeFloat(double val) { +void SimpleFile::writeFloat(double val) const { Common::String valStr = Common::String::format("%f ", val); write(valStr.c_str(), valStr.size()); } -void SimpleFile::writeFloatLine(double val, int indent) { +void SimpleFile::writeFloatLine(double val, int indent) const { writeIndent(indent); writeFloat(val); write("\n", 1); } -void SimpleFile::writePoint(const Point &pt, int indent) { +void SimpleFile::writePoint(const Point &pt, int indent) const { writeIndent(indent); writeNumber(pt.x); writeNumber(pt.y); write("\n", 1); } -void SimpleFile::writeRect(const Rect &r, int indent) { +void SimpleFile::writeRect(const Rect &r, int indent) const { writePoint(Point(r.left, r.top), indent); writePoint(Point(r.right, r.bottom), indent); } -void SimpleFile::writeBounds(const Rect &r, int indent) { +void SimpleFile::writeBounds(const Rect &r, int indent) const { writePoint(Point(r.left, r.top), indent); writePoint(Point(r.width(), r.height()), indent); } -void SimpleFile::writeIndent(uint indent) { +void SimpleFile::writeFormat(const char *format, ...) const { + // Convert the format specifier and params to a string + va_list va; + va_start(va, format); + CString line = CString::vformat(format, va); + va_end(va); + + // Write out the string + write(format, strlen(format)); +} + +void SimpleFile::writeIndent(uint indent) const { for (uint idx = 0; idx < indent; ++idx) write("\t", 1); } @@ -383,7 +394,7 @@ bool SimpleFile::scanf(const char *format, ...) { *param = readNumber(); if (!eos()) - _inStream->skip(-1); + _inStream->seek(-1, SEEK_CUR); } else if (formatStr.hasPrefix("%s")) { // Read in text until the next space formatStr = CString(formatStr.c_str() + 2); @@ -393,7 +404,7 @@ bool SimpleFile::scanf(const char *format, ...) { *str += c; if (!eos()) - _inStream->skip(-1); + _inStream->seek(-1, SEEK_CUR); } } @@ -408,7 +419,7 @@ void SimpleFile::skipSpaces() { safeRead(&c, 1); if (!eos()) - _inStream->skip(-1); + _inStream->seek(-1, SEEK_CUR); } /*------------------------------------------------------------------------*/ diff --git a/engines/titanic/support/simple_file.h b/engines/titanic/support/simple_file.h index 2a4cfdbbc0..cf89e5d72c 100644 --- a/engines/titanic/support/simple_file.h +++ b/engines/titanic/support/simple_file.h @@ -89,7 +89,7 @@ public: /** * Write out data */ - virtual size_t write(const void *src, size_t count); + virtual size_t write(const void *src, size_t count) const; /** * Read a byte @@ -139,62 +139,67 @@ public: /** * Write a string line */ - void writeLine(const CString &str); + void writeLine(const CString &str) const; /** * Write a string */ - void writeString(const CString &str); + void writeString(const CString &str) const; /** * Write a quoted string */ - void writeQuotedString(const CString &str); + void writeQuotedString(const CString &str) const; /** * Write a quoted string line */ - void writeQuotedLine(const CString &str, int indent); + void writeQuotedLine(const CString &str, int indent) const; /** * Write a number to file */ - void writeNumber(int val); + void writeNumber(int val) const; /** * Write a number line to file */ - void writeNumberLine(int val, int indent); + void writeNumberLine(int val, int indent) const; /** * Write a floating point number */ - void writeFloat(double val); + void writeFloat(double val) const; /** * Write a floating point number as a line */ - void writeFloatLine(double val, int indent); + void writeFloatLine(double val, int indent) const; /** * Write out a point line */ - void writePoint(const Point &pt, int indent); + void writePoint(const Point &pt, int indent)const; /** * Write out a rect line */ - void writeRect(const Rect &r, int indent); + void writeRect(const Rect &r, int indent) const; /** * Write out a bounds line */ - void writeBounds(const Rect &r, int indent); + void writeBounds(const Rect &r, int indent) const; + + /** + * Write out a string using a format specifier, just like fprintf + */ + void writeFormat(const char *format, ...) const; /** * Write out a number of tabs to form an indent in the output */ - void writeIndent(uint indent); + void writeIndent(uint indent) const; /** * Validates that the following non-space character is either diff --git a/engines/titanic/true_talk/script_handler.cpp b/engines/titanic/true_talk/script_handler.cpp index 65ec60039c..e923c377da 100644 --- a/engines/titanic/true_talk/script_handler.cpp +++ b/engines/titanic/true_talk/script_handler.cpp @@ -58,7 +58,7 @@ ScriptChangedResult CScriptHandler::scriptChanged(TTRoomScript *roomScript, TTNp } void CScriptHandler::processInput(TTRoomScript *roomScript, TTNpcScript *npcScript, - const TTString &line) { + const TTstring &line) { if (!roomScript || !line.isValid()) return; diff --git a/engines/titanic/true_talk/script_handler.h b/engines/titanic/true_talk/script_handler.h index 7692959e71..2da9371e7d 100644 --- a/engines/titanic/true_talk/script_handler.h +++ b/engines/titanic/true_talk/script_handler.h @@ -72,7 +72,7 @@ public: ScriptChangedResult scriptChanged(TTRoomScript *roomScript, TTNpcScript *npcScript, uint dialogueId); void processInput(TTRoomScript *roomScript, TTNpcScript *npcScript, - const TTString &line); + const TTstring &line); /** * Open a resource for access diff --git a/engines/titanic/true_talk/true_talk_manager.cpp b/engines/titanic/true_talk/true_talk_manager.cpp index 4892259341..7743d81509 100644 --- a/engines/titanic/true_talk/true_talk_manager.cpp +++ b/engines/titanic/true_talk/true_talk_manager.cpp @@ -310,7 +310,7 @@ void CTrueTalkManager::processInput(CTrueTalkNPC *npc, CTextInputMsg *msg, CView if (npcScript && roomScript) { _currentNPC = npc; _titleEngine._scriptHandler->processInput(roomScript, npcScript, - TTString(msg->_input)); + TTstring(msg->_input)); _currentNPC = nullptr; loadAssets(npc, npcScript->charId()); diff --git a/engines/titanic/true_talk/tt_action.cpp b/engines/titanic/true_talk/tt_action.cpp index 041f4a27a4..39e31747ee 100644 --- a/engines/titanic/true_talk/tt_action.cpp +++ b/engines/titanic/true_talk/tt_action.cpp @@ -26,7 +26,7 @@ namespace Titanic { bool TTaction::_staticFlag; -TTaction::TTaction(TTString &str, int val1, int val2, int val3, int val4) : +TTaction::TTaction(TTstring &str, int val1, int val2, int val3, int val4) : TTmajorWord(str, val1, val2, val3), _field30(val4) { } diff --git a/engines/titanic/true_talk/tt_action.h b/engines/titanic/true_talk/tt_action.h index 0d0b69a733..822ba4a3a2 100644 --- a/engines/titanic/true_talk/tt_action.h +++ b/engines/titanic/true_talk/tt_action.h @@ -33,7 +33,7 @@ private: protected: int _field30; public: - TTaction(TTString &str, int val1, int val2, int val3, int val4); + TTaction(TTstring &str, int val1, int val2, int val3, int val4); TTaction(TTaction *src); /** @@ -45,6 +45,8 @@ public: * Creates a copy of the word */ virtual TTword *copy(); + + virtual bool proc12(int val) const { return _field30 == val; } }; } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_adj.cpp b/engines/titanic/true_talk/tt_adj.cpp index 5b942131a3..8f62bb8e0a 100644 --- a/engines/titanic/true_talk/tt_adj.cpp +++ b/engines/titanic/true_talk/tt_adj.cpp @@ -26,7 +26,7 @@ namespace Titanic { bool TTadj::_staticFlag; -TTadj::TTadj(TTString &str, int val1, int val2, int val3, int val4) : +TTadj::TTadj(TTstring &str, int val1, int val2, int val3, int val4) : TTmajorWord(str, val1, val2, val3) { if (val4 >= 0 && val4 <= 9) { _field30 = val4; diff --git a/engines/titanic/true_talk/tt_adj.h b/engines/titanic/true_talk/tt_adj.h index 02d09b56c4..301023ed5e 100644 --- a/engines/titanic/true_talk/tt_adj.h +++ b/engines/titanic/true_talk/tt_adj.h @@ -33,7 +33,7 @@ private: protected: int _field30; public: - TTadj(TTString &str, int val1, int val2, int val3, int val4); + TTadj(TTstring &str, int val1, int val2, int val3, int val4); TTadj(TTadj *src); /** @@ -45,6 +45,19 @@ public: * Creates a copy of the word */ virtual TTword *copy(); + + virtual bool proc14(int val) const { return _field30 == val; } + virtual int proc15() const { return _field30; } + virtual bool proc16() const { return _field30 >= 7; } + virtual bool proc17() const { return _field30 <= 3; } + virtual bool proc18() const { return _field30 > 3 && _field30 < 7; } + + /** + * Dumps data associated with the word to file + */ + virtual int save(SimpleFile *file) const { + return saveData(file, _field30); + } }; } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_major_word.cpp b/engines/titanic/true_talk/tt_major_word.cpp index b56a484aa0..68af628dbb 100644 --- a/engines/titanic/true_talk/tt_major_word.cpp +++ b/engines/titanic/true_talk/tt_major_word.cpp @@ -26,7 +26,7 @@ namespace Titanic { bool TTmajorWord::_staticFlag; -TTmajorWord::TTmajorWord(TTString &str, int val1, int val2, int val3) : +TTmajorWord::TTmajorWord(TTstring &str, int val1, int val2, int val3) : TTword(str, val1, val2), _field2C(val3) { } @@ -39,6 +39,18 @@ TTmajorWord::TTmajorWord(TTmajorWord *src) : TTword(src) { } } +int TTmajorWord::saveData(SimpleFile *file, int val) const { + int result = TTword::save(file); + if (!result) { + file->writeFormat("%1.0d", val); + file->writeFormat("%c", '\n'); + if (_synP) + result = _synP->save(file); + } + + return result; +} + TTword *TTmajorWord::copy() { TTmajorWord *returnWordP = new TTmajorWord(this); returnWordP->_status = _status; diff --git a/engines/titanic/true_talk/tt_major_word.h b/engines/titanic/true_talk/tt_major_word.h index 140419dda2..962fbaab6d 100644 --- a/engines/titanic/true_talk/tt_major_word.h +++ b/engines/titanic/true_talk/tt_major_word.h @@ -32,14 +32,21 @@ private: static bool _staticFlag; protected: int _field2C; +protected: + /** + * Dumps data for the word to a file + */ + int saveData(SimpleFile *file, int val) const; public: - TTmajorWord(TTString &str, int val1, int val2, int val3); + TTmajorWord(TTstring &str, int val1, int val2, int val3); TTmajorWord(TTmajorWord *src); /** * Creates a copy of the word */ virtual TTword *copy(); + + virtual bool proc2(int val) const { return _field2C == val; } }; } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_picture.cpp b/engines/titanic/true_talk/tt_picture.cpp index 2cc69a1fe8..6213cd557b 100644 --- a/engines/titanic/true_talk/tt_picture.cpp +++ b/engines/titanic/true_talk/tt_picture.cpp @@ -26,20 +26,20 @@ namespace Titanic { bool TTpicture::_staticFlag; -TTpicture::TTpicture(TTString &str, int val1, int val2, int val3, int val4, int val5, int val6) : - TTmajorWord(str, val1, val2, val4), _field34(val3), _field30(val5), _field3C(val6), +TTpicture::TTpicture(TTstring &str, int val1, int val2, int val3, int val4, int val5, int val6) : + TTmajorWord(str, val1, val2, val4), _tag(val3), _field30(val5), _field3C(val6), _field38(0) { } TTpicture::TTpicture(TTpicture *src) : TTmajorWord(src) { if (getStatus()) { - _field34 = 0; + _tag = 0; _field30 = 0; _field38 = 0; _field3C = 0; _status = SS_5; } else { - _field34 = src->_field34; + _tag = src->_tag; _field30 = src->_field30; _field38 = src->_field38; _field3C = src->_field3C; @@ -51,7 +51,7 @@ int TTpicture::load(SimpleFile *file) { int val1, val2; if (!TTword::load(file, 2) && file->scanf("%s %d %d", &str, &val1, &val2)) { - _field34 = readNumber(str.c_str()); + _tag = readNumber(str.c_str()); _field30 = val1; _field3C = val2; return 0; @@ -76,4 +76,27 @@ TTword *TTpicture::copy() { } } +bool TTpicture::checkTag() const { + return _tag == MKTAG('S', 'E', 'X', 'X') || + _tag == MKTAG('E', 'X', 'C', 'R') || + _tag == MKTAG('P', 'P', 'R', 'T') || + _tag == MKTAG('B', 'L', 'A', 'S'); +} + +bool TTpicture::compareTagTo(uint tag) const { + return _tag == tag; +} + +uint TTpicture::getTag() const { + return _tag; +} + +bool TTpicture::proc9(int val) const { + return _field3C == val; +} + +int TTpicture::proc10() const { + return _field3C; +} + } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_picture.h b/engines/titanic/true_talk/tt_picture.h index 1910bc6911..c4cc2c19d3 100644 --- a/engines/titanic/true_talk/tt_picture.h +++ b/engines/titanic/true_talk/tt_picture.h @@ -32,11 +32,11 @@ private: static bool _staticFlag; protected: int _field30; - int _field34; + uint _tag; int _field38; int _field3C; public: - TTpicture(TTString &str, int val1, int val2, int val3, int val4, int val5, int val6); + TTpicture(TTstring &str, int val1, int val2, int val3, int val4, int val5, int val6); TTpicture(TTpicture *src); /** @@ -48,6 +48,25 @@ public: * Creates a copy of the word */ virtual TTword *copy(); + + /** + * Checks whether the word's tag is a known type + */ + virtual bool checkTag() const; + + /** + * Compare the word's tag to a given tag value + */ + virtual bool compareTagTo(uint tag) const; + + /** + * Return the tag associated with the word + */ + virtual uint getTag() const; + + virtual bool proc9(int val) const; + virtual int proc10() const; + }; } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_pronoun.cpp b/engines/titanic/true_talk/tt_pronoun.cpp index 120946bb59..4b20b3341b 100644 --- a/engines/titanic/true_talk/tt_pronoun.cpp +++ b/engines/titanic/true_talk/tt_pronoun.cpp @@ -26,7 +26,7 @@ namespace Titanic { bool TTpronoun::_staticFlag; -TTpronoun::TTpronoun(TTString &str, int val1, int val2, int val3, int val4) : +TTpronoun::TTpronoun(TTstring &str, int val1, int val2, int val3, int val4) : TTmajorWord(str, val1, val2, val3), _field30(val4) { } diff --git a/engines/titanic/true_talk/tt_pronoun.h b/engines/titanic/true_talk/tt_pronoun.h index 8f55a36f07..6bb8113e15 100644 --- a/engines/titanic/true_talk/tt_pronoun.h +++ b/engines/titanic/true_talk/tt_pronoun.h @@ -33,7 +33,7 @@ private: protected: int _field30; public: - TTpronoun(TTString &str, int val1, int val2, int val3, int val4); + TTpronoun(TTstring &str, int val1, int val2, int val3, int val4); TTpronoun(TTpronoun *src); /** @@ -45,6 +45,15 @@ public: * Creates a copy of the word */ virtual TTword *copy(); + + virtual bool proc19(int val) const { return _field30 == val; } + + /** + * Dumps data associated with the word to file + */ + virtual int save(SimpleFile *file) const { + return saveData(file, _field30); + } }; } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_script_base.h b/engines/titanic/true_talk/tt_script_base.h index fe999ab290..dc0db2ceb8 100644 --- a/engines/titanic/true_talk/tt_script_base.h +++ b/engines/titanic/true_talk/tt_script_base.h @@ -38,7 +38,7 @@ protected: int _field4; int _field8; int _fieldC; - TTString _charName, _charClass; + TTstring _charName, _charClass; int _field20; int _field24; int _field28; diff --git a/engines/titanic/true_talk/tt_string.cpp b/engines/titanic/true_talk/tt_string.cpp index 78ef8222ab..7a39d7163f 100644 --- a/engines/titanic/true_talk/tt_string.cpp +++ b/engines/titanic/true_talk/tt_string.cpp @@ -21,23 +21,24 @@ */ #include "titanic/true_talk/tt_string.h" +#include "titanic/support/simple_file.h" namespace Titanic { -TTString::TTString() : _status(SS_VALID) { - _data = new TTStringData(); +TTstring::TTstring() : _status(SS_VALID) { + _data = new TTstringData(); } -TTString::TTString(const char *str) : _status(SS_VALID) { - _data = new TTStringData(str); +TTstring::TTstring(const char *str) : _status(SS_VALID) { + _data = new TTstringData(str); } -TTString::TTString(const CString &str) { +TTstring::TTstring(const CString &str) { _status = SS_VALID; - _data = new TTStringData(str); + _data = new TTstringData(str); } -TTString::TTString(TTString &str) { +TTstring::TTstring(TTstring &str) { if (str._status != SS_VALID) { _status = SS_5; _data = nullptr; @@ -48,12 +49,12 @@ TTString::TTString(TTString &str) { } } -TTString::~TTString() { +TTstring::~TTstring() { if (_data && --_data->_referenceCount == 0) delete _data; } -void TTString::operator=(const TTString &str) { +void TTstring::operator=(const TTstring &str) { // Delete old string reference, if any if (_data && --_data->_referenceCount == 0) delete _data; @@ -65,22 +66,26 @@ void TTString::operator=(const TTString &str) { _data->_referenceCount++; } -void TTString::operator=(const CString &str) { +void TTstring::operator=(const CString &str) { operator=(str.c_str()); } -void TTString::operator=(const char *str) { +void TTstring::operator=(const char *str) { // Delete old string reference, if any if (_data && --_data->_referenceCount == 0) delete _data; // Create new string data - _data = new TTStringData(str); + _data = new TTstringData(str); _status = SS_VALID; } -bool TTString::isValid() const { +bool TTstring::isValid() const { return _status == SS_VALID; } +void TTstring::save(SimpleFile *file) const { + file->writeFormat("%s", c_str()); +} + } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_string.h b/engines/titanic/true_talk/tt_string.h index a881c59ecb..0256f1022f 100644 --- a/engines/titanic/true_talk/tt_string.h +++ b/engines/titanic/true_talk/tt_string.h @@ -27,29 +27,31 @@ namespace Titanic { -struct TTStringData { +class SimpleFile; + +struct TTstringData { CString _string; int _referenceCount; - TTStringData() : _referenceCount(1) {} - TTStringData(const char *str) : _string(str), _referenceCount(1) {} - TTStringData(const CString &str) : _string(str), _referenceCount(1) {} + TTstringData() : _referenceCount(1) {} + TTstringData(const char *str) : _string(str), _referenceCount(1) {} + TTstringData(const CString &str) : _string(str), _referenceCount(1) {} }; -enum TTStringStatus { SS_VALID = 0, SS_5 = 5, SS_7 = 7, SS_8 = 8, SS_13 = 13 }; +enum TTstringStatus { SS_VALID = 0, SS_5 = 5, SS_7 = 7, SS_8 = 8, SS_13 = 13 }; -class TTString { +class TTstring { private: - TTStringData *_data; - TTStringStatus _status; + TTstringData *_data; + TTstringStatus _status; public: - TTString(); - TTString(const char *str); - TTString(const CString &str); - TTString(TTString &str); - virtual ~TTString(); + TTstring(); + TTstring(const char *str); + TTstring(const CString &str); + TTstring(TTstring &str); + virtual ~TTstring(); - void operator=(const TTString &str); + void operator=(const TTstring &str); void operator=(const CString &str); void operator=(const char *str); @@ -61,7 +63,7 @@ public: /** * Get the status of the string */ - TTStringStatus getStatus() const { return _status; } + TTstringStatus getStatus() const { return _status; } /** * Get a char * pointer to the string data @@ -77,6 +79,11 @@ public: * Get a character at a specified index */ char charAt(int index) const { return *(c_str() + index); } + + /** + * Save the sring to a passed file + */ + void save(SimpleFile *file) const; }; } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_string_node.h b/engines/titanic/true_talk/tt_string_node.h index 6994a0d1cd..f9f73ce545 100644 --- a/engines/titanic/true_talk/tt_string_node.h +++ b/engines/titanic/true_talk/tt_string_node.h @@ -47,7 +47,7 @@ protected: public: TTstringNode *_pPrior; TTstringNode *_pNext; - TTString _string; + TTstring _string; FileHandle _file; int _mode; int _field1C; diff --git a/engines/titanic/true_talk/tt_synonym.cpp b/engines/titanic/true_talk/tt_synonym.cpp index 3ce3b12ee2..cac9f647cc 100644 --- a/engines/titanic/true_talk/tt_synonym.cpp +++ b/engines/titanic/true_talk/tt_synonym.cpp @@ -40,7 +40,7 @@ TTsynonym::TTsynonym(int mode, const char *str, FileHandle file) : _file = file; } -TTsynonym *TTsynonym::findByName(TTsynonym *start, const TTString &str, int mode) { +TTsynonym *TTsynonym::findByName(TTsynonym *start, const TTstring &str, int mode) { for (; start; start = static_cast<TTsynonym *>(start->_pNext)) { if (start->_mode == mode || (mode == 3 && start->_mode < 3)) { if (!strcmp(start->_string.c_str(), str.c_str())) @@ -68,4 +68,29 @@ TTsynonym *TTsynonym::copy(TTsynonym *src) { } } +int TTsynonym::save(SimpleFile *file) { + for (TTstringNode *synP = this; synP; synP = synP->_pNext) { + file->writeFormat("%s", " 0 "); + synP->_string.save(file); + file->writeFormat("%c", ' '); + + if (synP->_mode) { + file->writeFormat("%1.0d", synP->_mode); + } else { + file->writeFormat("%c", '0'); + } + + file->writeFormat("%c", ' '); + + if (synP->_file) { + file->writeFormat("%2.0d", synP->_file); + } else { + file->writeFormat("%c", ' '); + } + file->writeFormat("%c", '\n'); + } + + return 0; +} + } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_synonym.h b/engines/titanic/true_talk/tt_synonym.h index b661c166e0..40f7ad3449 100644 --- a/engines/titanic/true_talk/tt_synonym.h +++ b/engines/titanic/true_talk/tt_synonym.h @@ -24,6 +24,7 @@ #define TITANIC_TT_SYNONYM_H #include "titanic/true_talk/tt_string_node.h" +#include "titanic/support/simple_file.h" namespace Titanic { @@ -41,8 +42,12 @@ public: /** * Scan for a synonym with a given string */ - static TTsynonym *findByName(TTsynonym *start, const TTString &str, int mode); + static TTsynonym *findByName(TTsynonym *start, const TTstring &str, int mode); + /** + * Save data for the synonym to file + */ + int save(SimpleFile *file); }; } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_title_script.h b/engines/titanic/true_talk/tt_title_script.h index 7876ba8a71..a1efd11270 100644 --- a/engines/titanic/true_talk/tt_title_script.h +++ b/engines/titanic/true_talk/tt_title_script.h @@ -31,7 +31,7 @@ namespace Titanic { class TTTitleScript : public TTScriptBase { private: int _field50; - TTString _string1; + TTstring _string1; int _field5C; int _field60; public: diff --git a/engines/titanic/true_talk/tt_vocab.cpp b/engines/titanic/true_talk/tt_vocab.cpp index 1826a43d08..3d2a9d98c8 100644 --- a/engines/titanic/true_talk/tt_vocab.cpp +++ b/engines/titanic/true_talk/tt_vocab.cpp @@ -53,7 +53,7 @@ int TTvocab::load(const CString &name) { while (!result && !file->eos()) { skipFlag = false; int mode = file->readNumber(); - TTString space(" "); + TTstring space(" "); switch (mode) { case 0: { @@ -154,7 +154,7 @@ void TTvocab::addWord(TTword *word) { } } -TTword *TTvocab::findWord(const TTString &str) { +TTword *TTvocab::findWord(const TTstring &str) { TTsynonym *tempNode = new TTsynonym(); bool flag = false; TTword *word = _pHead; @@ -174,7 +174,7 @@ TTword *TTvocab::findWord(const TTString &str) { return word; } -TTword *TTvocab::getPrimeWord(TTString &str, TTword **words) { +TTword *TTvocab::getPrimeWord(TTstring &str, TTword **words) { TTsynonym *synonym = new TTsynonym(); char c = str.charAt(0); TTword *vocabList = _pHead; diff --git a/engines/titanic/true_talk/tt_vocab.h b/engines/titanic/true_talk/tt_vocab.h index b7e948680a..804d8cbae3 100644 --- a/engines/titanic/true_talk/tt_vocab.h +++ b/engines/titanic/true_talk/tt_vocab.h @@ -52,12 +52,12 @@ private: /** * Scans the vocab list for an existing word match */ - TTword *findWord(const TTString &str); + TTword *findWord(const TTstring &str); public: TTvocab(int val); ~TTvocab(); - TTword *getPrimeWord(TTString &str, TTword **words); + TTword *getPrimeWord(TTstring &str, TTword **words); }; } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_word.cpp b/engines/titanic/true_talk/tt_word.cpp index ea68b3433a..aa602d869c 100644 --- a/engines/titanic/true_talk/tt_word.cpp +++ b/engines/titanic/true_talk/tt_word.cpp @@ -26,7 +26,7 @@ namespace Titanic { -TTword::TTword(TTString &str, int mode, int val2) : _string(str), +TTword::TTword(TTstring &str, int mode, int val2) : _string(str), _wordMode(mode), _field1C(val2), _pNext(nullptr), _synP(nullptr), _field20(0), _field24(0), _field28(0) { _status = str.getStatus() == SS_VALID ? SS_VALID : SS_5; @@ -143,7 +143,7 @@ bool TTword::testFileHandle(FileHandle file) const { return true; } -TTword *TTword::scanCopy(const TTString &str, TTsynonym *node, int mode) { +TTword *TTword::scanCopy(const TTstring &str, TTsynonym *node, int mode) { if (_synP) { TTsynonym *strNode = TTsynonym::findByName(_synP, str, mode); if (strNode) { diff --git a/engines/titanic/true_talk/tt_word.h b/engines/titanic/true_talk/tt_word.h index 3d9001bd5d..f77f11ce75 100644 --- a/engines/titanic/true_talk/tt_word.h +++ b/engines/titanic/true_talk/tt_word.h @@ -31,7 +31,7 @@ namespace Titanic { class TTword { protected: - TTStringStatus _status; + TTstringStatus _status; int _wordMode; int _field1C; int _field20; @@ -48,9 +48,9 @@ protected: public: TTword *_pNext; TTsynonym *_synP; - TTString _string; + TTstring _string; public: - TTword(TTString &str, int mode, int val2); + TTword(TTstring &str, int mode, int val2); TTword(TTword *src); /** @@ -73,7 +73,7 @@ public: */ int load(SimpleFile *file, int mode); - TTword *scanCopy(const TTString &str, TTsynonym *node, int mode); + TTword *scanCopy(const TTstring &str, TTsynonym *node, int mode); const char *c_str() const { return _string.c_str(); } operator const char *() const { return c_str(); } @@ -81,31 +81,44 @@ public: /** * Return the status of the word */ - TTStringStatus getStatus() const { return _status; } + TTstringStatus getStatus() const { return _status; } /** * Creates a copy of the word */ virtual TTword *copy(); - virtual int proc2() const { return 0; } + virtual bool proc2(int val) const { return false; } virtual int proc3() const { return -1; } virtual void proc4() {} virtual void proc5() {} - virtual int proc6() const { return 0; } - virtual int proc7() const { return 0; } - virtual int proc8() const { return 0; } - virtual int proc9() const { return 0; } + + /** + * Checks whether the word's tag is a known type + */ + virtual bool checkTag() const { return false; } + + /** + * Compare the word's tag to a given tag value + */ + virtual bool compareTagTo(uint tag) const { return false; } + + /** + * Return the tag associated with the word + */ + virtual uint getTag() const { return 0; } + + virtual bool proc9(int val) const { return false; } virtual int proc10() const { return 0; } virtual void proc11() {} - virtual int proc12() const { return 0; } + virtual bool proc12(int val) const { return false; } virtual int proc13() const { return 0; } - virtual int proc14() const { return 0; } + virtual bool proc14(int val) const { return false; } virtual int proc15() const { return -1; } - virtual int proc16() const { return 0; } - virtual int proc17() const { return 0; } - virtual int proc18() const { return 0; } - virtual int proc19() const { return 0; } + virtual bool proc16() const { return false; } + virtual bool proc17() const { return false; } + virtual bool proc18() const { return false; } + virtual bool proc19(int val) const { return false; } virtual int proc20() const { return 0; } /** @@ -124,7 +137,10 @@ public: */ virtual void setSynFile(FileHandle file); - virtual int proc24() const { return 0; } + /** + * Dumps data associated with the word to file + */ + virtual int save(SimpleFile *file) const { return 0; } }; } // End of namespace Titanic |