From d3dc8d81ce24146913c531c5d8cae25a383f8e03 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Thu, 9 Jun 2016 21:07:27 -0400 Subject: TITANIC: Beginnings of BarbotScript process --- engines/titanic/true_talk/barbot_script.cpp | 79 ++++++++++++++++++++++++++++ engines/titanic/true_talk/barbot_script.h | 3 ++ engines/titanic/true_talk/tt_npc_script.cpp | 10 ++-- engines/titanic/true_talk/tt_npc_script.h | 4 +- engines/titanic/true_talk/tt_script_base.cpp | 4 +- engines/titanic/true_talk/tt_script_base.h | 2 +- 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) -- cgit v1.2.3