aboutsummaryrefslogtreecommitdiff
path: root/engines/sherlock/scalpel
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sherlock/scalpel')
-rw-r--r--engines/sherlock/scalpel/3do/movie_decoder.cpp1
-rw-r--r--engines/sherlock/scalpel/scalpel_talk.cpp29
-rw-r--r--engines/sherlock/scalpel/scalpel_talk.h6
-rw-r--r--engines/sherlock/scalpel/scalpel_user_interface.cpp4
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;