aboutsummaryrefslogtreecommitdiff
path: root/engines/titanic
diff options
context:
space:
mode:
authorPaul Gilbert2016-08-01 18:58:49 -0400
committerPaul Gilbert2016-08-01 18:58:49 -0400
commitaf9f2c506982a1de01f650450dfed6c269eec4a9 (patch)
tree4d059bec7fe873d194fd374635a7448a55442353 /engines/titanic
parent45e82b55fc70ee88a7717e313e7ed0a0cdc13688 (diff)
downloadscummvm-rg350-af9f2c506982a1de01f650450dfed6c269eec4a9.tar.gz
scummvm-rg350-af9f2c506982a1de01f650450dfed6c269eec4a9.tar.bz2
scummvm-rg350-af9f2c506982a1de01f650450dfed6c269eec4a9.zip
TITANIC: Added SuccUBusScript methods
Diffstat (limited to 'engines/titanic')
-rw-r--r--engines/titanic/true_talk/succubus_script.cpp130
-rw-r--r--engines/titanic/true_talk/succubus_script.h7
2 files changed, 130 insertions, 7 deletions
diff --git a/engines/titanic/true_talk/succubus_script.cpp b/engines/titanic/true_talk/succubus_script.cpp
index e950f549b7..2cbef1e365 100644
--- a/engines/titanic/true_talk/succubus_script.cpp
+++ b/engines/titanic/true_talk/succubus_script.cpp
@@ -22,13 +22,15 @@
#include "common/textconsole.h"
#include "titanic/true_talk/succubus_script.h"
+#include "titanic/true_talk/true_talk_manager.h"
+#include "titanic/titanic.h"
namespace Titanic {
SuccUBusScript::SuccUBusScript(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),
- _field2D0(0) {
+ _isRoom101(false) {
loadRanges("Ranges/SuccUBus");
setupSentences();
@@ -75,13 +77,114 @@ int SuccUBusScript::chooseResponse(const TTroomScript *roomScript, const TTsente
}
int SuccUBusScript::process(const TTroomScript *roomScript, const TTsentence *sentence) {
- // TODO
- return 0;
+ if (!CTrueTalkManager::getStateValue(1))
+ return 2;
+
+ if (roomScript && roomScript->_scriptId == 101)
+ _isRoom101 = true;
+
+ int currState = getState();
+ if (currState) {
+ int currMode = sentence->_field2C;
+ bool modeFlag1 = currMode == 11 || currMode == 13;
+ bool modeFlag2 = currMode == 12;
+ setState(0);
+
+ switch (currState) {
+ case 1:
+ if (currMode == 3 || currMode == 10)
+ return setResponse(70050, 0);
+ break;
+
+ case 2:
+ if (modeFlag1 || modeFlag2)
+ return setResponse(70070 + (getRandomBit() ? 254 : 0), 0);
+ break;
+
+ case 3:
+ if (currMode == 3 || currMode == 10)
+ return setResponse(70074, 0);
+ break;
+
+ case 4:
+ if (currMode == 4)
+ return setResponse(70077, 0);
+ if (currMode == 3)
+ return setResponse(getDialogueId(230117), 0);
+ break;
+
+ case 5:
+ if (currMode == 3 || currMode == 10)
+ return setResponse(70089, 0);
+ break;
+
+ case 6:
+ if (modeFlag1)
+ return setResponse(70103, 0);
+ if (modeFlag2)
+ return setResponse(70102, 0);
+ break;
+
+ case 7:
+ if (modeFlag1)
+ return setResponse(getDialogueId(230157), 0);
+ break;
+
+ case 8:
+ if (modeFlag1)
+ return setResponse(getDialogueId(230159), 0);
+ break;
+
+ case 9:
+ if (modeFlag1)
+ return setResponse(getDialogueId(230160), 0);
+ break;
+
+ case 10:
+ if (modeFlag1)
+ return setResponse(getDialogueId(230161), 0);
+ break;
+
+ case 11:
+ if (modeFlag1)
+ return setResponse(getDialogueId(230142), 0);
+ break;
+
+ case 12:
+ return setResponse(70030, 0);
+
+ default:
+ break;
+ }
+ }
+
+ if (processEntries(&_entries, _entryCount, roomScript, sentence) != 2) {
+ uint tagId = g_vm->_trueTalkManager->_quotes.find(sentence->_normalizedLine.c_str());
+ if (tagId && chooseResponse(roomScript, sentence, tagId) != 2) {
+ addResponse(getDialogueId(230030));
+ applyResponse();
+ }
+ }
+
+ return 2;
}
ScriptChangedResult SuccUBusScript::scriptChanged(const TTroomScript *roomScript, uint id) {
- warning("TODO");
- return SCR_1;
+ if (id == 148)
+ CTrueTalkManager::setFlags(3, 1);
+ else if (id == 150)
+ CTrueTalkManager::setFlags(2, 1);
+
+ if (id >= 230000 && id <= 230245) {
+ addResponse(getDialogueId(id));
+ applyResponse();
+ }
+ else if (id >= 70000 && id <= 70243) {
+ addResponse(id);
+ applyResponse();
+ }
+
+ return SCR_2;
}
int SuccUBusScript::updateState(uint oldId, uint newId, int index) {
@@ -90,8 +193,23 @@ int SuccUBusScript::updateState(uint oldId, uint newId, int index) {
}
int SuccUBusScript::doSentenceEntry(int val1, const int *srcIdP, const TTroomScript *roomScript, const TTsentence *sentence) {
- warning("TODO");
+ if (val1 == 1 && roomScript && roomScript->_scriptId == 101) {
+ addResponse(getDialogueId(230239));
+ applyResponse();
+ return 2;
+ }
+
return 0;
}
+int SuccUBusScript::setResponse(int dialogueId, int state) {
+ addResponse(dialogueId);
+ applyResponse();
+
+ if (state != -1)
+ setState(state);
+
+ return 2;
+}
+
} // End of namespace Titanic
diff --git a/engines/titanic/true_talk/succubus_script.h b/engines/titanic/true_talk/succubus_script.h
index 541392eb30..d5cea7e66f 100644
--- a/engines/titanic/true_talk/succubus_script.h
+++ b/engines/titanic/true_talk/succubus_script.h
@@ -29,12 +29,17 @@ namespace Titanic {
class SuccUBusScript : public TTnpcScript {
private:
- int _field2D0;
+ bool _isRoom101;
private:
/**
* Setup sentence data
*/
void setupSentences();
+
+ /**
+ * Add a response and optionally set the state
+ */
+ int setResponse(int dialogueId, int state = -1);
public:
SuccUBusScript(int val1, const char *charClass, int v2,
const char *charName, int v3, int val2, int v4, int v5, int v6, int v7);