aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2016-06-09 21:07:27 -0400
committerPaul Gilbert2016-07-15 19:21:45 -0400
commitd3dc8d81ce24146913c531c5d8cae25a383f8e03 (patch)
treed6efba51b46c0a75f7bb07c4392c1691443162ce
parentf6cd02ce78627cfbc725eb999aca1a623cf43917 (diff)
downloadscummvm-rg350-d3dc8d81ce24146913c531c5d8cae25a383f8e03.tar.gz
scummvm-rg350-d3dc8d81ce24146913c531c5d8cae25a383f8e03.tar.bz2
scummvm-rg350-d3dc8d81ce24146913c531c5d8cae25a383f8e03.zip
TITANIC: Beginnings of BarbotScript process
-rw-r--r--engines/titanic/true_talk/barbot_script.cpp79
-rw-r--r--engines/titanic/true_talk/barbot_script.h3
-rw-r--r--engines/titanic/true_talk/tt_npc_script.cpp10
-rw-r--r--engines/titanic/true_talk/tt_npc_script.h4
-rw-r--r--engines/titanic/true_talk/tt_script_base.cpp4
-rw-r--r--engines/titanic/true_talk/tt_script_base.h2
6 files changed, 94 insertions, 8 deletions
diff --git a/engines/titanic/true_talk/barbot_script.cpp b/engines/titanic/true_talk/barbot_script.cpp
index ba3ca03282..2687336388 100644
--- a/engines/titanic/true_talk/barbot_script.cpp
+++ b/engines/titanic/true_talk/barbot_script.cpp
@@ -30,10 +30,21 @@ static const int STATE_ARRAY[7] = {
0xCAB0, 0xCAB2, 0xCAB3, 0xCAB4, 0xCAB5, 0xCAB6, 0xCAB7
};
+static const uint ARRAY1[] = {
+ 0, 50033, 50044, 50045, 50046, 50047, 50048, 50049,
+ 50050, 50051, 50034, 50035, 50036, 50037, 50038, 50039,
+ 50040, 50041, 50042, 50043, 50411, 0
+};
+
+static const uint ARRAY2[] = {
+ 51899, 51900, 51901, 51902, 51903, 51904, 51905, 51906, 51907, 0
+};
+
BarbotScript::BarbotScript(int val1, const char *charClass, int v2,
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) {
_state = 0;
+ _arrIndex = 0;
loadRanges("Ranges/Barbot");
loadResponses("Responses/Barbot");
@@ -115,9 +126,73 @@ int BarbotScript::chooseResponse(TTroomScript *roomScript, TTsentence *sentence,
}
int BarbotScript::process(TTroomScript *roomScript, TTsentence *sentence) {
+ int dialogueId = 0;
+
if (roomScript->_scriptId != 112)
return 2;
+ checkItems(roomScript, sentence);
+ if (isState9()) {
+ if (sentence->localWord("visioncenter") || sentence->localWord("brain") ||
+ sentence->contains("vision") || sentence->contains("visual") ||
+ sentence->contains("brain") || sentence->contains("crystal")) {
+ if (CTrueTalkManager::getStateValue(2)) {
+ addResponse(getDialogueId(251003));
+ applyResponse();
+ CTrueTalkManager::triggerAction(6, 0);
+ return 2;
+ }
+ }
+
+ if (sentence->contains("goldfish")) {
+ addResponse(getDialogueId(250184));
+ applyResponse();
+ return 2;
+ }
+
+ dialogueId = ARRAY1[getRandomNumber(20)];
+ if (!ARRAY2[_arrIndex])
+ _arrIndex = 0;
+
+ if (_arrIndex) {
+ dialogueId = ARRAY2[_arrIndex++];
+ } else if (getRandomNumber(100) > 35) {
+ dialogueId = ARRAY2[0];
+ _arrIndex = 1;
+ } else if (getRandomNumber(100) > 60) {
+ switch (sentence->_field2C) {
+ case 2:
+ dialogueId = 51914;
+ break;
+ case 3:
+ dialogueId = 51911;
+ break;
+ case 4:
+ dialogueId = 51913;
+ break;
+ case 5:
+ dialogueId = 51912;
+ break;
+ case 6:
+ dialogueId = 51915;
+ break;
+ case 7:
+ dialogueId = 51909;
+ break;
+ default:
+ break;
+ }
+ }
+
+ addResponse(dialogueId);
+ if (getRandomNumber(100) > 65)
+ addResponse(getDialogueId(251250));
+ applyResponse();
+ return 2;
+ }
+
+
+
// TODO
return 2;
}
@@ -189,4 +264,8 @@ void BarbotScript::adjustDial(int dialNum, int amount) {
setDial(dialNum, level);
}
+bool BarbotScript::isState9() const {
+ return CTrueTalkManager::getStateValue(9) != 0;
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/barbot_script.h b/engines/titanic/true_talk/barbot_script.h
index 4be978cda6..419d7cf606 100644
--- a/engines/titanic/true_talk/barbot_script.h
+++ b/engines/titanic/true_talk/barbot_script.h
@@ -30,6 +30,7 @@ namespace Titanic {
class BarbotScript : public TTnpcScript {
private:
int _state;
+ int _arrIndex;
private:
/**
* Adjust a given dial number by a given delta amount
@@ -40,6 +41,8 @@ private:
* Setup sentence data
*/
void setupSentences();
+
+ bool isState9() const;
public:
BarbotScript(int val1, const char *charClass, int v2,
const char *charName, int v3, int val2, int v4, int v5, int v6, int v7);
diff --git a/engines/titanic/true_talk/tt_npc_script.cpp b/engines/titanic/true_talk/tt_npc_script.cpp
index 1f9bb83be1..070ecbb583 100644
--- a/engines/titanic/true_talk/tt_npc_script.cpp
+++ b/engines/titanic/true_talk/tt_npc_script.cpp
@@ -202,8 +202,12 @@ void TTnpcScript::setupDials(int dial1, int dial2, int dial3) {
_field78 = -_field78;
}
-void TTnpcScript::proc4(int v) {
- warning("TODO");
+void TTnpcScript::addResponse(int id) {
+ if (id > 200000)
+ id = getDialogueId(id);
+
+ proc15(id);
+ TTscriptBase::addResponse(id);
}
int TTnpcScript::chooseResponse(TTroomScript *roomScript, TTsentence *sentence, uint tag) {
@@ -266,7 +270,7 @@ void TTnpcScript::selectResponse(int id) {
addResponse(id);
}
-int TTnpcScript::proc15() const {
+int TTnpcScript::proc15(int id) const {
return 0;
}
diff --git a/engines/titanic/true_talk/tt_npc_script.h b/engines/titanic/true_talk/tt_npc_script.h
index f31a769665..bcf3c7decd 100644
--- a/engines/titanic/true_talk/tt_npc_script.h
+++ b/engines/titanic/true_talk/tt_npc_script.h
@@ -237,7 +237,7 @@ public:
const char *charName, int v3, int val2, int v4,
int v5, int v6, int v7);
- virtual void proc4(int v);
+ virtual void addResponse(int id);
/**
* Chooses and adds a conversation response based on a specified tag Id.
@@ -275,7 +275,7 @@ public:
*/
virtual void selectResponse(int id);
- virtual int proc15() const;
+ virtual int proc15(int id) const;
virtual bool handleQuote(TTroomScript *roomScript, TTsentence *sentence,
int val, uint tagId, uint remainder) const;
virtual bool proc17() const;
diff --git a/engines/titanic/true_talk/tt_script_base.cpp b/engines/titanic/true_talk/tt_script_base.cpp
index 218c86deb3..c6a197a8a4 100644
--- a/engines/titanic/true_talk/tt_script_base.cpp
+++ b/engines/titanic/true_talk/tt_script_base.cpp
@@ -98,8 +98,8 @@ void TTscriptBase::addResponse(const TTstring &str) {
appendResponse2(-1, nullptr, str);
}
-void TTscriptBase::addResponse(int val) {
- appendResponse(-1, nullptr, val);
+void TTscriptBase::addResponse(int id) {
+ appendResponse(-1, nullptr, id);
}
void TTscriptBase::applyResponse() {
diff --git a/engines/titanic/true_talk/tt_script_base.h b/engines/titanic/true_talk/tt_script_base.h
index cdaf8c7fab..e855fefb2c 100644
--- a/engines/titanic/true_talk/tt_script_base.h
+++ b/engines/titanic/true_talk/tt_script_base.h
@@ -82,7 +82,7 @@ public:
virtual void addResponse(const TTstring &str);
- virtual void addResponse(int val);
+ virtual void addResponse(int id);
/**
* Passes on the list of dialogue Ids stored in the response(s)