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

bgK bastien.bouclet at gmail.com
Sat Mar 5 14:44:57 CET 2016


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

Summary:
3552a185f1 MOHAWK: Adjust the Myst gauge boiler movie to the new VideoHandle semantics
0623a0aa41 MOHAWK: Drawing a single movie frame no longer updates all the movies
9e57cc166b MOHAWK: Try harder when resuming a stopped video
21317eec72 MOHAWK: The Myst demo and making of don't have save support
833b800a32 MOHAWK: Add an engine specific option to play the Myst fly by movie
2d405fcc9f MOHAWK: Disable midi and subtitles options for Myst
f306beab59 MOHAWK: Fix one of the Channelwood monitor movies being misaligned
0a0cf7a22f MOHAWK: Fix garbage being drawn when pressing the rockey piano keys
54a31ed82a MOHAWK: Fix the Selenitic sound receiver speed being too fast
ee25001672 MOHAWK: Fix the sound receiver initially displaying an incorrect view


Commit: 3552a185f1ac3bed9e4e5c707f3f9687905bafb3
    https://github.com/scummvm/scummvm/commit/3552a185f1ac3bed9e4e5c707f3f9687905bafb3
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-03-05T14:43:10+01:00

Commit Message:
MOHAWK: Adjust the Myst gauge boiler movie to the new VideoHandle semantics

Fixes it not being updated.

Changed paths:
    engines/mohawk/myst_stacks/myst.cpp
    engines/mohawk/myst_stacks/myst.h



diff --git a/engines/mohawk/myst_stacks/myst.cpp b/engines/mohawk/myst_stacks/myst.cpp
index 5033f0f..6ce7d48 100644
--- a/engines/mohawk/myst_stacks/myst.cpp
+++ b/engines/mohawk/myst_stacks/myst.cpp
@@ -52,6 +52,7 @@ Myst::Myst(MohawkEngine_Myst *vm) :
 	_cabinDoorOpened = 0;
 	_cabinHandleDown = 0;
 	_cabinMatchState = 2;
+	_cabinGaugeMovieEnabled = false;
 	_matchBurning = false;
 	_tree = nullptr;
 	_treeAlcove = nullptr;
