[Scummvm-cvs-logs] scummvm master -> e16ae1a2e72f4cc7265214db489c73cebc1d8a35

m-kiewitz m_kiewitz at users.sourceforge.net
Sat Jun 13 20:34:56 CEST 2015


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
e16ae1a2e7 SHERLOCK: 3DO: support for talk movies


Commit: e16ae1a2e72f4cc7265214db489c73cebc1d8a35
    https://github.com/scummvm/scummvm/commit/e16ae1a2e72f4cc7265214db489c73cebc1d8a35
Author: Martin Kiewitz (m_kiewitz at users.sourceforge.net)
Date: 2015-06-13T20:35:00+02:00

Commit Message:
SHERLOCK: 3DO: support for talk movies

Changed paths:
    engines/sherlock/scalpel/3do/movie_decoder.cpp
    engines/sherlock/scalpel/scalpel_talk.cpp
    engines/sherlock/scalpel/scalpel_talk.h
    engines/sherlock/scalpel/scalpel_user_interface.cpp
    engines/sherlock/screen.cpp
    engines/sherlock/screen.h
    engines/sherlock/talk.cpp
    engines/sherlock/talk.h



diff --git a/engines/sherlock/scalpel/3do/movie_decoder.cpp b/engines/sherlock/scalpel/3do/movie_decoder.cpp
index d1471c5..29f2510 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 ea5a0fb..3a5ac67 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 5794813..3a94fbc 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 dc5ab01..843a109 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;
diff --git a/engines/sherlock/screen.cpp b/engines/sherlock/screen.cpp
index 91f2594..d21343b 100644
--- a/engines/sherlock/screen.cpp
+++ b/engines/sherlock/screen.cpp
@@ -71,6 +71,10 @@ void Screen::update() {
 	_dirtyRects.clear();
 }
 
+void Screen::makeAllDirty() {
+	addDirtyRect(Common::Rect(0, 0, this->w(), this->h()));
+}
+
 void Screen::getPalette(byte palette[PALETTE_SIZE]) {
 	g_system->getPaletteManager()->grabPalette(palette, 0, PALETTE_COUNT);
 }
diff --git a/engines/sherlock/screen.h b/engines/sherlock/screen.h
index aa67e60..a4b1a83 100644
--- a/engines/sherlock/screen.h
+++ b/engines/sherlock/screen.h
@@ -103,6 +103,11 @@ public:
 	void update();
 
 	/**
+	 * Makes the whole screen dirty, Hack for 3DO movie playing
+	 */
+	void makeAllDirty();
+
+	/**
 	 * Return the currently active palette
 	 */
 	void getPalette(byte palette[PALETTE_SIZE]);
diff --git a/engines/sherlock/talk.cpp b/engines/sherlock/talk.cpp
index bb8a059..1a27f8e 100644
--- a/engines/sherlock/talk.cpp
+++ b/engines/sherlock/talk.cpp
@@ -1035,6 +1035,8 @@ void Talk::doScript(const Common::String &script) {
 		}
 	}
 
+	uint16 subIndex = 1;
+
 	do {
 		Common::String tempString;
 		_wait = 0;
@@ -1075,6 +1077,14 @@ void Talk::doScript(const Common::String &script) {
 			_openTalkWindow = false;
 		}
 
+		if (_wait) {
+			// Trigger to play 3DO movie
+			int selector = _vm->_ui->_selector;
+			talk3DOMovieTrigger(selector, subIndex);
+
+			subIndex++;
+		}
+
 		if (_wait)
 			// Handling pausing
 			talkWait(str);
diff --git a/engines/sherlock/talk.h b/engines/sherlock/talk.h
index 9c44f8e..aea2800 100644
--- a/engines/sherlock/talk.h
+++ b/engines/sherlock/talk.h
@@ -263,6 +263,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:
 	TalkSequence _talkSequenceStack[TALK_SEQUENCE_STACK_SIZE];
 	bool _talkToAbort;






More information about the Scummvm-git-logs mailing list