aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/true_talk
diff options
context:
space:
mode:
authorPaul Gilbert2016-07-28 23:23:27 -0400
committerPaul Gilbert2016-07-28 23:23:27 -0400
commit186b4e095a7f91bf1d5a186c0da9b4a81a0ae525 (patch)
tree3100db5539f2b47f716b8ce044a4dd383ad9e31d /engines/titanic/true_talk
parentc08ad39a9442d6f15bacb33b34597338121fa5b4 (diff)
downloadscummvm-rg350-186b4e095a7f91bf1d5a186c0da9b4a81a0ae525.tar.gz
scummvm-rg350-186b4e095a7f91bf1d5a186c0da9b4a81a0ae525.tar.bz2
scummvm-rg350-186b4e095a7f91bf1d5a186c0da9b4a81a0ae525.zip
TITANIC: Added DoorbotScript updateState
Diffstat (limited to 'engines/titanic/true_talk')
-rw-r--r--engines/titanic/true_talk/doorbot_script.cpp68
1 files changed, 66 insertions, 2 deletions
diff --git a/engines/titanic/true_talk/doorbot_script.cpp b/engines/titanic/true_talk/doorbot_script.cpp
index f644142793..3dc1e7fa61 100644
--- a/engines/titanic/true_talk/doorbot_script.cpp
+++ b/engines/titanic/true_talk/doorbot_script.cpp
@@ -252,8 +252,72 @@ int DoorbotScript::handleQuote(TTroomScript *roomScript, TTsentence *sentence,
}
int DoorbotScript::updateState(uint oldId, uint newId, int index) {
- warning("TODO");
- return 0;
+ getValue(38);
+ bool flag39 = getValue(39) != 0;
+ CTrueTalkManager::setFlags(38, 0);
+ CTrueTalkManager::setFlags(39, 0);
+
+ if (newId > 220890) {
+ switch (newId) {
+ case 221064:
+ return getValue(1) == 2 ? newId : 221062;
+ case 221080:
+ return getValue(1) >= 2 ? newId : 221066;
+ case 221078:
+ case 221079:
+ return getValue(1) >= 3 ? newId : 221065;
+ case 221081:
+ return getValue(7) == 0 ? newId : 221070;
+ case 221251:
+ CTrueTalkManager::triggerAction(28, 0);
+ break;
+ default:
+ break;
+ }
+ } else if (newId >= 220883) {
+ CTrueTalkManager::setFlags(38, 1);
+ CTrueTalkManager::triggerAction(28, 0);
+ } else if (newId >= 220076) {
+ switch (newId) {
+ case 220078:
+ case 220080:
+ case 220081:
+ case 220082:
+ case 220083:
+ case 220084:
+ if (flag39)
+ return getRangeValue(221381);
+ break;
+ default:
+ break;
+ }
+
+ CTrueTalkManager::setFlags(39, 1);
+ } else if (newId == 220075) {
+ if (flag39)
+ return getRangeValue(221381);
+ CTrueTalkManager::setFlags(39, 1);
+ } else if (newId == 220038) {
+ return 220038;
+ }
+
+ for (uint idx = 0; idx < _states.size(); ++idx) {
+ TTupdateState3 &us = _states[idx];
+ if (us._newId == newId) {
+ uint bits = us._dialBits;
+
+ if (!bits
+ || (index == 0 && (bits == 5 || bits == 1))
+ || (index == 1 && (bits == 6 || bits == 2))
+ || (index == 2 && (bits == 9 || bits == 1))
+ || (index == 3 && (bits == 10 || bits == 2))) {
+ setState(us._newValue);
+ break;
+ }
+ }
+ }
+
+ return newId;
}
int DoorbotScript::proc22(int id) const {