@@ -2142,7 +2143,7 @@ void Myst::tree_run() {
 				// Check if alcove is accessible
 				treeSetAlcoveAccessible();
 
-				if (_cabinGaugeMovie) {
+				if (_cabinGaugeMovieEnabled) {
 					Common::Rational rate = boilerComputeGaugeRate(pressure, delay);
 					boilerResetGauge(rate);
 				}
@@ -3703,6 +3704,8 @@ void Myst::boilerGaugeInit() {
 		frame = Audio::Timestamp(0, 0, 600);
 
 	_vm->_video->drawVideoFrame(_cabinGaugeMovie, frame);
+
+	_cabinGaugeMovieEnabled = true;
 }
 
 void Myst::o_rocketSliders_init(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
@@ -3842,6 +3845,8 @@ void Myst::o_boiler_exit(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
 
 	_cabinGaugeMovie = VideoHandle();
 	_cabinFireMovie = VideoHandle();
+
+	_cabinGaugeMovieEnabled = false;
 }
 
 void Myst::o_generatorControlRoom_exit(uint16 op, uint16 var, uint16 argc, uint16 *argv) {
diff --git a/engines/mohawk/myst_stacks/myst.h b/engines/mohawk/myst_stacks/myst.h
index 9d66b79..6e2f7cc 100644
--- a/engines/mohawk/myst_stacks/myst.h
+++ b/engines/mohawk/myst_stacks/myst.h
@@ -261,6 +261,8 @@ protected:
 	uint32 _matchGoOutTime; // 144
 
 	VideoHandle _cabinFireMovie; // 240
+
+	bool _cabinGaugeMovieEnabled;
 	VideoHandle _cabinGaugeMovie; // 244
 
 	bool _boilerPressureIncreasing;


Commit: 0623a0aa41ccf4c60bfd13c445b57d64f50284f2
    https://github.com/scummvm/scummvm/commit/0623a0aa41ccf4c60bfd13c445b57d64f50284f2
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-03-05T14:43:10+01:00

Commit Message:
MOHAWK: Drawing a single movie frame no longer updates all the movies

Also fixes drawing the last frame of a movie

Changed paths:
    engines/mohawk/video.cpp
    engines/mohawk/video.h



diff --git a/engines/mohawk/video.cpp b/engines/mohawk/video.cpp
index 522dd5e..0008160 100644
--- a/engines/mohawk/video.cpp
+++ b/engines/mohawk/video.cpp
@@ -317,69 +317,8 @@ bool VideoManager::updateMovies() {
 
 		// Check if we need to draw a frame
 		if (video->needsUpdate()) {
-			const Graphics::Surface *frame = video->decodeNextFrame();
-			Graphics::Surface *convertedFrame = 0;
-
-			if (frame && (*it)->isEnabled()) {
-				Graphics::PixelFormat pixelFormat = _vm->_system->getScreenFormat();
-
-				if (frame->format != pixelFormat) {
-					// We don't support downconverting to 8bpp without having
-					// support in the codec. Set _enableDither if shows up.
-					if (pixelFormat.bytesPerPixel == 1) {
-						warning("Cannot convert high color video frame to 8bpp");
-						(*it)->close();
-						it = _videos.erase(it);
-						continue;
-					}
-
-					// Convert to the current screen format
-					convertedFrame = frame->convertTo(pixelFormat, video->getPalette());
-					frame = convertedFrame;
-				} else if (pixelFormat.bytesPerPixel == 1 && video->hasDirtyPalette()) {
-					// Set the palette when running in 8bpp mode only
-					// Don't do this for Myst, which has its own per-stack handling
-					if (_vm->getGameType() != GType_MYST)
-						_vm->_system->getPaletteManager()->setPalette(video->getPalette(), 0, 256);
-				}
-
-				// Clip the video to make sure it stays on the screen (Myst does this a few times)
-				Common::Rect targetRect = Common::Rect(video->getWidth(), video->getHeight());
-				targetRect.translate((*it)->getX(), (*it)->getY());
-
-				Common::Rect frameRect = Common::Rect(video->getWidth(), video->getHeight());
-
-				if (targetRect.left < 0) {
-					frameRect.left -= targetRect.left;
-					targetRect.left = 0;
-				}
-
-				if (targetRect.top < 0) {
-					frameRect.top -= targetRect.top;
-					targetRect.top = 0;
-				}
-
-				if (targetRect.right > _vm->_system->getWidth()) {
-					frameRect.right -= targetRect.right - _vm->_system->getWidth();
-					targetRect.right = _vm->_system->getWidth();
-				}
-
-				if (targetRect.bottom > _vm->_system->getHeight()) {
-					frameRect.bottom -= targetRect.bottom - _vm->_system->getHeight();
-					targetRect.bottom = _vm->_system->getHeight();
-				}
-
-				_vm->_system->copyRectToScreen(frame->getBasePtr(frameRect.left, frameRect.top), frame->pitch,
-				                               targetRect.left, targetRect.top, targetRect.width(), targetRect.height());
-
-				// We've drawn something to the screen, make sure we update it
+			if (drawNextFrame(*it)) {
 				updateScreen = true;
-
-				// Delete 8bpp conversion surface
-				if (convertedFrame) {
-					convertedFrame->free();
-					delete convertedFrame;
-				}
 			}
 		}
 
@@ -394,6 +333,74 @@ bool VideoManager::updateMovies() {
 	return updateScreen;
 }
 
+bool VideoManager::drawNextFrame(VideoEntryPtr videoEntry) {
+	Video::VideoDecoder *video = videoEntry->_video;
+	const Graphics::Surface *frame = video->decodeNextFrame();
+
+	if (!frame || !videoEntry->isEnabled()) {
+		return false;
+	}
+
+	Graphics::Surface *convertedFrame = 0;
+	Graphics::PixelFormat pixelFormat = _vm->_system->getScreenFormat();
+
+	if (frame->format != pixelFormat) {
+		// We don't support downconverting to 8bpp without having
+		// support in the codec. Set _enableDither if shows up.
+		if (pixelFormat.bytesPerPixel == 1) {
+			warning("Cannot convert high color video frame to 8bpp");
+			return false;
+		}
+
+		// Convert to the current screen format
+		convertedFrame = frame->convertTo(pixelFormat, video->getPalette());
+		frame = convertedFrame;
+	} else if (pixelFormat.bytesPerPixel == 1 && video->hasDirtyPalette()) {
+		// Set the palette when running in 8bpp mode only
+		// Don't do this for Myst, which has its own per-stack handling
+		if (_vm->getGameType() != GType_MYST)
+			_vm->_system->getPaletteManager()->setPalette(video->getPalette(), 0, 256);
+	}
+
+	// Clip the video to make sure it stays on the screen (Myst does this a few times)
+	Common::Rect targetRect = Common::Rect(video->getWidth(), video->getHeight());
+	targetRect.translate(videoEntry->getX(), videoEntry->getY());
+
+	Common::Rect frameRect = Common::Rect(video->getWidth(), video->getHeight());
+
+	if (targetRect.left < 0) {
+		frameRect.left -= targetRect.left;
+		targetRect.left = 0;
+	}
+
+	if (targetRect.top < 0) {
+		frameRect.top -= targetRect.top;
+		targetRect.top = 0;
+	}
+
+	if (targetRect.right > _vm->_system->getWidth()) {
+		frameRect.right -= targetRect.right - _vm->_system->getWidth();
+		targetRect.right = _vm->_system->getWidth();
+	}
+
+	if (targetRect.bottom > _vm->_system->getHeight()) {
+		frameRect.bottom -= targetRect.bottom - _vm->_system->getHeight();
+		targetRect.bottom = _vm->_system->getHeight();
+	}
+
+	_vm->_system->copyRectToScreen(frame->getBasePtr(frameRect.left, frameRect.top), frame->pitch,
+	                               targetRect.left, targetRect.top, targetRect.width(), targetRect.height());
+
+	// Delete 8bpp conversion surface
+	if (convertedFrame) {
+		convertedFrame->free();
+		delete convertedFrame;
+	}
+
+	// We've drawn something to the screen, make sure we update it
+	return true;
+}
+
 void VideoManager::activateMLST(uint16 mlstId, uint16 card) {
 	Common::SeekableReadStream *mlstStream = _vm->getResource(ID_MLST, card);
 	uint16 recordCount = mlstStream->readUint16BE();
@@ -582,11 +589,9 @@ bool VideoManager::isVideoPlaying() {
 }
 
 void VideoManager::drawVideoFrame(VideoHandle handle, const Audio::Timestamp &time) {
-	// FIXME: This should be done separately from the "playing"
-	// videos eventually.
 	assert(handle);
 	handle->seek(time);
-	updateMovies();
+	drawNextFrame(handle._ptr);
 	handle->stop();
 }
 
diff --git a/engines/mohawk/video.h b/engines/mohawk/video.h
index c5a3dc7..d0edab9 100644
--- a/engines/mohawk/video.h
+++ b/engines/mohawk/video.h
@@ -350,6 +350,8 @@ private:
 	VideoList::iterator findEntry(VideoEntryPtr ptr);
 	void removeEntry(VideoEntryPtr ptr);
 
+	bool drawNextFrame(VideoEntryPtr videoEntry);
+
 	// Dithering control
 	bool _enableDither;
 	void checkEnableDither(VideoEntryPtr &entry);


Commit: 9e57cc166ba0590028fa4ccf8fcd39ad8970e2ac
    https://github.com/scummvm/scummvm/commit/9e57cc166ba0590028fa4ccf8fcd39ad8970e2ac
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-03-05T14:43:10+01:00

Commit Message:
MOHAWK: Try harder when resuming a stopped video

Fixes turning off the rose-skull projector on Stoneship

Changed paths:
    engines/mohawk/myst_areas.cpp



diff --git a/engines/mohawk/myst_areas.cpp b/engines/mohawk/myst_areas.cpp
index 59871ed..193def2 100644
--- a/engines/mohawk/myst_areas.cpp
+++ b/engines/mohawk/myst_areas.cpp
@@ -240,6 +240,7 @@ VideoHandle MystAreaVideo::playMovie() {
 	} else {
 		// Resume the video
 		handle->pause(false);
+		handle->start();
 	}
 
 	if (_playBlocking) {


Commit: 21317eec72f2b0ca0f62f41e27fd40e30fff0ed7
    https://github.com/scummvm/scummvm/commit/21317eec72f2b0ca0f62f41e27fd40e30fff0ed7
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-03-05T14:43:10+01:00

Commit Message:
MOHAWK: The Myst demo and making of don't have save support

Use a GUI option to gray out the load button in the launcher.

Changed paths:
    engines/mohawk/detection_tables.h



diff --git a/engines/mohawk/detection_tables.h b/engines/mohawk/detection_tables.h
index 97d2932..b6d57bd 100644
--- a/engines/mohawk/detection_tables.h
+++ b/engines/mohawk/detection_tables.h
@@ -52,7 +52,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::EN_ANY,
 			Common::kPlatformWindows,
 			ADGF_DEMO | ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUIO2(GUIO_NOASPECT, GUIO_NOLAUNCHLOAD)
 		},
 		GType_MYST,
 		GF_DEMO,
@@ -178,7 +178,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::EN_ANY,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUIO2(GUIO_NOASPECT, GUIO_NOLAUNCHLOAD)
 		},
 		GType_MAKINGOF,
 		0,
@@ -196,7 +196,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::JA_JPN,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUIO2(GUIO_NOASPECT, GUIO_NOLAUNCHLOAD)
 		},
 		GType_MAKINGOF,
 		0,
@@ -2713,7 +2713,7 @@ static const MohawkGameDescription fallbackDescs[] = {
 			Common::UNK_LANG,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUIO2(GUIO_NOASPECT, GUIO_NOLAUNCHLOAD)
 		},
 		GType_MAKINGOF,
 		0,


Commit: 833b800a32fb8ee0013a3986b66c7dcae791c58b
    https://github.com/scummvm/scummvm/commit/833b800a32fb8ee0013a3986b66c7dcae791c58b
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-03-05T14:43:10+01:00

Commit Message:
MOHAWK: Add an engine specific option to play the Myst fly by movie

It is disabled by default since the original engine never plays it.
When enabled, it is only played when first arriving on Myst.

Changed paths:
    engines/mohawk/detection.cpp
    engines/mohawk/detection_tables.h
    engines/mohawk/myst.cpp
    engines/mohawk/myst.h



diff --git a/engines/mohawk/detection.cpp b/engines/mohawk/detection.cpp
index 986b35c..2579712 100644
--- a/engines/mohawk/detection.cpp
+++ b/engines/mohawk/detection.cpp
@@ -26,6 +26,7 @@
 #include "common/savefile.h"
 #include "common/system.h"
 #include "common/textconsole.h"
+#include "common/translation.h"
 
 #include "mohawk/livingbooks.h"
 
@@ -160,9 +161,23 @@ static const char *directoryGlobs[] = {
 	0
 };
 
+static const ADExtraGuiOptionsMap optionsList[] = {
+		{
+				GAMEOPTION_PLAY_MYST_FLYBY,
+				{
+						_s("Play the Myst fly by movie"),
+						_s("The Myst fly by movie was not played by the original engine."),
+						"playmystflyby",
+						false
+				}
+		},
+
+		AD_EXTRA_GUI_OPTIONS_TERMINATOR
+};
+
 class MohawkMetaEngine : public AdvancedMetaEngine {
 public:
-	MohawkMetaEngine() : AdvancedMetaEngine(Mohawk::gameDescriptions, sizeof(Mohawk::MohawkGameDescription), mohawkGames) {
+	MohawkMetaEngine() : AdvancedMetaEngine(Mohawk::gameDescriptions, sizeof(Mohawk::MohawkGameDescription), mohawkGames, optionsList) {
 		_singleid = "mohawk";
 		_maxScanDepth = 2;
 		_directoryGlobs = directoryGlobs;
diff --git a/engines/mohawk/detection_tables.h b/engines/mohawk/detection_tables.h
index b6d57bd..ceac99a 100644
--- a/engines/mohawk/detection_tables.h
+++ b/engines/mohawk/detection_tables.h
@@ -22,6 +22,13 @@
 
 namespace Mohawk {
 
+#define GAMEOPTION_PLAY_MYST_FLYBY         GUIO_GAMEOPTIONS1
+
+#define GUI_OPTIONS_MYST                   GUIO1(GUIO_NOASPECT)
+#define GUI_OPTIONS_MYST_ME                GUIO2(GUIO_NOASPECT, GAMEOPTION_PLAY_MYST_FLYBY)
+#define GUI_OPTIONS_MYST_DEMO              GUIO2(GUIO_NOASPECT, GUIO_NOLAUNCHLOAD)
+#define GUI_OPTIONS_MYST_MAKING_OF         GUIO2(GUIO_NOASPECT, GUIO_NOLAUNCHLOAD)
+
 static const MohawkGameDescription gameDescriptions[] = {
 	// Myst
 	// English Windows 3.11
@@ -34,7 +41,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::EN_ANY,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUI_OPTIONS_MYST
 		},
 		GType_MYST,
 		0,
@@ -52,7 +59,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::EN_ANY,
 			Common::kPlatformWindows,
 			ADGF_DEMO | ADGF_UNSTABLE,
-			GUIO2(GUIO_NOASPECT, GUIO_NOLAUNCHLOAD)
+			GUI_OPTIONS_MYST_DEMO
 		},
 		GType_MYST,
 		GF_DEMO,
@@ -70,7 +77,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::DE_DEU,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUI_OPTIONS_MYST
 		},
 		GType_MYST,
 		0,
@@ -88,7 +95,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::DE_DEU,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUI_OPTIONS_MYST
 		},
 		GType_MYST,
 		0,
@@ -106,7 +113,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::ES_ESP,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUI_OPTIONS_MYST
 		},
 		GType_MYST,
 		0,
@@ -124,7 +131,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::IT_ITA,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUI_OPTIONS_MYST
 		},
 		GType_MYST,
 		0,
@@ -142,7 +149,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::JA_JPN,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUI_OPTIONS_MYST
 		},
 		GType_MYST,
 		0,
@@ -160,7 +167,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::FR_FRA,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUI_OPTIONS_MYST
 		},
 		GType_MYST,
 		0,
@@ -178,7 +185,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::EN_ANY,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO2(GUIO_NOASPECT, GUIO_NOLAUNCHLOAD)
+			GUI_OPTIONS_MYST_MAKING_OF
 		},
 		GType_MAKINGOF,
 		0,
@@ -196,7 +203,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::JA_JPN,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO2(GUIO_NOASPECT, GUIO_NOLAUNCHLOAD)
+			GUI_OPTIONS_MYST_MAKING_OF
 		},
 		GType_MAKINGOF,
 		0,
