diff options
Diffstat (limited to 'engines/sherlock/scalpel')
-rw-r--r-- | engines/sherlock/scalpel/3do/movie_decoder.cpp | 1 | ||||
-rw-r--r-- | engines/sherlock/scalpel/scalpel_talk.cpp | 29 | ||||
-rw-r--r-- | engines/sherlock/scalpel/scalpel_talk.h | 6 | ||||
-rw-r--r-- | engines/sherlock/scalpel/scalpel_user_interface.cpp | 4 |
4 files changed, 39 insertions, 1 deletions
diff --git a/engines/sherlock/scalpel/3do/movie_decoder.cpp b/engines/sherlock/scalpel/3do/movie_decoder.cpp index d1471c59dd..29f2510598 100644 --- a/engines/sherlock/scalpel/3do/movie_decoder.cpp +++ b/engines/sherlock/scalpel/3do/movie_decoder.cpp @@ -501,5 +501,4 @@ bool Scalpel3DOMoviePlay(const char *filename, Common::Point pos) { return !skipVideo; } - } // End of namespace Sherlock diff --git a/engines/sherlock/scalpel/scalpel_talk.cpp b/engines/sherlock/scalpel/scalpel_talk.cpp index ea5a0fb713..3a5ac677eb 100644 --- a/engines/sherlock/scalpel/scalpel_talk.cpp +++ b/engines/sherlock/scalpel/scalpel_talk.cpp @@ -27,6 +27,7 @@ #include "sherlock/scalpel/scalpel_user_interface.h" #include "sherlock/sherlock.h" #include "sherlock/screen.h" +#include "sherlock/scalpel/3do/movie_decoder.h" namespace Sherlock { @@ -523,6 +524,34 @@ void ScalpelTalk::talkWait(const byte *&str) { } } +void ScalpelTalk::talk3DOMovieTrigger(int selector, int subIndex) { + if (_vm->getPlatform() != Common::kPlatform3DO) { + // No 3DO? No movie! + return; + } + + // Find out a few things that we need + int roomNr = _vm->_scene->_currentScene; + + // Make a quick update, so that current text is shown on screen + _vm->_screen->update(); + + // Figure out that movie filename + Common::String movieFilename; + + movieFilename = _scriptName; + movieFilename.deleteChar(1); // remove 2nd character of scriptname + + movieFilename.insertChar(selector + 'a', movieFilename.size()); + movieFilename.insertChar(subIndex + 'a', movieFilename.size()); + movieFilename = Common::String::format("movies/%02d/%s.stream", roomNr, movieFilename.c_str()); + + Scalpel3DOMoviePlay(movieFilename.c_str(), Common::Point(5, 5)); + + // Restore screen HACK + _vm->_screen->makeAllDirty(); +} + } // End of namespace Scalpel } // End of namespace Sherlock diff --git a/engines/sherlock/scalpel/scalpel_talk.h b/engines/sherlock/scalpel/scalpel_talk.h index 5794813457..3a94fbcf89 100644 --- a/engines/sherlock/scalpel/scalpel_talk.h +++ b/engines/sherlock/scalpel/scalpel_talk.h @@ -62,6 +62,12 @@ protected: * Pause when displaying a talk dialog on-screen */ virtual void talkWait(const byte *&str); + + /** + * Trigger to play a 3DO talk dialog movie + */ + virtual void talk3DOMovieTrigger(int selector, int subIndex); + public: ScalpelTalk(SherlockEngine *vm); virtual ~ScalpelTalk() {} diff --git a/engines/sherlock/scalpel/scalpel_user_interface.cpp b/engines/sherlock/scalpel/scalpel_user_interface.cpp index dc5ab01020..843a109cf0 100644 --- a/engines/sherlock/scalpel/scalpel_user_interface.cpp +++ b/engines/sherlock/scalpel/scalpel_user_interface.cpp @@ -1640,6 +1640,10 @@ void ScalpelUserInterface::doTalkControl() { sound._speechOn = false; } + // Trigger to play 3DO movie + int selector = _vm->_ui->_selector; + talk.talk3DOMovieTrigger(selector, 0); + talk.waitForMore(talk._statements[_selector]._statement.size()); if (talk._talkToAbort) return; |