aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic')
-rw-r--r--engines/titanic/true_talk/script_handler.cpp2
-rw-r--r--engines/titanic/true_talk/tt_input.h3
-rw-r--r--engines/titanic/true_talk/tt_parser.cpp28
-rw-r--r--engines/titanic/true_talk/tt_parser.h10
-rw-r--r--engines/titanic/true_talk/tt_script_base.cpp3
-rw-r--r--engines/titanic/true_talk/tt_script_base.h2
-rw-r--r--engines/titanic/true_talk/tt_string.cpp31
-rw-r--r--engines/titanic/true_talk/tt_string.h11
8 files changed, 82 insertions, 8 deletions
diff --git a/engines/titanic/true_talk/script_handler.cpp b/engines/titanic/true_talk/script_handler.cpp
index 041d4909f7..2e2a148e26 100644
--- a/engines/titanic/true_talk/script_handler.cpp
+++ b/engines/titanic/true_talk/script_handler.cpp
@@ -65,6 +65,8 @@ int CScriptHandler::processInput(TTroomScript *roomScript, TTnpcScript *npcScrip
TTinput *input = new TTinput(_inputCtr++, line, this, roomScript, npcScript);
_parser.processInput(input);
+ roomScript->processInput(input);
+ npcScript->processInput(input);
warning("TODO: CScriptHandler::processInput");
diff --git a/engines/titanic/true_talk/tt_input.h b/engines/titanic/true_talk/tt_input.h
index 9cb4b72c23..7e6fd92f12 100644
--- a/engines/titanic/true_talk/tt_input.h
+++ b/engines/titanic/true_talk/tt_input.h
@@ -59,7 +59,6 @@ private:
int _inputCtr;
int _field34;
int _field38;
- TTstring _line;
TTstring _string2;
int _field4C;
TTroomScript *_roomScript;
@@ -68,6 +67,8 @@ private:
int _field5C;
int _status;
public:
+ TTstring _line;
+public:
TTinput(int inputCtr, const TTstring &line, CScriptHandler *owner,
TTroomScript *roomScript, TTnpcScript *npcScript);
};
diff --git a/engines/titanic/true_talk/tt_parser.cpp b/engines/titanic/true_talk/tt_parser.cpp
index 5bae72ce33..a48fcaea0e 100644
--- a/engines/titanic/true_talk/tt_parser.cpp
+++ b/engines/titanic/true_talk/tt_parser.cpp
@@ -26,8 +26,34 @@
namespace Titanic {
-void TTparser::processInput(TTinput *input) {
+int TTparser::processInput(TTinput *input) {
+ _input = input;
+ if (normalize(input))
+ return 0;
+
warning("TODO: TTparser::processInput");
+ return 0;
+}
+
+int TTparser::normalize(TTinput *input) {
+ TTstring *line = new TTstring();
+
+ for (const char *lineP = input->_line.c_str(); lineP; ++lineP) {
+ char c = *lineP;
+ if (Common::isLower(c)) {
+ (*line) += c;
+ } else if (Common::isSpace(c)) {
+ if (!line->empty() && line->lastChar() != ' ')
+ (*line) += ' ';
+ } else if (Common::isUpper(c)) {
+ (*line) += toupper(c);
+ } else if (Common::isDigit(c)) {
+ // TODO: num handling
+ }
+ // TODO other cases
+ }
+
+ return 0;
}
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/tt_parser.h b/engines/titanic/true_talk/tt_parser.h
index 89977067cb..7df82b0b5b 100644
--- a/engines/titanic/true_talk/tt_parser.h
+++ b/engines/titanic/true_talk/tt_parser.h
@@ -30,22 +30,24 @@ namespace Titanic {
class CScriptHandler;
class TTparser {
+private:
+ int normalize(TTinput *input);
public:
CScriptHandler *_owner;
int _field4;
- int _field8;
+ TTinput *_input;
int _fieldC;
int _field10;
int _field14;
int _field18;
public:
- TTparser(CScriptHandler *owner) : _owner(owner), _field4(0), _field8(0),
- _fieldC(0), _field10(0), _field14(0), _field18(0) {}
+ TTparser(CScriptHandler *owner) : _owner(owner), _field4(0),
+ _input(nullptr), _fieldC(0), _field10(0), _field14(0), _field18(0) {}
/**
* Gets passed a newly created input wrapper during conversation text processing
*/
- void processInput(TTinput *input);
+ int processInput(TTinput *input);
};
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/tt_script_base.cpp b/engines/titanic/true_talk/tt_script_base.cpp
index e937f0ac64..88f06a493e 100644
--- a/engines/titanic/true_talk/tt_script_base.cpp
+++ b/engines/titanic/true_talk/tt_script_base.cpp
@@ -73,8 +73,9 @@ void TTscriptBase::reset() {
_field48 = 0;
}
-void TTscriptBase::processInput(TTinput *input) {
+int TTscriptBase::processInput(TTinput *input) {
warning("TODO: TTscriptBase::processInput");
+ return 0;
}
void TTscriptBase::proc2(int v) {
diff --git a/engines/titanic/true_talk/tt_script_base.h b/engines/titanic/true_talk/tt_script_base.h
index 0aac1ed2e7..12abb5ccda 100644
--- a/engines/titanic/true_talk/tt_script_base.h
+++ b/engines/titanic/true_talk/tt_script_base.h
@@ -64,7 +64,7 @@ public:
/**
* Gets passed a newly created input wrapper during conversation text processing
*/
- void processInput(TTinput *input);
+ int processInput(TTinput *input);
virtual void proc2(int v);
diff --git a/engines/titanic/true_talk/tt_string.cpp b/engines/titanic/true_talk/tt_string.cpp
index 7a39d7163f..338b7b50ae 100644
--- a/engines/titanic/true_talk/tt_string.cpp
+++ b/engines/titanic/true_talk/tt_string.cpp
@@ -80,6 +80,37 @@ void TTstring::operator=(const char *str) {
_status = SS_VALID;
}
+TTstring &TTstring::operator+=(const char *str) {
+ _data->_string += str;
+ return *this;
+}
+
+TTstring &TTstring::operator+=(const TTstring &str) {
+ _data->_string += str;
+ return *this;
+}
+
+TTstring &TTstring::operator+=(char c) {
+ _data->_string += c;
+ return *this;
+}
+
+bool TTstring::empty() const {
+ return _data->_string.empty();
+}
+
+char TTstring::firstChar() const {
+ return _data->_string.firstChar();
+}
+
+char TTstring::lastChar() const {
+ return _data->_string.lastChar();
+}
+
+TTstring *TTstring::copy() const {
+ return new TTstring(c_str());
+}
+
bool TTstring::isValid() const {
return _status == SS_VALID;
}
diff --git a/engines/titanic/true_talk/tt_string.h b/engines/titanic/true_talk/tt_string.h
index 1a95b4e4be..8fe7127ac7 100644
--- a/engines/titanic/true_talk/tt_string.h
+++ b/engines/titanic/true_talk/tt_string.h
@@ -54,6 +54,17 @@ public:
void operator=(const TTstring &str);
void operator=(const CString &str);
void operator=(const char *str);
+ TTstring &operator+=(const char *str);
+ TTstring &operator+=(const TTstring &str);
+ TTstring &operator+=(char c);
+ bool empty() const;
+ char firstChar() const;
+ char lastChar() const;
+
+ /**
+ * Create a new copy of the string
+ */
+ TTstring *copy() const;
/**
* Returns true if the string is valid