aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/true_talk
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic/true_talk')
-rw-r--r--engines/titanic/true_talk/barbot_script.cpp11
-rw-r--r--engines/titanic/true_talk/barbot_script.h11
-rw-r--r--engines/titanic/true_talk/bellbot_script.cpp11
-rw-r--r--engines/titanic/true_talk/bellbot_script.h10
-rw-r--r--engines/titanic/true_talk/deskbot_script.cpp27
-rw-r--r--engines/titanic/true_talk/deskbot_script.h13
-rw-r--r--engines/titanic/true_talk/doorbot_script.cpp11
-rw-r--r--engines/titanic/true_talk/doorbot_script.h10
-rw-r--r--engines/titanic/true_talk/liftbot_script.cpp9
-rw-r--r--engines/titanic/true_talk/liftbot_script.h8
-rw-r--r--engines/titanic/true_talk/maitred_script.cpp9
-rw-r--r--engines/titanic/true_talk/maitred_script.h8
-rw-r--r--engines/titanic/true_talk/parrot_script.cpp5
-rw-r--r--engines/titanic/true_talk/parrot_script.h4
-rw-r--r--engines/titanic/true_talk/succubus_script.cpp7
-rw-r--r--engines/titanic/true_talk/succubus_script.h6
-rw-r--r--engines/titanic/true_talk/tt_npc_script.cpp104
-rw-r--r--engines/titanic/true_talk/tt_npc_script.h35
18 files changed, 217 insertions, 82 deletions
diff --git a/engines/titanic/true_talk/barbot_script.cpp b/engines/titanic/true_talk/barbot_script.cpp
index ab4fbb2384..2bb3a1876f 100644
--- a/engines/titanic/true_talk/barbot_script.cpp
+++ b/engines/titanic/true_talk/barbot_script.cpp
@@ -25,7 +25,7 @@
namespace Titanic {
-int BarbotScript::proc6() const {
+int BarbotScript::proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag) {
warning("TODO");
return 2;
}
@@ -59,7 +59,7 @@ bool BarbotScript::proc18() const {
return false;
}
-int BarbotScript::proc21(int v) {
+int BarbotScript::proc21(int v1, int v2, int v3) {
warning("TODO");
return 0;
}
@@ -74,8 +74,9 @@ int BarbotScript::proc23() const {
return 0;
}
-void BarbotScript::proc24() {
+const int *BarbotScript::getTablePtr(int id) {
warning("TODO");
+ return nullptr;
}
int BarbotScript::proc25() const {
@@ -90,12 +91,12 @@ void BarbotScript::proc32() {
warning("TODO");
}
-int BarbotScript::proc36() const {
+int BarbotScript::proc36(int tagId) const {
warning("TODO");
return 0;
}
-int BarbotScript::proc37() const {
+uint BarbotScript::translateId(uint id) const {
warning("TODO");
return 0;
}
diff --git a/engines/titanic/true_talk/barbot_script.h b/engines/titanic/true_talk/barbot_script.h
index ac074e2b94..a55c12bc71 100644
--- a/engines/titanic/true_talk/barbot_script.h
+++ b/engines/titanic/true_talk/barbot_script.h
@@ -33,22 +33,23 @@ public:
const char *charName, int v3, int val2, int v4, int v5, int v6, int v7) :
TTnpcScript(val1, charClass, v2, charName, v3, val2, v4, v5, v6, v7) {}
- virtual int proc6() const;
+ virtual int proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag);
virtual void proc7(int v1, int v2);
virtual int proc10() const;
virtual int proc15() const;
virtual bool proc16() const;
virtual bool proc17() const;
virtual bool proc18() const;
- virtual int proc21(int v);
+ virtual int proc21(int v1, int v2, int v3);
virtual int proc22() const;
virtual int proc23() const;
- virtual void proc24();
+ virtual const int *getTablePtr(int id);
virtual int proc25() const;
virtual void proc26();
virtual void proc32();
- virtual int proc36() const;
- virtual int proc37() const;
+ virtual int proc36(int val) const;
+
+ virtual uint translateId(uint id) const;
};
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/bellbot_script.cpp b/engines/titanic/true_talk/bellbot_script.cpp
index ccd83d011f..794e67130f 100644
--- a/engines/titanic/true_talk/bellbot_script.cpp
+++ b/engines/titanic/true_talk/bellbot_script.cpp
@@ -40,7 +40,7 @@ BellbotScript::BellbotScript(int val1, const char *charClass, int v2,
_array[1] = 0;
}
-int BellbotScript::proc6() const {
+int BellbotScript::proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag) {
warning("TODO");
return 2;
}
@@ -74,7 +74,7 @@ bool BellbotScript::proc18() const {
return 0;
}
-int BellbotScript::proc21(int v) {
+int BellbotScript::proc21(int v1, int v2, int v3) {
warning("TODO");
return 0;
}
@@ -89,8 +89,9 @@ int BellbotScript::proc23() const {
return 0;
}
-void BellbotScript::proc24() {
+const int *BellbotScript::getTablePtr(int id) {
warning("TODO");
+ return nullptr;
}
int BellbotScript::proc25() const {
@@ -101,12 +102,12 @@ int BellbotScript::proc25() const {
void BellbotScript::proc26() {
}
-int BellbotScript::proc36() const {
+int BellbotScript::proc36(int id) const {
warning("TODO");
return 0;
}
-int BellbotScript::proc37() const {
+uint BellbotScript::translateId(uint id) const {
warning("TODO");
return 0;
}
diff --git a/engines/titanic/true_talk/bellbot_script.h b/engines/titanic/true_talk/bellbot_script.h
index d759583513..d7fbab3a8f 100644
--- a/engines/titanic/true_talk/bellbot_script.h
+++ b/engines/titanic/true_talk/bellbot_script.h
@@ -38,21 +38,21 @@ public:
BellbotScript(int val1, const char *charClass, int v2,
const char *charName, int v3, int val2);
- virtual int proc6() const;
+ virtual int proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag);
virtual void proc7(int v1, int v2);
virtual int proc10() const;
virtual int proc15() const;
virtual bool proc16() const;
virtual bool proc17() const;
virtual bool proc18() const;
- virtual int proc21(int v);
+ virtual int proc21(int v1, int v2, int v3);
virtual int proc22() const;
virtual int proc23() const;
- virtual void proc24();
+ virtual const int *getTablePtr(int id);
virtual int proc25() const;
virtual void proc26();
- virtual int proc36() const;
- virtual int proc37() const;
+ virtual int proc36(int val) const;
+ virtual uint translateId(uint id) const;
};
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/deskbot_script.cpp b/engines/titanic/true_talk/deskbot_script.cpp
index 65a13b5ce1..dbe2664e99 100644
--- a/engines/titanic/true_talk/deskbot_script.cpp
+++ b/engines/titanic/true_talk/deskbot_script.cpp
@@ -41,9 +41,21 @@ DeskbotScript::DeskbotScript(int val1, const char *charClass, int v2,
_field74 = 0;
}
-int DeskbotScript::proc6() const {
- warning("TODO");
- return 2;
+int DeskbotScript::proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag) {
+ for (uint idx = 0; idx < _tags.size(); ++idx) {
+ const TTnpcScriptTag &scriptTag = _tags[idx];
+ uint currTag = (idx == 0) ? MKTAG('P', 'K', 'U', 'P') : scriptTag._tag;
+
+ if (currTag == tag) {
+ int valIndex = getRandomNumber(scriptTag.size()) - 1;
+ uint diagId = getDialogueId(scriptTag._values[valIndex]);
+ addResponse(diagId);
+ applyResponse();
+ break;
+ }
+ }
+
+ return SS_1;
}
void DeskbotScript::proc7(int v1, int v2) {
@@ -75,7 +87,7 @@ bool DeskbotScript::proc18() const {
return 0;
}
-int DeskbotScript::proc21(int v) {
+int DeskbotScript::proc21(int v1, int v2, int v3) {
warning("TODO");
return 0;
}
@@ -90,8 +102,9 @@ int DeskbotScript::proc23() const {
return 0;
}
-void DeskbotScript::proc24() {
+const int *DeskbotScript::getTablePtr(int id) {
warning("TODO");
+ return nullptr;
}
int DeskbotScript::proc25() const {
@@ -102,12 +115,12 @@ int DeskbotScript::proc25() const {
void DeskbotScript::proc26() {
}
-int DeskbotScript::proc36() const {
+int DeskbotScript::proc36(int id) const {
warning("TODO");
return 0;
}
-int DeskbotScript::proc37() const {
+uint DeskbotScript::translateId(uint id) const {
warning("TODO");
return 0;
}
diff --git a/engines/titanic/true_talk/deskbot_script.h b/engines/titanic/true_talk/deskbot_script.h
index 8db1a80a9c..f2de881777 100644
--- a/engines/titanic/true_talk/deskbot_script.h
+++ b/engines/titanic/true_talk/deskbot_script.h
@@ -23,30 +23,33 @@
#ifndef TITANIC_DESKBOT_SCRIPT_H
#define TITANIC_DESKBOT_SCRIPT_H
+#include "common/array.h"
#include "titanic/true_talk/tt_npc_script.h"
namespace Titanic {
class DeskbotScript : public TTnpcScript {
+private:
+ Common::Array<TTnpcScriptTag> _tags;
public:
DeskbotScript(int val1, const char *charClass, int v2,
const char *charName, int v3, int val2);
- virtual int proc6() const;
+ virtual int proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag);
virtual void proc7(int v1, int v2);
virtual int proc10() const;
virtual int proc15() const;
virtual bool proc16() const;
virtual bool proc17() const;
virtual bool proc18() const;
- virtual int proc21(int v);
+ virtual int proc21(int v1, int v2, int v3);
virtual int proc22() const;
virtual int proc23() const;
- virtual void proc24();
+ virtual const int *getTablePtr(int id);
virtual int proc25() const;
virtual void proc26();
- virtual int proc36() const;
- virtual int proc37() const;
+ virtual int proc36(int val) const;
+ virtual uint translateId(uint id) const;
virtual void proc38();
virtual void proc39();
diff --git a/engines/titanic/true_talk/doorbot_script.cpp b/engines/titanic/true_talk/doorbot_script.cpp
index 43b9e46335..9d35f697f9 100644
--- a/engines/titanic/true_talk/doorbot_script.cpp
+++ b/engines/titanic/true_talk/doorbot_script.cpp
@@ -25,7 +25,7 @@
namespace Titanic {
-int DoorbotScript::proc6() const {
+int DoorbotScript::proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag) {
warning("TODO");
return 2;
}
@@ -59,7 +59,7 @@ bool DoorbotScript::proc18() const {
return 0;
}
-int DoorbotScript::proc21(int v) {
+int DoorbotScript::proc21(int v1, int v2, int v3) {
warning("TODO");
return 0;
}
@@ -74,8 +74,9 @@ int DoorbotScript::proc23() const {
return 0;
}
-void DoorbotScript::proc24() {
+const int *DoorbotScript::getTablePtr(int id) {
warning("TODO");
+ return nullptr;
}
int DoorbotScript::proc25() const {
@@ -90,12 +91,12 @@ void DoorbotScript::proc32() {
warning("TODO");
}
-int DoorbotScript::proc36() const {
+int DoorbotScript::proc36(int id) const {
warning("TODO");
return 0;
}
-int DoorbotScript::proc37() const {
+uint DoorbotScript::translateId(uint id) const {
warning("TODO");
return 0;
}
diff --git a/engines/titanic/true_talk/doorbot_script.h b/engines/titanic/true_talk/doorbot_script.h
index c812d3129a..82897b7bfc 100644
--- a/engines/titanic/true_talk/doorbot_script.h
+++ b/engines/titanic/true_talk/doorbot_script.h
@@ -35,22 +35,22 @@ public:
const char *charName, int v3, int val2, int v4, int v5, int v6, int v7) :
TTnpcScript(val1, charClass, v2, charName, v3, val2, v4, v5, v6, v7) {}
- virtual int proc6() const;
+ virtual int proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag);
virtual void proc7(int v1, int v2);
virtual int proc10() const;
virtual int proc15() const;
virtual bool proc16() const;
virtual bool proc17() const;
virtual bool proc18() const;
- virtual int proc21(int v);
+ virtual int proc21(int v1, int v2, int v3);
virtual int proc22() const;
virtual int proc23() const;
- virtual void proc24();
+ virtual const int *getTablePtr(int id);
virtual int proc25() const;
virtual void proc26();
virtual void proc32();
- virtual int proc36() const;
- virtual int proc37() const;
+ virtual int proc36(int val) const;
+ virtual uint translateId(uint id) const;
};
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/liftbot_script.cpp b/engines/titanic/true_talk/liftbot_script.cpp
index c30d226c89..b1577b3979 100644
--- a/engines/titanic/true_talk/liftbot_script.cpp
+++ b/engines/titanic/true_talk/liftbot_script.cpp
@@ -25,7 +25,7 @@
namespace Titanic {
-int LiftbotScript::proc6() const {
+int LiftbotScript::proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag) {
warning("TODO");
return 2;
}
@@ -64,7 +64,7 @@ bool LiftbotScript::proc18() const {
return 0;
}
-int LiftbotScript::proc21(int v) {
+int LiftbotScript::proc21(int v1, int v2, int v3) {
warning("TODO");
return 0;
}
@@ -79,8 +79,9 @@ int LiftbotScript::proc23() const {
return 0;
}
-void LiftbotScript::proc24() {
+const int *LiftbotScript::getTablePtr(int id) {
warning("TODO");
+ return nullptr;
}
int LiftbotScript::proc25() const {
@@ -95,7 +96,7 @@ void LiftbotScript::proc32() {
warning("TODO");
}
-int LiftbotScript::proc37() const {
+uint LiftbotScript::translateId(uint id) const {
warning("TODO");
return 0;
}
diff --git a/engines/titanic/true_talk/liftbot_script.h b/engines/titanic/true_talk/liftbot_script.h
index 7bb355a666..8c2ae3210c 100644
--- a/engines/titanic/true_talk/liftbot_script.h
+++ b/engines/titanic/true_talk/liftbot_script.h
@@ -33,7 +33,7 @@ public:
const char *charName, int v3, int val2, int v4, int v5, int v6, int v7) :
TTnpcScript(val1, charClass, v2, charName, v3, val2, v4, v5, v6, v7) {}
- virtual int proc6() const;
+ virtual int proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag);
virtual void proc7(int v1, int v2);
virtual int proc9() const;
virtual int proc10() const;
@@ -41,14 +41,14 @@ public:
virtual bool proc16() const;
virtual bool proc17() const;
virtual bool proc18() const;
- virtual int proc21(int v);
+ virtual int proc21(int v1, int v2, int v3);
virtual int proc22() const;
virtual int proc23() const;
- virtual void proc24();
+ virtual const int *getTablePtr(int id);
virtual int proc25() const;
virtual void proc26();
virtual void proc32();
- virtual int proc37() const;
+ virtual uint translateId(uint id) const;
};
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/maitred_script.cpp b/engines/titanic/true_talk/maitred_script.cpp
index 35f1efa68c..5581c6b605 100644
--- a/engines/titanic/true_talk/maitred_script.cpp
+++ b/engines/titanic/true_talk/maitred_script.cpp
@@ -39,7 +39,7 @@ MaitreDScript::MaitreDScript(int val1, const char *charClass, int v2,
CTrueTalkManager::setFlags(16, 0);
}
-int MaitreDScript::proc6() const {
+int MaitreDScript::proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag) {
warning("TODO");
return 2;
}
@@ -68,7 +68,7 @@ bool MaitreDScript::proc18() const {
return 0;
}
-int MaitreDScript::proc21(int v) {
+int MaitreDScript::proc21(int v1, int v2, int v3) {
warning("TODO");
return 0;
}
@@ -83,8 +83,9 @@ int MaitreDScript::proc23() const {
return 0;
}
-void MaitreDScript::proc24() {
+const int *MaitreDScript::getTablePtr(int id) {
warning("TODO");
+ return nullptr;
}
int MaitreDScript::proc25() const {
@@ -95,7 +96,7 @@ int MaitreDScript::proc25() const {
void MaitreDScript::proc26() {
}
-int MaitreDScript::proc37() const {
+uint MaitreDScript::translateId(uint id) const {
warning("TODO");
return 0;
}
diff --git a/engines/titanic/true_talk/maitred_script.h b/engines/titanic/true_talk/maitred_script.h
index bd3e440ea9..14505ca616 100644
--- a/engines/titanic/true_talk/maitred_script.h
+++ b/engines/titanic/true_talk/maitred_script.h
@@ -32,19 +32,19 @@ public:
MaitreDScript(int val1, const char *charClass, int v2,
const char *charName, int v3, int val2);
- virtual int proc6() const;
+ virtual int proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag);
virtual void proc7(int v1, int v2);
virtual int proc10() const;
virtual bool proc16() const;
virtual bool proc17() const;
virtual bool proc18() const;
- virtual int proc21(int v);
+ virtual int proc21(int v1, int v2, int v3);
virtual int proc22() const;
virtual int proc23() const;
- virtual void proc24();
+ virtual const int *getTablePtr(int id);
virtual int proc25() const;
virtual void proc26();
- virtual int proc37() const;
+ virtual uint translateId(uint id) const;
};
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/parrot_script.cpp b/engines/titanic/true_talk/parrot_script.cpp
index e97d32dd30..a6b37bfc57 100644
--- a/engines/titanic/true_talk/parrot_script.cpp
+++ b/engines/titanic/true_talk/parrot_script.cpp
@@ -25,7 +25,7 @@
namespace Titanic {
-int ParrotScript::proc6() const {
+int ParrotScript::proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag) {
warning("TODO");
return 2;
}
@@ -54,8 +54,9 @@ int ParrotScript::proc23() const {
return 0;
}
-void ParrotScript::proc24() {
+const int *ParrotScript::getTablePtr(int id) {
warning("TODO");
+ return nullptr;
}
int ParrotScript::proc25() const {
diff --git a/engines/titanic/true_talk/parrot_script.h b/engines/titanic/true_talk/parrot_script.h
index 246ceb4234..0add5d9dfe 100644
--- a/engines/titanic/true_talk/parrot_script.h
+++ b/engines/titanic/true_talk/parrot_script.h
@@ -33,13 +33,13 @@ public:
const char *charName, int v3, int val2, int v4, int v5, int v6, int v7) :
TTnpcScript(val1, charClass, v2, charName, v3, val2, v4, v5, v6, v7) {}
- virtual int proc6() const;
+ virtual int proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag);
virtual void proc7(int v1, int v2);
virtual int proc10() const;
virtual bool proc17() const;
virtual bool proc18() const;
virtual int proc23() const;
- virtual void proc24();
+ virtual const int *getTablePtr(int id);
virtual int proc25() const;
virtual void proc26();
};
diff --git a/engines/titanic/true_talk/succubus_script.cpp b/engines/titanic/true_talk/succubus_script.cpp
index 0c1f6700ee..436b779432 100644
--- a/engines/titanic/true_talk/succubus_script.cpp
+++ b/engines/titanic/true_talk/succubus_script.cpp
@@ -25,7 +25,7 @@
namespace Titanic {
-int SuccUBusScript::proc6() const {
+int SuccUBusScript::proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag) {
warning("TODO");
return 2;
}
@@ -49,7 +49,7 @@ bool SuccUBusScript::proc18() const {
return 0;
}
-int SuccUBusScript::proc21(int v) {
+int SuccUBusScript::proc21(int v1, int v2, int v3) {
warning("TODO");
return 0;
}
@@ -59,8 +59,9 @@ int SuccUBusScript::proc23() const {
return 0;
}
-void SuccUBusScript::proc24() {
+const int *SuccUBusScript::getTablePtr(int id) {
warning("TODO");
+ return nullptr;
}
int SuccUBusScript::proc25() const {
diff --git a/engines/titanic/true_talk/succubus_script.h b/engines/titanic/true_talk/succubus_script.h
index 6917d0a8b1..8a078c2639 100644
--- a/engines/titanic/true_talk/succubus_script.h
+++ b/engines/titanic/true_talk/succubus_script.h
@@ -36,14 +36,14 @@ public:
TTnpcScript(val1, charClass, v2, charName, v3, val2, v4, v5, v6, v7),
_field2D0(0) {}
- virtual int proc6() const;
+ virtual int proc6(TTnpcScript *npcScript, TTsentence *sentence, uint tag);
virtual void proc7(int v1, int v2);
virtual int proc10() const;
virtual bool proc17() const;
virtual bool proc18() const;
- virtual int proc21(int v);
+ virtual int proc21(int v1, int v2, int v3);
virtual int proc23() const;
- virtual void proc24();
+ virtual const int *getTablePtr(int id);
virtual int proc25() const;
virtual void proc26();
};
diff --git a/engines/titanic/true_talk/tt_npc_script.cpp b/engines/titanic/true_talk/tt_npc_script.cpp
index 7020794d1a..bbd75a4854 100644
--- a/engines/titanic/true_talk/tt_npc_script.cpp
+++ b/engines/titanic/true_talk/tt_npc_script.cpp
@@ -27,6 +27,17 @@
namespace Titanic {
+int TTnpcScriptTag::size() const {
+ for (int idx = 0; idx < 4; ++idx) {
+ if (_values[idx] == 0)
+ return idx;
+ }
+
+ return 4;
+}
+
+/*------------------------------------------------------------------------*/
+
TTnpcScriptBase::TTnpcScriptBase(int charId, const char *charClass, int v2,
const char *charName, int v3, int val2, int v4, int v5, int v6, int v7) :
TTscriptBase(0, charClass, v2, charName, v3, v4, v5, v6, v7),
@@ -40,9 +51,9 @@ TTnpcScript::TTnpcScript(int charId, const char *charClass, int v2,
TTnpcScriptBase(charId, charClass, v2, charName, v3, val2, v4, v5, v6, v7),
_subPtr(nullptr), _field60(0), _field64(0), _field68(0),
_field6C(0), _field70(0), _field74(0), _field78(0),
- _field7C(0), _field80(0) {
+ _field7C(0), _field80(0), _field2CC(false) {
CTrueTalkManager::_v2 = 0;
- Common::fill(&_array[0], &_array[147], 0);
+ Common::fill(&_array[0], &_array[146], 0);
if (!CTrueTalkManager::_v10) {
Common::fill(&CTrueTalkManager::_v11[0], &CTrueTalkManager::_v11[41], 0);
@@ -53,7 +64,8 @@ TTnpcScript::TTnpcScript(int charId, const char *charClass, int v2,
}
void TTnpcScript::resetFlags() {
- Common::fill(&_array[26], &_array[146], 0);
+ Common::fill(&_array[20], &_array[140], 0);
+ _field2CC = false;
}
void TTnpcScript::randomizeFlags() {
@@ -109,16 +121,18 @@ bool TTnpcScript::proc18() const {
return true;
}
-void TTnpcScript::proc19(int v) {
+uint TTnpcScript::proc19(uint v) {
warning("TODO");
+ return 0;
}
void TTnpcScript::proc20(int v) {
warning("TODO");
}
-int TTnpcScript::proc21(int v) {
- return v;
+int TTnpcScript::proc21(int v1, int v2, int v3) {
+ // TODO
+ return v1;
}
int TTnpcScript::proc22() const {
@@ -216,11 +230,11 @@ int TTnpcScript::getDialLevel(uint dialNum, bool flag) {
return 0;
}
-int TTnpcScript::proc36() const {
+int TTnpcScript::proc36(int id) const {
return 0;
}
-int TTnpcScript::proc37() const {
+uint TTnpcScript::translateId(uint id) const {
return 0;
}
@@ -284,4 +298,78 @@ int TTnpcScript::getValue(int testNum) {
}
}
+uint TTnpcScript::getRandomNumber(int max) const {
+ return 1 + g_vm->getRandomNumber(max - 1);
+}
+
+uint TTnpcScript::getDialogueId(uint tagId) {
+ if (tagId < 200000)
+ return tagId;
+
+ // Perform any script specific translation
+ uint origId = tagId;
+ if (tagId >= 290000 && tagId <= 290263)
+ tagId = translateId(tagId);
+ if (!tagId)
+ return 0;
+
+ if (!_field2CC) {
+ _field2CC = true;
+ int val = translateByArray(tagId);
+ if (val > 0) {
+ if (proc36(val))
+ return 4;
+ }
+ }
+
+ uint oldTagId = tagId;
+ tagId = proc19(tagId);
+ if (tagId != oldTagId)
+ tagId = proc19(tagId);
+
+ oldTagId = proc23();
+ int v21 = proc21(origId, tagId, oldTagId);
+ if (!v21)
+ return 0;
+
+ int idx = 0;
+ const int *tableP;
+ for (;;) {
+ tableP = getTablePtr(idx++);
+ if (!tableP)
+ return 0;
+
+ if (*tableP == v21)
+ break;
+ }
+ uint newVal = tableP[oldTagId + 1];
+
+ idx = 0;
+ int *arrP = &_array[26];
+ while (idx < 4 && arrP[idx])
+ ++idx;
+ if (idx == 4)
+ return newVal;
+
+ _array[26] = origId;
+ idx = 0;
+ arrP = &_array[30];
+ while (idx < 4 && arrP[idx])
+ ++idx;
+ if (idx == 4)
+ return newVal;
+
+ arrP[idx] = newVal;
+ return newVal;
+}
+
+int TTnpcScript::translateByArray(int id) {
+ for (uint idx = 1, arrIndex = 35; idx < 15; ++idx, arrIndex += 8) {
+ if (_array[idx - 1] == id && _array[idx] == 0)
+ return idx;
+ }
+
+ return -1;
+}
+
} // 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 833a958249..d52da2ed73 100644
--- a/engines/titanic/true_talk/tt_npc_script.h
+++ b/engines/titanic/true_talk/tt_npc_script.h
@@ -31,6 +31,16 @@ namespace Titanic {
class TTroomScript;
class TTsentence;
+struct TTnpcScriptTag {
+ uint _tag;
+ uint _values[4];
+
+ /**
+ * Returns the size of the values list plus 1
+ */
+ int size() const;
+};
+
class TTnpcScriptBase : public TTscriptBase {
protected:
int _field54;
@@ -59,6 +69,8 @@ public:
};
class TTnpcScript : public TTnpcScriptBase {
+private:
+ int translateByArray(int id);
protected:
byte *_subPtr;
int _field60;
@@ -70,7 +82,8 @@ protected:
int _field78;
int _field7C;
int _field80;
- int _array[147];
+ int _array[146];
+ bool _field2CC;
protected:
void resetFlags();
@@ -82,6 +95,16 @@ protected:
* Perform test on various state values
*/
int getValue(int testNum);
+
+ /**
+ * Gets a random number between 1 and a given max
+ */
+ uint getRandomNumber(int max) const;
+
+ /**
+ * Returns a dialogue Id by script tag value Id
+ */
+ uint getDialogueId(uint tagId);
public:
TTnpcScript(int charId, const char *charClass, int v2,
const char *charName, int v3, int val2, int v4,
@@ -108,12 +131,12 @@ public:
virtual bool proc16() const;
virtual bool proc17() const;
virtual bool proc18() const;
- virtual void proc19(int v);
+ virtual uint proc19(uint v);
virtual void proc20(int v);
- virtual int proc21(int v);
+ virtual int proc21(int v1, int v2, int v3);
virtual int proc22() const;
virtual int proc23() const;
- virtual void proc24() = 0;
+ virtual const int *getTablePtr(int id) = 0;
virtual int proc25() const;
virtual void proc26();
virtual void save(SimpleFile *file);
@@ -130,8 +153,8 @@ public:
*/
virtual int getDialLevel(uint dialNum, bool flag = true);
- virtual int proc36() const;
- virtual int proc37() const;
+ virtual int proc36(int val) const;
+ virtual uint translateId(uint id) const;
void preLoad();