@@ -214,7 +221,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::EN_ANY,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUI_OPTIONS_MYST_ME
 		},
 		GType_MYST,
 		GF_ME,
@@ -232,7 +239,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::DE_DEU,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUI_OPTIONS_MYST_ME
 		},
 		GType_MYST,
 		GF_ME,
@@ -250,7 +257,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::FR_FRA,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUI_OPTIONS_MYST_ME
 		},
 		GType_MYST,
 		GF_ME,
@@ -268,7 +275,7 @@ static const MohawkGameDescription gameDescriptions[] = {
 			Common::PL_POL,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUI_OPTIONS_MYST_ME
 		},
 		GType_MYST,
 		GF_ME,
@@ -2698,7 +2705,7 @@ static const MohawkGameDescription fallbackDescs[] = {
 			Common::UNK_LANG,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUI_OPTIONS_MYST
 		},
 		GType_MYST,
 		0,
@@ -2713,7 +2720,7 @@ static const MohawkGameDescription fallbackDescs[] = {
 			Common::UNK_LANG,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO2(GUIO_NOASPECT, GUIO_NOLAUNCHLOAD)
+			GUI_OPTIONS_MYST_MAKING_OF
 		},
 		GType_MAKINGOF,
 		0,
@@ -2728,7 +2735,7 @@ static const MohawkGameDescription fallbackDescs[] = {
 			Common::UNK_LANG,
 			Common::kPlatformWindows,
 			ADGF_UNSTABLE,
-			GUIO1(GUIO_NOASPECT)
+			GUI_OPTIONS_MYST_ME
 		},
 		GType_MYST,
 		GF_ME,
