diff options
author | Paul Gilbert | 2016-06-05 00:10:54 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-07-15 19:20:02 -0400 |
commit | 51226842c8f63ffa65c397906ad7aed9dd3d9ca9 (patch) | |
tree | 940a185148bc2af5ebff01eb76ed8cad7990345e | |
parent | 253cf2f57457d430236a4d972a1d6295511c21fa (diff) | |
download | scummvm-rg350-51226842c8f63ffa65c397906ad7aed9dd3d9ca9.tar.gz scummvm-rg350-51226842c8f63ffa65c397906ad7aed9dd3d9ca9.tar.bz2 scummvm-rg350-51226842c8f63ffa65c397906ad7aed9dd3d9ca9.zip |
TITANIC: Start of new TTvocabTree class; added load method
-rw-r--r-- | engines/titanic/module.mk | 1 | ||||
-rw-r--r-- | engines/titanic/true_talk/true_talk_manager.cpp | 4 | ||||
-rw-r--r-- | engines/titanic/true_talk/true_talk_manager.h | 2 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_quotes.cpp | 7 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_quotes.h | 4 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_quotes_tree.cpp | 62 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_quotes_tree.h | 56 |
7 files changed, 129 insertions, 7 deletions
diff --git a/engines/titanic/module.mk b/engines/titanic/module.mk index 2b604ec29d..2879713758 100644 --- a/engines/titanic/module.mk +++ b/engines/titanic/module.mk @@ -472,6 +472,7 @@ MODULE_OBJS := \ true_talk/tt_picture.o \ true_talk/tt_pronoun.o \ true_talk/tt_quotes.o \ + true_talk/tt_quotes_tree.o \ true_talk/tt_response.o \ true_talk/tt_room_script.o \ true_talk/tt_script_base.o \ diff --git a/engines/titanic/true_talk/true_talk_manager.cpp b/engines/titanic/true_talk/true_talk_manager.cpp index 555d0e6a1b..91e6c9e36b 100644 --- a/engines/titanic/true_talk/true_talk_manager.cpp +++ b/engines/titanic/true_talk/true_talk_manager.cpp @@ -49,7 +49,9 @@ CTrueTalkManager::CTrueTalkManager(CGameManager *owner) : _gameManager(owner), _scripts(&_titleEngine), _currentCharId(0), _dialogueFile(nullptr), _dialogueId(0) { _titleEngine.setup(3, 3); - _quotes.load("TEXT/JRQUOTES.TXT"); + _quotes.load(); + _quotesTree.load(); + _currentNPC = nullptr; g_vm->_trueTalkManager = this; } diff --git a/engines/titanic/true_talk/true_talk_manager.h b/engines/titanic/true_talk/true_talk_manager.h index 754a9955ca..ad378af9fc 100644 --- a/engines/titanic/true_talk/true_talk_manager.h +++ b/engines/titanic/true_talk/true_talk_manager.h @@ -28,6 +28,7 @@ #include "titanic/true_talk/dialogue_file.h" #include "titanic/true_talk/title_engine.h" #include "titanic/true_talk/tt_quotes.h" +#include "titanic/true_talk/tt_quotes_tree.h" #include "titanic/true_talk/tt_scripts.h" #include "titanic/true_talk/tt_talker.h" @@ -131,6 +132,7 @@ public: static void setFlags(int index, int val); public: TTquotes _quotes; + TTquotesTree _quotesTree; public: /** * Get a specified state value from the currently set NPC diff --git a/engines/titanic/true_talk/tt_quotes.cpp b/engines/titanic/true_talk/tt_quotes.cpp index 8e9978bbb9..a2afa1a949 100644 --- a/engines/titanic/true_talk/tt_quotes.cpp +++ b/engines/titanic/true_talk/tt_quotes.cpp @@ -37,8 +37,8 @@ TTquotes::~TTquotes() { delete[] _dataP; } -void TTquotes::load(const CString &name) { - Common::SeekableReadStream *r = g_vm->_filesManager->getResource(name); +void TTquotes::load() { + Common::SeekableReadStream *r = g_vm->_filesManager->getResource("TEXT/JRQUOTES.TXT"); size_t size = r->readUint32LE(); _dataSize = _field544 = size; @@ -106,7 +106,6 @@ int TTquotes::read(const char *startP, const char *endP) { return 0; int maxSize = size + 4; - bool letterFlag = index != 25; for (uint idx = 0; idx < letter._entries.size(); ++idx) { const TTquotesEntry &entry = letter._entries[idx]; @@ -115,7 +114,7 @@ int TTquotes::read(const char *startP, const char *endP) { const char *srcP = startP; const char *destP = entry._strP; - int srcIndex = 0, destIndex = 0; + int srcIndex = index != 25 ? 1 : 0, destIndex = 0; if (*destP) { do { if (!srcP[srcIndex]) { diff --git a/engines/titanic/true_talk/tt_quotes.h b/engines/titanic/true_talk/tt_quotes.h index db105265ee..a90c70e9cc 100644 --- a/engines/titanic/true_talk/tt_quotes.h +++ b/engines/titanic/true_talk/tt_quotes.h @@ -59,9 +59,9 @@ public: ~TTquotes(); /** - * Load quotes from the specified resource + * Load quotes data resource */ - void load(const CString &name); + void load(); /** * Test whether a passed string contains one of the quotes, diff --git a/engines/titanic/true_talk/tt_quotes_tree.cpp b/engines/titanic/true_talk/tt_quotes_tree.cpp new file mode 100644 index 0000000000..0f10a10aa6 --- /dev/null +++ b/engines/titanic/true_talk/tt_quotes_tree.cpp @@ -0,0 +1,62 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "common/algorithm.h" +#include "titanic/true_talk/tt_quotes_tree.h" +#include "titanic/titanic.h" + +namespace Titanic { + +/** + * Specifies the starting index for each of the three main trees + */ +static uint TABLE_INDEXES[3] = { 922, 1015, 1018 }; + +void TTquotesTree::load() { + Common::SeekableReadStream *r = g_vm->_filesManager->getResource("TEXT/TREE"); + + for (int idx = 0; idx < QUOTES_TREE_COUNT; ++idx) { + TTquotesTree::TTquotesTreeEntry &rec = _entries[idx]; + assert(r->pos() < r->size()); + + rec._id = r->readUint32LE(); + if (rec._id == 0) { + rec._type = ET_END; + } else { + byte type = r->readByte(); + if (type == 0) { + // Index to sub-table + rec._subTable = &_entries[0] + r->readUint32LE(); + } else { + // Read in string for entry + char c; + while ((c = r->readByte()) != '\0') + rec._string += c; + } + } + } + + assert(r->pos() == r->size()); + delete r; +} + +} // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_quotes_tree.h b/engines/titanic/true_talk/tt_quotes_tree.h new file mode 100644 index 0000000000..9496fa8887 --- /dev/null +++ b/engines/titanic/true_talk/tt_quotes_tree.h @@ -0,0 +1,56 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef TITANIC_TT_QUOTES_TREE_H +#define TITANIC_TT_QUOTES_TREE_H + +#include "common/scummsys.h" +#include "common/stream.h" +#include "titanic/support/string.h" + +namespace Titanic { + +#define QUOTES_TREE_COUNT 1022 + +enum TreeEntryType { ET_END = 0, ET_TABLE = 1, ET_STRING = 2 }; + +class TTquotesTree { + struct TTquotesTreeEntry { + uint _id; + TreeEntryType _type; + TTquotesTreeEntry *_subTable; + CString _string; + + TTquotesTreeEntry() : _id(0), _type(ET_END), _subTable(nullptr) {} + }; +private: + TTquotesTreeEntry _entries[QUOTES_TREE_COUNT]; +public: + /** + * Load data for the quotes tree + */ + void load(); +}; + +} // End of namespace Titanic + +#endif /* TITANIC_TT_QUOTES_TREE_H */ |