aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic/true_talk/barbot_script.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/titanic/true_talk/barbot_script.cpp')
-rw-r--r--engines/titanic/true_talk/barbot_script.cpp33
1 files changed, 30 insertions, 3 deletions
diff --git a/engines/titanic/true_talk/barbot_script.cpp b/engines/titanic/true_talk/barbot_script.cpp
index 345e9a3f0e..f77b0b1b8a 100644
--- a/engines/titanic/true_talk/barbot_script.cpp
+++ b/engines/titanic/true_talk/barbot_script.cpp
@@ -965,9 +965,36 @@ int BarbotScript::handleQuote(TTroomScript *roomScript, TTsentence *sentence,
return TTnpcScript::handleQuote(roomScript, sentence, val, tagId, remainder);
}
-int BarbotScript::updateState(int oldId, int newId, int index) {
- warning("TODO");
- return 0;
+int BarbotScript::updateState(uint oldId, uint newId, int index) {
+ if (newId == 250538) {
+ CTrueTalkManager::triggerAction(28, 0);
+ return 250538;
+ }
+ if (newId == 251704) {
+ return 251701 + _field7C ? 3 : 0;
+ }
+
+ for (const TTupdateState3 *us = &_states[0]; us->_newId; ++us) {
+ if (us->_newId == newId) {
+ if ((us->_dialBits & 1) && !getDialRegion(0))
+ continue;
+ if ((us->_dialBits & 2) && getDialRegion(0))
+ continue;
+ if ((us->_dialBits & 4) && !getDialRegion(1))
+ continue;
+ if ((us->_dialBits & 8) && getDialRegion(1))
+ continue;
+ if ((us->_dialBits & 0x10) && !getDialRegion(2))
+ continue;
+ if ((us->_dialBits & 0x20) && getDialRegion(2))
+ continue;
+
+ setState(us->_newValue);
+ break;
+ }
+ }
+
+ return newId;
}
int BarbotScript::proc22(int id) const {