aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gilbert2016-07-31 13:06:51 -0400
committerPaul Gilbert2016-07-31 13:06:51 -0400
commite2b00938c7488af62521e1ad4e62566fa4077af0 (patch)
treefd3c73410e787aceec034c0bd3b65ad263ff02b7
parent8a2491c51b1b7d27382030f3cb9d58c5b56265f0 (diff)
downloadscummvm-rg350-e2b00938c7488af62521e1ad4e62566fa4077af0.tar.gz
scummvm-rg350-e2b00938c7488af62521e1ad4e62566fa4077af0.tar.bz2
scummvm-rg350-e2b00938c7488af62521e1ad4e62566fa4077af0.zip
TITANIC: Added DeskbotScript preprocess
-rw-r--r--engines/titanic/true_talk/deskbot_script.cpp980
-rw-r--r--engines/titanic/true_talk/deskbot_script.h25
-rw-r--r--engines/titanic/true_talk/tt_npc_script.cpp2
-rw-r--r--engines/titanic/true_talk/tt_npc_script.h2
-rw-r--r--engines/titanic/true_talk/tt_quotes.cpp11
-rw-r--r--engines/titanic/true_talk/tt_quotes.h6
6 files changed, 1016 insertions, 10 deletions
diff --git a/engines/titanic/true_talk/deskbot_script.cpp b/engines/titanic/true_talk/deskbot_script.cpp
index 13d6869c70..c955e7e925 100644
--- a/engines/titanic/true_talk/deskbot_script.cpp
+++ b/engines/titanic/true_talk/deskbot_script.cpp
@@ -23,6 +23,7 @@
#include "common/textconsole.h"
#include "titanic/true_talk/deskbot_script.h"
#include "titanic/true_talk/true_talk_manager.h"
+#include "titanic/titanic.h"
namespace Titanic {
@@ -60,6 +61,17 @@ void DeskbotScript::setupSentences() {
}
int DeskbotScript::process(TTroomScript *roomScript, TTsentence *sentence) {
+ if (roomScript->_scriptId != 110)
+ return 2;
+
+ bool flag20 = getValue(20) != 0;
+ CTrueTalkManager::setFlags(20, 0);
+ checkItems(nullptr, nullptr);
+ getState();
+
+ if (preprocess(roomScript, sentence) != 1)
+ return 1;
+
// TODO
return 0;
}
@@ -433,4 +445,972 @@ void DeskbotScript::setFlags17(uint newId, uint index) {
CTrueTalkManager::setFlags(17, newValue);
}
+int DeskbotScript::preprocess(const TTroomScript *roomScript, const TTsentence *sentence) {
+ if (!roomScript || !sentence)
+ return 1;
+
+ bool stateFlag = true, applyFlag = false;
+ switch (getValue(17)) {
+ case 1:
+ if (sentence->_field2C != 3 && sentence->_field2C != 4
+ && sentence->_field2C != 6 && sentence->_field2C != 10
+ && sentence->_field2C != 2) {
+ addResponse(getDialogueId(240423));
+ applyFlag = true;
+ }
+ break;
+
+ case 2:
+ if (sentence->localWord("gobbledygook")) {
+ addResponse(getDialogueId(240427));
+ applyFlag = true;
+ }
+ break;
+
+ case 3:
+ if (sentence->_field2C == 11 || sentence->_field2C == 13
+ || sentence->_field2C == 3 || sentence->localWord("upgrade")) {
+ addResponse(getDialogueId(240433));
+ applyFlag = true;
+ }
+ break;
+
+ case 4:
+ addResponse(getDialogueId(sentence->_field2C == 11 || sentence->_field2C == 13
+ ? 240495 : 240494));
+ applyFlag = true;
+ break;
+
+ case 5:
+ if (isDial1Low() && getValue(1) == 4) {
+ if (sentence->localWord("name") || sentence->localWord("called")
+ || sentence->localWord("passenger")) {
+ addResponse(getDialogueId(240867));
+ addResponse(getDialogueId(240745));
+ } else {
+ addResponse(getDialogueId(240446));
+ }
+
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 6:
+ if (isDial1Low() && getValue(1) == 4) {
+ if (sentence->localWord("passenger")) {
+ addResponse(getDialogueId(240449));
+ applyFlag = true;
+ stateFlag = false;
+ } else if (sentence->localWord("home")
+ || sentence->localWord("destroy")) {
+ addResponse(getDialogueId(240574));
+ stateFlag = true;
+ } else if (sentence->localWord("name")
+ || sentence->localWord("called")
+ || sentence->_field2C == 11) {
+ addResponse(getDialogueId(240448));
+ stateFlag = true;
+ } else {
+ addResponse(getDialogueId(240489));
+ stateFlag = true;
+ }
+ }
+ break;
+
+ case 7:
+ if (sentence->_field2C == 11 || sentence->_field2C == 13
+ || (sentence->localWord("what") && sentence->localWord("wrong"))
+ || sentence->localWord("clothes")) {
+ addResponse(getDialogueId(240489));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 8:
+ if (isDial1Low() && getValue(1) == 4) {
+ if (sentence->_field2C == 12 || sentence->_field2C == 13
+ || sentence->contains("do not")) {
+
+ addResponse(getDialogueId(240447));
+ setDialRegion(0, 0);
+ setDialRegion(1, 0);
+ CTrueTalkManager::setFlags(1, 3);
+ CTrueTalkManager::triggerAction(19, 3);
+ CTrueTalkManager::setFlags(22, 1);
+ applyFlag = true;
+ } else if (sentence->_field2C == 11) {
+ addResponse(getDialogueId(240746));
+ applyFlag = true;
+ stateFlag = false;
+ } else {
+ addResponse(getDialogueId(240448));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ }
+ break;
+
+ case 9:
+ if (searchQuotes(roomScript, sentence)) {
+ if (isDial0Medium()) {
+ addResponse(getDialogueId(240382));
+ applyFlag = true;
+ stateFlag = false;
+ } else {
+ addResponse(getDialogueId(240548));
+ applyFlag = true;
+ }
+ }
+ break;
+
+ case 10:
+ if (isDial1Medium() && searchQuotes(roomScript, sentence)) {
+ if (isDial0Medium()) {
+ addResponse(getDialogueId(240405));
+ applyFlag = true;
+ stateFlag = false;
+ } else {
+ addResponse(getDialogueId(240548));
+ applyFlag = true;
+ }
+ }
+ break;
+
+ case 11:
+ if (isDial0Medium() && isDial1Medium()
+ && searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240403));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 12:
+ if (isDial0Medium() && isDial1Medium()
+ && searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240548));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 13:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240348));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 14:
+ if (isDial1Medium()) {
+ addResponse(getDialogueId(240568));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 15:
+ if (sentence->localWord("magazine")) {
+ addAssignedRoomDialogue3();
+ stateFlag = true;
+ }
+ break;
+
+ case 17:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240401));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 18:
+ if (!isDial0Low() || !isDial1Low()) {
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240402));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ }
+ break;
+
+ case 19:
+ if (!isDial0Low() && searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240403));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 20:
+ if (!isDial1Medium() && searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240548));
+ applyFlag = true;
+ }
+ break;
+
+ case 21:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240382));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 22:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240383));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 23:
+ if (isDial0Medium() && searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240384));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 24:
+ setDialRegion(0, 0);
+
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240548));
+ applyFlag = true;
+ }
+ break;
+
+ case 25:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240349));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 26:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240350));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 27:
+ case 30:
+ case 33:
+ case 36:
+ case 40:
+ case 43:
+ case 46:
+ case 50:
+ case 55:
+ case 58:
+ case 61:
+ case 68:
+ case 73:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240548));
+ applyFlag = true;
+ }
+ break;
+
+ case 28:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240373));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 29:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240374));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 31:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240346));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 32:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240347));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 34:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240376));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 35:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240377));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 37:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240369));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 38:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240370));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 39:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240371));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 41:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240352));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 42:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240353));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 44:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240389));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 45:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240390));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 47:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240395));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 48:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240396));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 49:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240397));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 51:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240363));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 52:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240364));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 53:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240365));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 54:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240366));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 56:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240392));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 57:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240393));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 59:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240386));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 60:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240387));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 62:
+ if (isDial1Medium() && getValue(1) == 1) {
+ if (isDial0Medium()) {
+ if (sentence->localWord("down")) {
+ addResponse(getDialogueId(240413));
+ applyFlag = true;
+ }
+ } else if (sentence->contains("left") || sentence->contains("right")) {
+ addResponse(getDialogueId(240415));
+ CTrueTalkManager::triggerAction(sentence->localWord("down") ? 22 : 23, 0);
+ } else {
+ addResponse(getDialogueId(240414));
+ applyFlag = true;
+ }
+ }
+ break;
+
+ case 63:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240836));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 64:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240837));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 65:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240838));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 66:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240839));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 67:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(240840));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 69:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(241104));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 70:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(241105));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 71:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(241106));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 72:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(241107));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 74:
+ case 75:
+ if (sentence->_field2C == 24) {
+ addResponse(getDialogueId(240972));
+ applyFlag = true;
+ } else if (sentence->localWord("good") || sentence->localWord("yes")
+ || sentence->localWord("well") || sentence->localWord("ill")
+ || sentence->localWord("sad")) {
+ addResponse(getDialogueId(240805));
+ applyFlag = true;
+ }
+ break;
+
+ case 76:
+ if (sentence->_field2C == 6) {
+ addResponse(getDialogueId(240767));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 77:
+ if (sentence->_field2C == 3) {
+ addResponse(getDialogueId(241109));
+ applyFlag = true;
+ stateFlag = false;
+ }
+
+ case 78:
+ if (sentence->_field2C == 11 || sentence->_field2C == 13) {
+ addResponse(getDialogueId(241262));
+ } else if (sentence->_field2C == 12 || sentence->contains("do not")) {
+ setDialRegion(0, 0);
+ setDialRegion(1, 0);
+ addResponse(getDialogueId(241268));
+ add241716();
+ } else {
+ addResponse(getDialogueId(240745));
+ }
+
+ applyFlag = true;
+ stateFlag = false;
+ break;
+
+ case 79:
+ switch (checkCommonWords(sentence)) {
+ case 1:
+ addResponse(getDialogueId(241263));
+ break;
+ case 2:
+ addResponse(getDialogueId(241266));
+ break;
+ case 3:
+ addAssignedRoom();
+ setState(0);
+ CTrueTalkManager::setFlags(17, 0);
+ return 2;
+ default:
+ addResponse(getDialogueId(241267));
+ break;
+ }
+
+ add241716();
+ applyFlag = true;
+ stateFlag = false;
+ break;
+
+ case 81:
+ addResponse(getDialogueId(sentence->_field2C == 12 ? 240602 : 241337));
+ applyResponse();
+ setState(0);
+ CTrueTalkManager::setFlags(17, 0);
+ return 2;
+
+ case 82:
+ if (sentence->_field2C == 2) {
+ addResponse(getDialogueId(241339));
+ applyFlag = true;
+ }
+ break;
+
+ case 83:
+ if ((isDial1Medium() && isDial0Low()) ||
+ (isDial1Low() && isDial0Medium())) {
+ if (sentence->localWord("yes") || sentence->localWord("but")) {
+ if (sentence->localWord("will") || sentence->localWord("do")) {
+ addResponse(getDialogueId(241366));
+ applyFlag = true;
+ }
+ }
+ }
+ break;
+
+ case 84:
+ if (sentence->_field2C == 12 || sentence->contains("vegetarian")
+ || sentence->contains("vegitarian")) {
+ addResponse(getDialogueId(241718));
+ addResponse(getDialogueId(241709));
+ applyFlag = true;
+ stateFlag = false;
+ } else if (sentence->contains("continental")
+ || sentence->contains("full")
+ || sentence->contains("porky")
+ || sentence->contains("the 1")
+ || sentence->contains("the 2")
+ || sentence->contains("former")
+ || sentence->contains("latter")) {
+ addResponse(getDialogueId(241717));
+ addResponse(getDialogueId(241709));
+ applyFlag = true;
+ stateFlag = false;
+ } else {
+ if (sentence2C(sentence))
+ addResponse(getDialogueId(241707));
+ addResponse(getDialogueId(241719));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 85:
+ if (sentence->_field2C == 12 || sentence->contains("bugle")
+ || sentence->contains("buggle") || sentence->contains("trumpet")
+ || sentence->contains("saxophone") || sentence->contains("kazoo")
+ || sentence->contains("blerontin 1") || sentence->contains("the 1")
+ || sentence->contains("the 2") || sentence->contains("the 3")
+ || sentence->contains("the 4") || sentence->contains("all of them")
+ || sentence->contains("the lot")) {
+ addResponse(getDialogueId(241710));
+ addResponse(getDialogueId(241713));
+ } else {
+ if (getRandomNumber(100) < 80 && sentence2C(sentence))
+ addResponse(getDialogueId(241707));
+
+ addResponse(getDialogueId(241711));
+ }
+
+ applyFlag = true;
+ stateFlag = false;
+ break;
+
+ case 86:
+ if (sentence->_field2C == 12 || sentence->_field2C == 11 || sentence->contains("view")) {
+ addResponse(getDialogueId(241714));
+ addResponse(getDialogueId(241699));
+ } else {
+ if (getRandomNumber(100) < 80 && sentence2C(sentence))
+ addResponse(getDialogueId(241707));
+
+ if (getRandomNumber(100) < 50) {
+ addResponse(getDialogueId(241715));
+ } else {
+ addResponse(getDialogueId(241712));
+ addResponse(getDialogueId(241713));
+ }
+
+ }
+
+ applyFlag = true;
+ stateFlag = false;
+ break;
+
+ case 87:
+ if (sentence->contains("corner") || sentence->contains("on the end")
+ || sentence->contains("balcony") || sentence->contains("neither")
+ || sentence->contains("the 1") || sentence->contains("the 2")
+ || sentence->contains("former") || sentence->contains("latter")
+ || sentence->contains("either")) {
+ addResponse(getDialogueId(241700));
+ addResponse(getDialogueId(241687));
+ } else {
+ if (getRandomNumber(100) < 80 && sentence2C(sentence))
+ addResponse(getDialogueId(241707));
+
+ addResponse(getDialogueId(241701));
+ addResponse(getDialogueId(241699));
+ }
+
+ applyFlag = true;
+ stateFlag = false;
+ break;
+
+ case 88:
+ if (sentence->contains("imperial") || sentence->contains("the 1")) {
+ addResponse(getDialogueId(241700));
+ addResponse(getDialogueId(241739));
+ } else if (sentence->contains("royal") || sentence->contains("the 2")) {
+ addResponse(getDialogueId(241690));
+ } else if (sentence->contains("despotic") || sentence->contains("the last")
+ || sentence->contains("latter")) {
+ addResponse(getDialogueId(241688));
+ } else if (sentence->contains("president") || sentence->contains("presidential")
+ || sentence->contains("the 3")) {
+ addResponse(getDialogueId(241689));
+ } else {
+ if (getRandomNumber(100) < 80 && sentence2C(sentence))
+ addResponse(getDialogueId(241707));
+
+ addResponse(getDialogueId(241692));
+ }
+
+ applyFlag = true;
+ stateFlag = false;
+ break;
+
+ case 89:
+ if (sentence->contains("king")) {
+ addResponse(getDialogueId(241691));
+ } else if (sentence->contains("queen") || sentence->contains("prince")
+ || sentence->contains("princess") || sentence->contains("small")
+ || sentence->contains("the 1") || sentence->contains("the 2")
+ || sentence->contains("the 3") || sentence->contains("the 4")
+ || sentence->contains("big") || sentence->contains("large")) {
+ addResponse(getDialogueId(241700));
+ addResponse(getDialogueId(241739));
+ } else {
+ if (getRandomNumber(100) < 100 && sentence2C(sentence))
+ addResponse(getDialogueId(241707));
+
+ addResponse(getDialogueId(241690));
+ }
+
+ applyFlag = true;
+ stateFlag = false;
+ break;
+
+ case 90:
+ if (sentence->contains("constitutional") || sentence->contains("const")
+ || sentence->contains("absolute") || sentence->contains("small")
+ || sentence->contains("the 1") || sentence->contains("the 2")
+ || sentence->contains("big") || sentence->contains("large")) {
+ addResponse(getDialogueId(241700));
+ addResponse(getDialogueId(241739));
+ } else {
+ if (getRandomNumber(100) < 80 && sentence2C(sentence))
+ addResponse(getDialogueId(241708));
+
+ addResponse(getDialogueId(241691));
+ }
+
+ applyFlag = true;
+ stateFlag = false;
+ break;
+
+ case 91:
+ if (sentence->contains("benev") || sentence->contains("dict")
+ || sentence->contains("small") || sentence->contains("the 1")
+ || sentence->contains("the 2") || sentence->contains("big")
+ || sentence->contains("large") || sentence->contains("former")
+ || sentence->contains("latter")) {
+ addResponse(getDialogueId(241700));
+ addResponse(getDialogueId(241739));
+ } else {
+ if (getRandomNumber(100) < 80 && sentence2C(sentence))
+ addResponse(getDialogueId(241708));
+
+ addResponse(getDialogueId(241688));
+ }
+
+ applyFlag = true;
+ stateFlag = false;
+ break;
+
+ case 92:
+ case 93:
+ if (sentence->_field2C == 11 || sentence->_field2C == 13) {
+ addResponse(getDialogueId(241077));
+ addResponse(getDialogueId(241706));
+ } else if (sentence->_field2C == 12) {
+ addAssignedRoom();
+ setState(0);
+ CTrueTalkManager::setFlags(17, 0);
+ return 2;
+ } else if (g_vm->_trueTalkManager->_quotes.find(sentence->_normalizedLine.c_str())
+ == MKTAG('F', 'I', 'S', 'H')) {
+ addResponse(getDialogueId(240877));
+ addResponse(getDialogueId(241706));
+ }else {
+ if (getRandomNumber(100) < 80 && sentence2C(sentence))
+ addResponse(getDialogueId(241707));
+
+ addResponse(getDialogueId(241705));
+ if (getRandomNumber(100) < 80)
+ addResponse(getDialogueId(241739));
+ }
+
+ applyFlag = true;
+ stateFlag = false;
+ break;
+
+ case 94:
+ if (sentence->contains("seperate") || sentence->contains("separate")
+ || sentence->contains("detached") || sentence->contains("outside")
+ || sentence->contains("onsweet") || sentence->contains("ensuite")
+ || sentence->contains("suite") || sentence->contains("next door")
+ || sentence->contains("the 1") || sentence->contains("the 2")
+ || sentence->contains("former") || sentence->contains("latter")
+ || sentence->contains("same room")) {
+ addAssignedRoom();
+ setState(0);
+ CTrueTalkManager::setFlags(17, 0);
+ return 2;
+ } else {
+ if (getRandomNumber(100) < 80 && sentence2C(sentence))
+ addResponse(getDialogueId(241707));
+ addResponse(getDialogueId(241706));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 95:
+ if (isDial1Medium()) {
+ if ((sentence->localWord("i") && sentence->localWord("am"))
+ || sentence->localWord("me")) {
+ addResponse(getDialogueId(240632));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ }
+ break;
+
+ case 96:
+ if (sentence->_field2C == 2) {
+ addResponse(getDialogueId(241350));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ case 97:
+ if (searchQuotes(roomScript, sentence)) {
+ addResponse(getDialogueId(241351));
+ applyFlag = true;
+ stateFlag = false;
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ if (applyFlag)
+ applyResponse();
+ if (stateFlag) {
+ setState(0);
+ CTrueTalkManager::setFlags(17, 0);
+ }
+
+ return applyFlag ? 2 : 1;
+}
+
+int DeskbotScript::searchQuotes(const TTroomScript *roomScript, const TTsentence *sentence) {
+ TTtreeResult treeResult;
+ return g_vm->_trueTalkManager->_quotesTree.search(sentence->_normalizedLine.c_str(),
+ TREE_2, &treeResult, 0, 0) != -1;
+}
+
+int DeskbotScript::checkCommonWords(const TTsentence *sentence) {
+ if (sentence->contains("xyzzy"))
+ return 3;
+
+ const TTquotes &quotes = g_vm->_trueTalkManager->_quotes;
+ if (quotes._loaded) {
+ uint tagId = quotes.find(sentence->_normalizedLine.c_str());
+ if (tagId == MKTAG('F', 'U', 'L', 'N')
+ || tagId == MKTAG('T', 'D', 'V', 'P')
+ || tagId == MKTAG('H', 'E', 'R', 'O')
+ || sentence->contains("douglas adam"))
+ return 1;
+ else if (tagId == MKTAG('J', 'N', 'A', 'M')
+ || tagId == MKTAG('N', 'I', 'K', 'N')
+ || tagId == MKTAG('B', 'O', 'Y', 'S')
+ || tagId == MKTAG('G', 'I', 'R', 'L'))
+ return 2;
+ } else {
+ if (sentence->contains("douglas adams")
+ || sentence->contains("shaikh")
+ || sentence->contains("millican")
+ || sentence->contains("williams")
+ || sentence->contains("henkes")
+ || sentence->contains("kenny"))
+ return 1;
+ else if (sentence->contains("richard")
+ || sentence->contains("jason")
+ || sentence->contains("mike")
+ || sentence->contains("renata"))
+ return 2;
+ }
+
+ return 0;
+}
+
+void DeskbotScript::add241716() {
+ addResponse(getDialogueId(241716));
+}
+
+void DeskbotScript::addAssignedRoom() {
+ addResponse(getDialogueId(241696));
+ addResponse(getDialogueId(241697));
+ CTrueTalkManager::setFlags(1, 3);
+ CTrueTalkManager::triggerAction(19, 3);
+ CTrueTalkManager::setFlags(22, 1);
+
+ int roomNum = 1, floorNum = 1, elevatorNum = 1;
+ getAssignedRoom(&roomNum, &floorNum, &elevatorNum);
+ addResponse(getDialogueId(241313 + elevatorNum));
+ addResponse(getDialogueId(241271 + floorNum));
+ addResponse(getDialogueId(241317 + roomNum));
+ addResponse(getDialogueId(241698));
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/deskbot_script.h b/engines/titanic/true_talk/deskbot_script.h
index bbe52bd557..55896a2425 100644
--- a/engines/titanic/true_talk/deskbot_script.h
+++ b/engines/titanic/true_talk/deskbot_script.h
@@ -62,6 +62,31 @@ private:
* Sets state data in flags 17
*/
void setFlags17(uint newId, uint index);
+
+ /**
+ * Does preprocessing for the sentence
+ */
+ int preprocess(const TTroomScript *roomScript, const TTsentence *sentence);
+
+ /**
+ * Scans the quotes tree
+ */
+ int searchQuotes(const TTroomScript *roomScript, const TTsentence *sentence);
+
+ /**
+ * Checks for common words
+ */
+ int checkCommonWords(const TTsentence *sentence);
+
+ /**
+ * Adds response dialogue 241716
+ */
+ void add241716();
+
+ /**
+ * Adds a dialogue description for the player's assigned room
+ */
+ void addAssignedRoom();
public:
DeskbotScript(int val1, const char *charClass, int v2,
const char *charName, int v3, int val2);
diff --git a/engines/titanic/true_talk/tt_npc_script.cpp b/engines/titanic/true_talk/tt_npc_script.cpp
index 14da4868a5..b61b9d53e1 100644
--- a/engines/titanic/true_talk/tt_npc_script.cpp
+++ b/engines/titanic/true_talk/tt_npc_script.cpp
@@ -959,7 +959,7 @@ bool TTnpcScript::getStateValue() const {
return false;
}
-bool TTnpcScript::sentence2C(TTsentence *sentence) {
+bool TTnpcScript::sentence2C(const TTsentence *sentence) {
return sentence->_field2C >= 2 && sentence->_field2C <= 7;
}
diff --git a/engines/titanic/true_talk/tt_npc_script.h b/engines/titanic/true_talk/tt_npc_script.h
index d208576caf..ddb5b8ff64 100644
--- a/engines/titanic/true_talk/tt_npc_script.h
+++ b/engines/titanic/true_talk/tt_npc_script.h
@@ -193,7 +193,7 @@ protected:
bool fn10(bool flag);
- static bool sentence2C(TTsentence *sentence);
+ static bool sentence2C(const TTsentence *sentence);
/**
* Gets the True Talk state value
diff --git a/engines/titanic/true_talk/tt_quotes.cpp b/engines/titanic/true_talk/tt_quotes.cpp
index 825210ae06..c690ac8780 100644
--- a/engines/titanic/true_talk/tt_quotes.cpp
+++ b/engines/titanic/true_talk/tt_quotes.cpp
@@ -26,11 +26,9 @@
namespace Titanic {
-TTquotes::TTquotes() {
+TTquotes::TTquotes() : _loaded(false), _dataP(nullptr), _dataSize(0),
+ _field544(0) {
Common::fill(&_tags[0], &_tags[256], 0);
- _dataP = nullptr;
- _dataSize = 0;
- _field544 = 0;
}
TTquotes::~TTquotes() {
@@ -40,6 +38,7 @@ TTquotes::~TTquotes() {
void TTquotes::load() {
Common::SeekableReadStream *r = g_vm->_filesManager->getResource("TEXT/JRQUOTES.TXT");
size_t size = r->readUint32LE();
+ _loaded = true;
_dataSize = _field544 = size;
_dataP = new char[size + 0x10];
@@ -68,7 +67,7 @@ void TTquotes::load() {
delete r;
}
-int TTquotes::find(const char *str) {
+int TTquotes::find(const char *str) const {
if (!str || !*str)
return 0;
@@ -95,7 +94,7 @@ int TTquotes::find(const char *str) {
return 0;
}
-int TTquotes::find(const char *startP, const char *endP) {
+int TTquotes::find(const char *startP, const char *endP) const {
int size = endP - startP;
if (size < 3)
return 0;
diff --git a/engines/titanic/true_talk/tt_quotes.h b/engines/titanic/true_talk/tt_quotes.h
index c6627dcc34..5958c9ebcf 100644
--- a/engines/titanic/true_talk/tt_quotes.h
+++ b/engines/titanic/true_talk/tt_quotes.h
@@ -53,7 +53,9 @@ private:
* Test whether a substring contains one of the quotes,
* and if so, returns the 4-character tag Id associated with it
*/
- int find(const char *startP, const char *endP);
+ int find(const char *startP, const char *endP) const;
+public:
+ bool _loaded;
public:
TTquotes();
~TTquotes();
@@ -67,7 +69,7 @@ public:
* Test whether a passed string contains one of the quotes,
* and if so, returns the 4-character tag Id associated with it
*/
- int find(const char *str);
+ int find(const char *str) const;
};
} // End of namespace Titanic