From b1105a6686215a965e8580af84d16d7732ce5b49 Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Fri, 2 Sep 2016 18:17:00 -0400 Subject: TITANIC: Fixes to building NPC response chain --- engines/titanic/game/computer_screen.cpp | 2 +- engines/titanic/true_talk/tt_script_base.cpp | 44 +++++++++++++++------------- engines/titanic/true_talk/tt_script_base.h | 19 ++++++++---- 3 files changed, 38 insertions(+), 27 deletions(-) diff --git a/engines/titanic/game/computer_screen.cpp b/engines/titanic/game/computer_screen.cpp index 3e5172219d..0572258cef 100644 --- a/engines/titanic/game/computer_screen.cpp +++ b/engines/titanic/game/computer_screen.cpp @@ -111,7 +111,7 @@ bool CComputerScreen::TimerMsg(CTimerMsg *msg) { playSound("a#29.wav"); stopSound(handle); - playSound("y#662.wav"); + handle = playSound("y#662.wav"); setSoundVolume(handle, 10, 2); playClip(392, 450); startTalking("Doorbot", 0x3611A); diff --git a/engines/titanic/true_talk/tt_script_base.cpp b/engines/titanic/true_talk/tt_script_base.cpp index 4109134501..2f58ad1400 100644 --- a/engines/titanic/true_talk/tt_script_base.cpp +++ b/engines/titanic/true_talk/tt_script_base.cpp @@ -118,37 +118,41 @@ void TTscriptBase::applyResponse() { } void TTscriptBase::deleteResponses() { - while (_respTailP) { - _respHeadP = _respTailP; - _respTailP = _respHeadP->getLink(); - delete _respHeadP; + while (_respHeadP) { + _respTailP = _respHeadP; + _respHeadP = _respTailP->getLink(); + delete _respTailP; } } -void TTscriptBase::appendResponse(int val1, int *val2, int val3) { - if (!val2 || val1 <= *val2) { - if (_respHeadP) { - _respHeadP = new TTresponse(_respHeadP); +void TTscriptBase::appendResponse(int index, int *maxP, int id) { + if (id && (!maxP || index <= *maxP)) { + if (_respTailP) { + // Prior fragments already exist, so append to end of chain + _respTailP = new TTresponse(_respTailP); } else { - _respHeadP = new TTresponse(val3, 3); - if (_respTailP) - _respTailP->addLink(_respHeadP); + // Currently no tail + _respTailP = new TTresponse(id, 3); + if (_respHeadP) + _respHeadP->addLink(_respTailP); else - _respTailP = _respHeadP; + _respHeadP = _respTailP; } } } -void TTscriptBase::appendResponse(int val1, int *val2, const TTstring &str) { - if (!val2 || val1 <= *val2) { - if (_respHeadP) { - _respHeadP = new TTresponse(str); +void TTscriptBase::appendResponse(int index, int *maxP, const TTstring &str) { + if (!maxP || index <= *maxP) { + if (_respTailP) { + // Prior fragments already exist, so append to end of chain + _respTailP = new TTresponse(str); } else { - _respHeadP = new TTresponse(str); - if (_respTailP) - _respTailP->addLink(_respHeadP); + // Currently no tail + _respTailP = new TTresponse(str); + if (_respHeadP) + _respHeadP->addLink(_respTailP); else - _respTailP = _respHeadP; + _respHeadP = _respTailP; } } } diff --git a/engines/titanic/true_talk/tt_script_base.h b/engines/titanic/true_talk/tt_script_base.h index c489dcb0a7..869b0beb64 100644 --- a/engines/titanic/true_talk/tt_script_base.h +++ b/engines/titanic/true_talk/tt_script_base.h @@ -51,8 +51,8 @@ protected: int _state; TThist *_hist2P; int _field3C; - TTresponse *_respHeadP; TTresponse *_respTailP; + TTresponse *_respHeadP; TTresponse *_oldResponseP; int _status; protected: @@ -62,14 +62,21 @@ protected: void deleteResponses(); /** - * Creates and appends a new response to the script + * Creates and appends a new response fragment to the script specified by + * the given conversation Id */ - void appendResponse(int val1, int *val2, int val3); + void appendResponse(int index, int *maxP, int id); - void appendResponse(int val1, int *val2, const TTstring &str); + /** + * Creates and appends a new response fragment string to the script + */ + void appendResponse(int index, int *maxP, const TTstring &str); - void appendResponse2(int val1, int *val2, const TTstring &str) { - appendResponse(val1, val2, str); + /** + * Creates and appends a new response fragment string to the script + */ + void appendResponse2(int index, int *maxP, const TTstring &str) { + appendResponse(index, maxP, str); } /** -- cgit v1.2.3