From 41e6a5d2a64bbecd37d47a1dc87b4135c2149f4a Mon Sep 17 00:00:00 2001 From: Paul Gilbert Date: Sat, 22 Oct 2016 12:33:07 -0400 Subject: TITANIC: Fix looping in CTrueTalkManager::triggerNPC --- engines/titanic/true_talk/true_talk_manager.cpp | 23 ++++++++++------------- engines/titanic/true_talk/true_talk_manager.h | 2 +- 2 files changed, 11 insertions(+), 14 deletions(-) (limited to 'engines') diff --git a/engines/titanic/true_talk/true_talk_manager.cpp b/engines/titanic/true_talk/true_talk_manager.cpp index ed45ab26a0..a3f9523fa2 100644 --- a/engines/titanic/true_talk/true_talk_manager.cpp +++ b/engines/titanic/true_talk/true_talk_manager.cpp @@ -423,22 +423,19 @@ void CTrueTalkManager::triggerNPC(CTrueTalkNPC *npc) { } } else { CTrueTalkGetAnimSetMsg getAnimMsg; - if (_speechDuration > 300) { - do { - getAnimMsg.execute(npc); - if (!getAnimMsg._endFrame) - break; + while (_speechDuration > 300) { + getAnimMsg.execute(npc); + if (!getAnimMsg._endFrame) + break; - npc->playMovie(getAnimMsg._startFrame, getAnimMsg._endFrame, 0); - getAnimMsg._endFrame = 0; + npc->playMovie(getAnimMsg._startFrame, getAnimMsg._endFrame, 0); + getAnimMsg._endFrame = 0; - uint numFrames = getAnimMsg._endFrame - getAnimMsg._startFrame; - int64 val = (numFrames * 1000) * 0x88888889; - uint diff = (val >> (32 + 5)) - 500; - _speechDuration += diff; + uint numFrames = getAnimMsg._endFrame - getAnimMsg._startFrame; + int diff = (numFrames * 1000) / 15 - 500; + _speechDuration += diff; - getAnimMsg._index++; - } while (_speechDuration > 0); + getAnimMsg._index++; } } } diff --git a/engines/titanic/true_talk/true_talk_manager.h b/engines/titanic/true_talk/true_talk_manager.h index 3abf4c181c..f8096425a9 100644 --- a/engines/titanic/true_talk/true_talk_manager.h +++ b/engines/titanic/true_talk/true_talk_manager.h @@ -50,7 +50,7 @@ private: int _currentCharId; CDialogueFile *_dialogueFile; int _dialogueId; - uint _speechDuration; + int _speechDuration; TTtalkerList _talkers; private: /** -- cgit v1.2.3