SHERLOCK: 3DO: Improve syncing of 3do portrait movies with talk text

This commit is contained in:
Paul Gilbert 2015-09-09 21:48:21 -04:00
parent 84bb389bae
commit 97b2f5890e
3 changed files with 50 additions and 8 deletions

View file

@ -548,12 +548,46 @@ void ScalpelTalk::nothingToSay() {
} }
void ScalpelTalk::switchSpeaker() { void ScalpelTalk::switchSpeaker() {
// If it's the 3DO, pass on to start the actor's conversation movie
if (IS_3DO)
talk3DOMovieTrigger(_3doSpeechIndex++);
} }
void ScalpelTalk::talk3DOMovieTrigger(int subIndex) { int ScalpelTalk::waitForMore(int delay) {
Events &events = *_vm->_events;
if (!IS_3DO) {
return Talk::waitForMore(delay);
}
// Hide the cursor
events.hideCursor();
events.wait(1);
switchSpeaker();
// Play the video
talk3DOMovieTrigger(_3doSpeechIndex++);
// Adjust _talkStealth mode:
// mode 1 - It was by a pause without stealth being on before the pause, so reset back to 0
// mode 3 - It was set by a pause with stealth being on before the pause, to set it to active
// mode 0/2 (Inactive/active) No change
switch (_talkStealth) {
case 1:
_talkStealth = 0;
break;
case 2:
_talkStealth = 2;
break;
default:
break;
}
events.showCursor();
events._pressed = events._released = false;
return 254;
}
bool ScalpelTalk::talk3DOMovieTrigger(int subIndex) {
ScalpelEngine &vm = *(ScalpelEngine *)_vm; ScalpelEngine &vm = *(ScalpelEngine *)_vm;
Screen &screen = *_vm->_screen; Screen &screen = *_vm->_screen;
@ -573,7 +607,7 @@ void ScalpelTalk::talk3DOMovieTrigger(int subIndex) {
subIndex--; // for scripts we adjust subIndex, b/c we won't get called from doTalkControl() subIndex--; // for scripts we adjust subIndex, b/c we won't get called from doTalkControl()
} else { } else {
warning("talk3DOMovieTrigger: unable to find selector"); warning("talk3DOMovieTrigger: unable to find selector");
return; return true;
} }
} }
@ -600,10 +634,12 @@ void ScalpelTalk::talk3DOMovieTrigger(int subIndex) {
warning("selector: %d", selector); warning("selector: %d", selector);
warning("subindex: %d", subIndex); warning("subindex: %d", subIndex);
vm.play3doMovie(movieFilename, Common::Point(5, 5), true); bool result = vm.play3doMovie(movieFilename, Common::Point(5, 5), true);
// Restore screen HACK // Restore screen HACK
_vm->_screen->makeAllDirty(); _vm->_screen->makeAllDirty();
return result;
} }
void ScalpelTalk::drawInterface() { void ScalpelTalk::drawInterface() {

View file

@ -93,6 +93,12 @@ public:
*/ */
virtual void talkTo(const Common::String filename); virtual void talkTo(const Common::String filename);
/**
* When the talk window has been displayed, waits a period of time proportional to
* the amount of text that's been displayed
*/
virtual int waitForMore(int delay);
/** /**
* Draws the interface for conversation display * Draws the interface for conversation display
*/ */
@ -112,7 +118,7 @@ public:
/** /**
* Trigger to play a 3DO talk dialog movie * Trigger to play a 3DO talk dialog movie
*/ */
void talk3DOMovieTrigger(int subIndex); bool talk3DOMovieTrigger(int subIndex);
/** /**
* Push the details of a passed object onto the saved sequences stack * Push the details of a passed object onto the saved sequences stack

View file

@ -228,7 +228,7 @@ protected:
* When the talk window has been displayed, waits a period of time proportional to * When the talk window has been displayed, waits a period of time proportional to
* the amount of text that's been displayed * the amount of text that's been displayed
*/ */
int waitForMore(int delay); virtual int waitForMore(int delay);
/** /**
* Display the talk interface window * Display the talk interface window