aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/titanic/true_talk/tt_parser.cpp32
-rw-r--r--engines/titanic/true_talk/tt_parser.h18
-rw-r--r--engines/titanic/true_talk/tt_word.h3
3 files changed, 51 insertions, 2 deletions
diff --git a/engines/titanic/true_talk/tt_parser.cpp b/engines/titanic/true_talk/tt_parser.cpp
index 787e9767da..0d7c75c240 100644
--- a/engines/titanic/true_talk/tt_parser.cpp
+++ b/engines/titanic/true_talk/tt_parser.cpp
@@ -23,15 +23,24 @@
#include "titanic/true_talk/tt_parser.h"
#include "titanic/true_talk/script_handler.h"
#include "titanic/true_talk/tt_sentence.h"
+#include "titanic/true_talk/tt_word.h"
#include "titanic/titanic.h"
namespace Titanic {
TTparser::TTparser(CScriptHandler *owner) : _owner(owner), _sentenceSub(nullptr),
- _sentence(nullptr), _fieldC(0), _field10(0), _field14(0), _field18(0) {
+ _sentence(nullptr), _fieldC(0), _field10(0), _field14(0), _field18(0),
+ _nodesP(nullptr) {
loadArrays();
}
+TTparser::~TTparser() {
+ if (_nodesP) {
+ _nodesP->deleteSiblings();
+ delete _nodesP;
+ }
+}
+
void TTparser::loadArrays() {
Common::SeekableReadStream *r;
r = g_vm->_filesManager->getResource("TEXT/REPLACEMENTS1");
@@ -495,4 +504,25 @@ int TTparser::findFrames(TTsentence *sentence) {
return 0;
}
+void TTparser::loadRequests(TTword *word) {
+ if (word->_tag != MKTAG('Z', 'Z', 'Z', 'T'))
+ addNode(word->_tag);
+
+ switch (word->_wordMode) {
+ case WMODE_NONE:
+ break;
+
+ case WMODE_ACTION:
+ break;
+ }
+ // TODO
+}
+
+void TTparser::addNode(uint tag) {
+ TTparserNode *newNode = new TTparserNode(tag);
+ if (_nodesP)
+ _nodesP->addToHead(newNode);
+ _nodesP = newNode;
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/tt_parser.h b/engines/titanic/true_talk/tt_parser.h
index 9ef84f93ad..96c54fb113 100644
--- a/engines/titanic/true_talk/tt_parser.h
+++ b/engines/titanic/true_talk/tt_parser.h
@@ -23,6 +23,7 @@
#ifndef TITANIC_TT_PARSER_H
#define TITANIC_TT_PARSER_H
+#include "titanic/true_talk/tt_node.h"
#include "titanic/true_talk/tt_sentence.h"
#include "titanic/true_talk/tt_string.h"
@@ -43,6 +44,14 @@ struct NumberEntry {
};
typedef Common::Array<NumberEntry> NumberArray;
+class TTparserNode : public TTnode {
+public:
+ uint _tag;
+public:
+ TTparserNode() : TTnode(), _tag(0) {}
+ TTparserNode(uint tag) : TTnode(), _tag(tag) {}
+};
+
class TTparser {
private:
StringArray _replacements1;
@@ -50,6 +59,7 @@ private:
StringArray _replacements3;
StringArray _phrases;
NumberArray _numbers;
+ TTparserNode *_nodesP;
private:
/**
* Loads the various replacement string data arrays
@@ -112,6 +122,13 @@ private:
* @returns Pointer to matching number entry, if match occurred
*/
const NumberEntry *replaceNumbers2(TTstring &line, int *startIndex);
+
+ void loadRequests(TTword *word);
+
+ /**
+ * Creates a new parser node, and adds it to the parser's list
+ */
+ void addNode(uint tag);
public:
CScriptHandler *_owner;
TTsentenceSub *_sentenceSub;
@@ -122,6 +139,7 @@ public:
int _field18;
public:
TTparser(CScriptHandler *owner);
+ ~TTparser();
/**
* Preprocesses the passed input text, to handle things like lowercasing
diff --git a/engines/titanic/true_talk/tt_word.h b/engines/titanic/true_talk/tt_word.h
index 9574bc3b0c..333bfb5bfe 100644
--- a/engines/titanic/true_talk/tt_word.h
+++ b/engines/titanic/true_talk/tt_word.h
@@ -31,7 +31,8 @@ namespace Titanic {
enum WordMode {
WMODE_NONE = 0, WMODE_ACTION = 1, WMODE_2 = 2, WMODE_3 = 3,
- WMODE_6 = 6, WMODE_8 = 8, WMODE_9 = 9
+ WMODE_4 = 4, WMODE_5 = 5, WMODE_6 = 6, WMODE_7 = 7,
+ WMODE_8 = 8, WMODE_9 = 9
};
class TTword {