diff --git a/engines/mohawk/myst.cpp b/engines/mohawk/myst.cpp
index 3bc2b2d..1ff0c64 100644
--- a/engines/mohawk/myst.cpp
+++ b/engines/mohawk/myst.cpp
@@ -66,11 +66,6 @@ MohawkEngine_Myst::MohawkEngine_Myst(OSystem *syst, const MohawkGameDescription
 	DebugMan.addDebugChannel(kDebugHelp, "Help", "Track Help File (HELP) Parsing");
 	DebugMan.addDebugChannel(kDebugCache, "Cache", "Track Resource Cache Accesses");
 
-	// Engine tweaks
-	// Disabling this makes engine behavior as per
-	// original, including bugs, missing bits etc. :)
-	_tweaksEnabled = true;
-
 	_currentCursor = 0;
 	_mainCursor = kDefaultMystCursor;
 	_showResourceRects = false;
@@ -503,8 +498,9 @@ void MohawkEngine_Myst::changeToStack(uint16 stack, uint16 card, uint16 linkSrcS
 			flyby = "stoneship flyby";
 			break;
 		// Myst Flyby Movie not used in Original Masterpiece Edition Engine
+		// We play it when first arriving on Myst, and if the user has chosen so.
 		case kMystStack:
-			if (_tweaksEnabled)
+			if (ConfMan.getBool("playmystflyby") && card == 4134)
 				flyby = "myst flyby";
 			break;
 		case kMechanicalStack:
diff --git a/engines/mohawk/myst.h b/engines/mohawk/myst.h
index 0803c69..8ef3ac6 100644
--- a/engines/mohawk/myst.h
+++ b/engines/mohawk/myst.h
@@ -192,7 +192,6 @@ public:
 	MystSoundBlock readSoundBlock(Common::ReadStream *stream) const;
 	void applySoundBlock(const MystSoundBlock &block);
 
-	bool _tweaksEnabled;
 	bool _needsUpdate;
 	bool _needsPageDrop;
 	bool _needsShowMap;


Commit: 2d405fcc9f9612bd9f9b002dec9ba345c4776663
    https://github.com/scummvm/scummvm/commit/2d405fcc9f9612bd9f9b002dec9ba345c4776663
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-03-05T14:43:10+01:00

Commit Message:
MOHAWK: Disable midi and subtitles options for Myst

Changed paths:
    engines/mohawk/detection_tables.h



diff --git a/engines/mohawk/detection_tables.h b/engines/mohawk/detection_tables.h
index ceac99a..7941a0d 100644
--- a/engines/mohawk/detection_tables.h
+++ b/engines/mohawk/detection_tables.h
@@ -24,10 +24,10 @@ namespace Mohawk {
 
 #define GAMEOPTION_PLAY_MYST_FLYBY         GUIO_GAMEOPTIONS1
 
-#define GUI_OPTIONS_MYST                   GUIO1(GUIO_NOASPECT)
-#define GUI_OPTIONS_MYST_ME                GUIO2(GUIO_NOASPECT, GAMEOPTION_PLAY_MYST_FLYBY)
-#define GUI_OPTIONS_MYST_DEMO              GUIO2(GUIO_NOASPECT, GUIO_NOLAUNCHLOAD)
-#define GUI_OPTIONS_MYST_MAKING_OF         GUIO2(GUIO_NOASPECT, GUIO_NOLAUNCHLOAD)
+#define GUI_OPTIONS_MYST                   GUIO3(GUIO_NOASPECT, GUIO_NOSUBTITLES, GUIO_NOMIDI)
+#define GUI_OPTIONS_MYST_ME                GUIO4(GUIO_NOASPECT, GUIO_NOSUBTITLES, GUIO_NOMIDI, GAMEOPTION_PLAY_MYST_FLYBY)
+#define GUI_OPTIONS_MYST_DEMO              GUIO4(GUIO_NOASPECT, GUIO_NOSUBTITLES, GUIO_NOMIDI, GUIO_NOLAUNCHLOAD)
+#define GUI_OPTIONS_MYST_MAKING_OF         GUIO4(GUIO_NOASPECT, GUIO_NOSUBTITLES, GUIO_NOMIDI, GUIO_NOLAUNCHLOAD)
 
 static const MohawkGameDescription gameDescriptions[] = {
 	// Myst


Commit: f306beab5925b4320948150ac30fe3d780231cb1
    https://github.com/scummvm/scummvm/commit/f306beab5925b4320948150ac30fe3d780231cb1
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-03-05T14:43:10+01:00

Commit Message:
MOHAWK: Fix one of the Channelwood monitor movies being misaligned

Changed paths:
    engines/mohawk/myst_stacks/channelwood.cpp



diff --git a/engines/mohawk/myst_stacks/channelwood.cpp b/engines/mohawk/myst_stacks/channelwood.cpp
index 659c5dc..21c3042 100644
--- a/engines/mohawk/myst_stacks/channelwood.cpp
+++ b/engines/mohawk/myst_stacks/channelwood.cpp
@@ -621,24 +621,32 @@ void Channelwood::o_hologramMonitor(uint16 op, uint16 var, uint16 argc, uint16 *
 		switch (button) {
 		case 0:
 			handle = _vm->_video->playMovie(_vm->wrapMovieFilename("monalgh", kChannelwoodStack));
+			if (!handle)
+				error("Failed to open monalgh movie");
+			handle->moveTo(227, 70);
 			break;
 		case 1:
 			handle = _vm->_video->playMovie(_vm->wrapMovieFilename("monamth", kChannelwoodStack));
+			if (!handle)
+				error("Failed to open monamth movie");
+			handle->moveTo(227, 70);
 			break;
 		case 2:
 			handle = _vm->_video->playMovie(_vm->wrapMovieFilename("monasirs", kChannelwoodStack));
+			if (!handle)
+				error("Failed to open monasirs movie");
+			handle->moveTo(227, 70);
 			break;
 		case 3:
 			handle = _vm->_video->playMovie(_vm->wrapMovieFilename("monsmsg", kChannelwoodStack));
+			if (!handle)
+				error("Failed to open monsmsg movie");
+			handle->moveTo(226, 68);
 			break;
 		default:
 			warning("Opcode %d Control Variable Out of Range", op);
 			break;
 		}
-
-		// Move the video to the right location
-		if (handle)
-			handle->moveTo(227, 70);
 	}
 }
 


Commit: 0a0cf7a22f34441cf3eebfe80e7b0df1d89dbeb9
    https://github.com/scummvm/scummvm/commit/0a0cf7a22f34441cf3eebfe80e7b0df1d89dbeb9
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-03-05T14:43:10+01:00

Commit Message:
MOHAWK: Fix garbage being drawn when pressing the rockey piano keys

Was a regression introduced in 085f3700f7cd6ddb23abe3719ca21b7025695da4

Changed paths:
    engines/mohawk/myst_stacks/myst.cpp



diff --git a/engines/mohawk/myst_stacks/myst.cpp b/engines/mohawk/myst_stacks/myst.cpp
index 6ce7d48..9d23d2f 100644
--- a/engines/mohawk/myst_stacks/myst.cpp
+++ b/engines/mohawk/myst_stacks/myst.cpp
@@ -2314,7 +2314,7 @@ void Myst::o_rocketPianoStart(uint16 op, uint16 var, uint16 argc, uint16 *argv)
 	dest.bottom = 332 - rect.top;
 
 	// Draw pressed piano key
-	_vm->_gfx->copyImageSectionToScreen(key->getSubImage(0).wdib, src, dest);
+	_vm->_gfx->copyImageSectionToScreen(key->getSubImage(1).wdib, src, dest);
 	_vm->_system->updateScreen();
 
 	// Play note


Commit: 54a31ed82ad3c5c9c812556cc8d954bbda131763
    https://github.com/scummvm/scummvm/commit/54a31ed82ad3c5c9c812556cc8d954bbda131763
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-03-05T14:43:10+01:00

Commit Message:
MOHAWK: Fix the Selenitic sound receiver speed being too fast

The rotation speed no longer goes directly to the maximum possible
speed after one second.

This bug also happened in the original.

Changed paths:
    engines/mohawk/myst_stacks/selenitic.cpp



diff --git a/engines/mohawk/myst_stacks/selenitic.cpp b/engines/mohawk/myst_stacks/selenitic.cpp
index 2617bd0..09db6e8 100644
--- a/engines/mohawk/myst_stacks/selenitic.cpp
+++ b/engines/mohawk/myst_stacks/selenitic.cpp
@@ -948,10 +948,13 @@ void Selenitic::soundReceiver_run() {
 		if (_soundReceiverDirection) {
 			uint32 currentTime = _vm->_system->getMillis();
 
-			if (_soundReceiverSpeed == 50 && currentTime > _soundReceiverStartTime + 500)
-					soundReceiverIncreaseSpeed();
-			else if (currentTime > _soundReceiverStartTime + 1000)
-					soundReceiverIncreaseSpeed();
+			if (_soundReceiverSpeed == 50 && currentTime > _soundReceiverStartTime + 500) {
+				soundReceiverIncreaseSpeed();
+				_soundReceiverStartTime = currentTime;
+			} else if (currentTime > _soundReceiverStartTime + 1000) {
+				soundReceiverIncreaseSpeed();
+				_soundReceiverStartTime = currentTime;
+			}
 
 			if (currentTime > _soundReceiverStartTime + 100)
 				soundReceiverUpdate();


Commit: ee2500167214cd95b48bc817f36424941df9dfdd
    https://github.com/scummvm/scummvm/commit/ee2500167214cd95b48bc817f36424941df9dfdd
Author: Bastien Bouclet (bastien.bouclet at gmail.com)
Date: 2016-03-05T14:43:10+01:00

Commit Message:
MOHAWK: Fix the sound receiver initially displaying an incorrect view

Changed paths:
    engines/mohawk/myst_stacks/selenitic.cpp
    engines/mohawk/myst_stacks/selenitic.h



diff --git a/engines/mohawk/myst_stacks/selenitic.cpp b/engines/mohawk/myst_stacks/selenitic.cpp
index 09db6e8..5402e5a 100644
--- a/engines/mohawk/myst_stacks/selenitic.cpp
+++ b/engines/mohawk/myst_stacks/selenitic.cpp
@@ -672,6 +672,11 @@ void Selenitic::soundReceiverUpdate() {
 }
 
 void Selenitic::soundReceiverDrawView() {
+	soundReceiverSetSubimageRect();
+	soundReceiverDrawAngle();
+}
+
+void Selenitic::soundReceiverSetSubimageRect() const {
 	uint32 left = ((*_soundReceiverPosition) * 1800) / 3600;
 
 	Common::Rect rect = _soundReceiverViewer->getSubImage(0).rect;
@@ -681,8 +686,6 @@ void Selenitic::soundReceiverDrawView() {
 
 	_soundReceiverViewer->setSubImageRect(0, rect);
 	_soundReceiverViewer->drawConditionalDataToScreen(0);
-
-	soundReceiverDrawAngle();
 }
 
 void Selenitic::soundReceiverDrawAngle() {
@@ -1083,6 +1086,8 @@ void Selenitic::o_soundReceiver_init(uint16 op, uint16 var, uint16 argc, uint16
 	_soundReceiverPosition = &_state.soundReceiverPositions[currentSource];
 	_soundReceiverCurrentSource = _soundReceiverSources[currentSource];
 
+	soundReceiverSetSubimageRect();
+
 	_soundReceiverSigmaPressed = false;
 }
 
diff --git a/engines/mohawk/myst_stacks/selenitic.h b/engines/mohawk/myst_stacks/selenitic.h
index ffd8941..fc96497 100644
--- a/engines/mohawk/myst_stacks/selenitic.h
+++ b/engines/mohawk/myst_stacks/selenitic.h
@@ -117,6 +117,7 @@ private:
 
 	void soundReceiverLeftRight(uint direction);
 	void soundReceiverUpdate();
+	void soundReceiverSetSubimageRect() const;
 	void soundReceiverDrawView();
 	void soundReceiverDrawAngle();
 	void soundReceiverIncreaseSpeed();






More information about the Scummvm-git-logs mailing list