diff options
Diffstat (limited to 'engines/titanic/true_talk')
-rw-r--r-- | engines/titanic/true_talk/barbot_script.cpp | 226 |
1 files changed, 119 insertions, 107 deletions
diff --git a/engines/titanic/true_talk/barbot_script.cpp b/engines/titanic/true_talk/barbot_script.cpp index 7c16f31e50..241976f9cf 100644 --- a/engines/titanic/true_talk/barbot_script.cpp +++ b/engines/titanic/true_talk/barbot_script.cpp @@ -1049,124 +1049,136 @@ uint BarbotScript::getDialsBitset() const { int BarbotScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScript *roomScript, const TTsentence *sentence) { uint id = 0; - if (val1 > 0x200) { - switch (val1 - 0x201) { - case 0: - if (getValue(4) != 2) - id = 250738; - break; - case 1: - if (getValue(4) != 3) - id = 250738; - break; - case 2: - if (getValue(4) != 0) - id = 250738; - break; - default: - break; - } - } else if (val1 == 0x200) { - if (getValue(4) != 1) - id = 250738; - } else { - switch (val1) { - case 2: - if (getValue(1) != 1) - return 1; - break; - case 3: - if (getValue(1) != 2) - return 1; - break; - case 4: - if (getValue(1) != 3) - return 1; - break; - case 5: - if (getValue(1) == 3) - return 1; - break; - case 6: - if (sentence->contains("do not") || sentence->contains("have no") || - sentence->contains("got no")) - return 1; - break; - case 7: - if (!sentence->contains("do not") && !sentence->contains("have no") && - !sentence->contains("got no")) - return 1; - break; - case 8: - if (sentence->_field38 == 2) - return 1; - break; - case 9: { - uint val = CTrueTalkManager::getStateValue(3); - bool lemonFlag = (val & 1) != 0; - bool puretFlag = (val & 4) != 0; - bool tvFlag = (val & 8) != 0; - - if (puretFlag) { - if (!lemonFlag) { - id = tvFlag ? 50369 : 250085; - break; - } else if (!tvFlag) { - id = 250627; - } - } else { - if (lemonFlag) { - id = tvFlag ? 50367 : 50365; - } else if (tvFlag) { - id = 50370; - } - } - break; - } + int index = val1; + if (g_language == Common::DE_DEU && !(val1 >= 512 && val1 <= 515)) + index -= 1000; - case 10: { - uint val = CTrueTalkManager::getStateValue(3); - bool lemonFlag = (val & 1) != 0; - bool puretFlag = (val & 4) != 0; - bool tvFlag = (val & 8) != 0; + switch (index) { + case 2: + if (getValue(1) != 1) + return 1; + break; - if (lemonFlag && puretFlag && tvFlag) { - addResponse(getDialogueId(251027)); - applyResponse(); - CTrueTalkManager::triggerAction(7, 0); - return 2; - } else { - if (getDialRegion(1) == 1) { - if (*srcIdP != 251650) - id = 251651; - } else { - addResponse(getDialRegion(0) != 0 ? 51444 : 51530); - applyResponse(); - return 2; - } + case 3: + if (getValue(1) != 2) + return 1; + break; + + case 4: + if (getValue(1) != 3) + return 1; + break; + + case 5: + if (getValue(1) == 3) + return 1; + break; + + case 6: + if (sentence->contains("do not") || sentence->contains("have no") || + sentence->contains("got no")) + return 1; + break; + + case 7: + if (!sentence->contains(TRANSLATE("do not", "idem")) && !sentence->contains(TRANSLATE("have no", "habe kein")) && + !sentence->contains("got no")) + return 1; + break; + + case 8: + if (sentence->_field38 == 2) + return 1; + break; + + case 9: { + uint val = CTrueTalkManager::getStateValue(3); + bool lemonFlag = (val & 1) != 0; + bool puretFlag = (val & 4) != 0; + bool tvFlag = (val & 8) != 0; + + if (puretFlag) { + if (!lemonFlag) { + id = tvFlag ? 50369 : 250085; + break; + } else if (!tvFlag) { + id = 250627; + } + } else { + if (lemonFlag) { + id = tvFlag ? 50367 : 50365; + } else if (tvFlag) { + id = 50370; } - break; } + break; + } - case 11: - if (CTrueTalkManager::getStateValue(2) != 0) { - CTrueTalkManager::triggerAction(6, 0); - id = 251003; - } - break; + case 10: { + uint val = CTrueTalkManager::getStateValue(3); + bool lemonFlag = (val & 1) != 0; + bool puretFlag = (val & 4) != 0; + bool tvFlag = (val & 8) != 0; - case 12: - if (getDialRegion(1) == 0) { - addResponse(getDialogueId(251871)); + if (lemonFlag && puretFlag && tvFlag) { + addResponse(getDialogueId(251027)); + applyResponse(); + CTrueTalkManager::triggerAction(7, 0); + return 2; + } else { + if (getDialRegion(1) == 1) { + if (*srcIdP != 251650) + id = 251651; + } else { + addResponse(getDialRegion(0) != 0 ? 51444 : 51530); applyResponse(); return 2; - } else if (getRandomNumber(100) > 25 && addRandomResponse(false)) { - return 2; } + } + break; + } - default: - break; + case 11: + if (CTrueTalkManager::getStateValue(2) != 0) { + CTrueTalkManager::triggerAction(6, 0); + id = 251003; } + break; + + case 12: + if (getDialRegion(1) == 0) { + addResponse(getDialogueId(251871)); + applyResponse(); + return 2; + } else if (getRandomNumber(100) > 25 && addRandomResponse(false)) { + return 2; + } + break; + + case 512: + if (getValue(4) != 1) + id = 250738; + break; + + case 513: + if (getValue(4) != 2) + id = 250738; + break; + + case 514: + if (getValue(4) != 3) + id = 250738; + break; + + case 515: + if (getValue(4) != 0) + id = 250738; + break; + + default: + if (g_language == Common::DE_DEU) + return TTnpcScript::doSentenceEntry(val1, srcIdP, roomScript, sentence); + break; } if (id) { |