aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorPaul Gilbert2016-06-02 21:22:49 -0400
committerPaul Gilbert2016-07-15 19:19:07 -0400
commit62c699fa3ca815a658a930b06ab99f6ce31a881d (patch)
treef9c076405b3e5cbec50d2fca4e33d51e03a7f8b8 /engines
parent928f9a8974753e84a051e354113811ba1b9548f1 (diff)
downloadscummvm-rg350-62c699fa3ca815a658a930b06ab99f6ce31a881d.tar.gz
scummvm-rg350-62c699fa3ca815a658a930b06ab99f6ce31a881d.tar.bz2
scummvm-rg350-62c699fa3ca815a658a930b06ab99f6ce31a881d.zip
TITANIC: New TTsentenceEntries class for holding sentence res data
Diffstat (limited to 'engines')
-rw-r--r--engines/titanic/true_talk/tt_npc_script.cpp8
-rw-r--r--engines/titanic/true_talk/tt_npc_script.h7
-rw-r--r--engines/titanic/true_talk/tt_sentence.cpp35
-rw-r--r--engines/titanic/true_talk/tt_sentence.h34
4 files changed, 80 insertions, 4 deletions
diff --git a/engines/titanic/true_talk/tt_npc_script.cpp b/engines/titanic/true_talk/tt_npc_script.cpp
index 20e7faf5a3..41bf5d8ac4 100644
--- a/engines/titanic/true_talk/tt_npc_script.cpp
+++ b/engines/titanic/true_talk/tt_npc_script.cpp
@@ -51,7 +51,7 @@ TTnpcScriptBase::TTnpcScriptBase(int charId, const char *charClass, int v2,
TTnpcScript::TTnpcScript(int charId, const char *charClass, int v2,
const char *charName, int v3, int val2, int v4, int v5, int v6, int v7) :
TTnpcScriptBase(charId, charClass, v2, charName, v3, val2, v4, v5, v6, v7),
- _subPtr(nullptr), _field60(0), _field64(0), _field68(0),
+ _subPtr(nullptr), _entriesP(nullptr), _entryCount(0), _field68(0),
_field6C(0), _field70(0), _field74(0), _field78(0),
_field7C(0), _field80(0), _field2CC(false) {
CTrueTalkManager::_v2 = 0;
@@ -117,7 +117,7 @@ int TTnpcScript::chooseResponse(TTroomScript *roomScript, TTsentence *sentence,
}
void TTnpcScript::process(TTroomScript *roomScript, TTsentence *sentence) {
- warning("TODO");
+ processSentence(_entriesP, _entryCount, roomScript, sentence);
}
int TTnpcScript::proc8() const {
@@ -456,4 +456,8 @@ CPetControl *TTnpcScript::getPetControl(CGameManager *gameManager) {
return nullptr;
}
+void TTnpcScript::processSentence(const TTsentenceEntries *entries, int entryCount, TTroomScript *roomScript, TTsentence *sentence) {
+ warning("TODO");
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/tt_npc_script.h b/engines/titanic/true_talk/tt_npc_script.h
index 3b9ffe86f7..a6741e6136 100644
--- a/engines/titanic/true_talk/tt_npc_script.h
+++ b/engines/titanic/true_talk/tt_npc_script.h
@@ -34,6 +34,7 @@ class CGameManager;
class CPetControl;
class TTroomScript;
class TTsentence;
+class TTsentenceEntries;
struct TTnpcScriptResponse {
uint _tag;
@@ -83,8 +84,8 @@ protected:
Common::Array<TTnpcScriptResponse> _responses;
int _valuesPerResponse;
byte *_subPtr;
- int _field60;
- int _field64;
+ const TTsentenceEntries *_entriesP;
+ int _entryCount;
int _field68;
int _field6C;
int _field70;
@@ -136,6 +137,8 @@ protected:
* Returns a pointer to the PET control
*/
static CPetControl *getPetControl(CGameManager *gameManager);
+
+ void processSentence(const TTsentenceEntries *entries, int entryCount, TTroomScript *roomScript, TTsentence *sentence);
public:
TTnpcScript(int charId, const char *charClass, int v2,
const char *charName, int v3, int val2, int v4,
diff --git a/engines/titanic/true_talk/tt_sentence.cpp b/engines/titanic/true_talk/tt_sentence.cpp
index c777464f8d..697afddd77 100644
--- a/engines/titanic/true_talk/tt_sentence.cpp
+++ b/engines/titanic/true_talk/tt_sentence.cpp
@@ -39,6 +39,41 @@ TTsentenceConcept *TTsentenceConcept::addSibling() {
/*------------------------------------------------------------------------*/
+bool TTsentenceEntry::load(Common::SeekableReadStream *s) {
+ if (s->pos() >= s->size())
+ return false;
+
+ _field0 = s->readUint32LE();
+ _field4 = s->readUint32LE();
+ _string8 = readStringFromStream(s);
+ _fieldC = s->readUint32LE();
+ _string10 = readStringFromStream(s);
+ _string14 = readStringFromStream(s);
+ _string18 = readStringFromStream(s);
+ _string1C = readStringFromStream(s);
+ _field20 = s->readUint32LE();
+ _string24 = readStringFromStream(s);
+ _field28 = s->readUint32LE();
+ _field2C = s->readUint32LE();
+ _field30 = s->readUint32LE();
+
+ return true;
+}
+
+/*------------------------------------------------------------------------*/
+
+void TTsentenceEntries::load(const CString &resName) {
+ TTsentenceEntry entry;
+ Common::SeekableReadStream *r = g_vm->_filesManager->getResource(resName);
+
+ while (entry.load(r))
+ push_back(entry);
+
+ delete r;
+}
+
+/*------------------------------------------------------------------------*/
+
TTsentence::TTsentence(int inputCtr, const TTstring &line, CScriptHandler *owner,
TTroomScript *roomScript, TTnpcScript *npcScript) :
_owner(owner), _field2C(1), _inputCtr(inputCtr), _field34(0),
diff --git a/engines/titanic/true_talk/tt_sentence.h b/engines/titanic/true_talk/tt_sentence.h
index f51ca4bdda..3d1c9f2b74 100644
--- a/engines/titanic/true_talk/tt_sentence.h
+++ b/engines/titanic/true_talk/tt_sentence.h
@@ -23,6 +23,7 @@
#ifndef TITANIC_TT_SENTENCE_H
#define TITANIC_TT_SENTENCE_H
+#include "common/array.h"
#include "titanic/true_talk/tt_concept_node.h"
#include "titanic/true_talk/tt_npc_script.h"
#include "titanic/true_talk/tt_room_script.h"
@@ -45,6 +46,39 @@ public:
TTsentenceConcept *addSibling();
};
+struct TTsentenceEntry {
+ int _field0;
+ int _field4;
+ CString _string8;
+ int _fieldC;
+ CString _string10;
+ CString _string14;
+ CString _string18;
+ CString _string1C;
+ int _field20;
+ CString _string24;
+ int _field28;
+ int _field2C;
+ int _field30;
+
+ TTsentenceEntry() : _field0(0), _field4(0), _fieldC(0),
+ _field20(0), _field28(0), _field2C(0), _field30(0) {}
+
+ /**
+ * Load an entry from the passed stream, and returns true
+ * if an entry was successfully loaded
+ */
+ bool load(Common::SeekableReadStream *s);
+};
+
+class TTsentenceEntries : public Common::Array<TTsentenceEntry> {
+public:
+ /**
+ * Load a list of entries from the specified resource
+ */
+ void load(const CString &resName);
+};
+
class TTsentence {
private:
CScriptHandler *_owner;