[Scummvm-git-logs] scummvm master -> 55993e1c10eac0675f882ce5081572fcdd7e6180

antoniou79 noreply at scummvm.org
Sat Jan 31 23:10:26 UTC 2026


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

Summary:
a20d3b396f MYST3: Fix reevaluation of ambient sounds during simple movie
19a1cfd4d2 MYST3: Fix scaling of draggable objects in widescreen mod
b3545a5b88 MYST3: Fix subtitles scaling for widescreen mod
d0bfac5340 MYST3: Cleanup subtitles cover box after subtitles sequence ends
55993e1c10 MYST3: Fixes spider spinner reset animations


Commit: a20d3b396f0c97b7fc7fa32466ba2a0fe51e5766
    https://github.com/scummvm/scummvm/commit/a20d3b396f0c97b7fc7fa32466ba2a0fe51e5766
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2026-02-01T01:04:29+02:00

Commit Message:
MYST3: Fix reevaluation of ambient sounds during simple movie

Fixes bug #16491

The previous code attempted to call runAmbientScripts() with the value of var MovieAmbiantScript (181) as an argument,
but that would not work because MovieAmbiantScript's value was not a valid node id (at least in the tested cases,
ie. the fire at Atrus's office in Tomahna and the squee trapping at Edanna.

Changed paths:
    engines/myst3/movie.cpp


diff --git a/engines/myst3/movie.cpp b/engines/myst3/movie.cpp
index 5be07da80d8..73c6087c9f5 100644
--- a/engines/myst3/movie.cpp
+++ b/engines/myst3/movie.cpp
@@ -423,7 +423,20 @@ void SimpleMovie::update() {
 
 	uint16 ambiantStartFrame = _vm->_state->getMovieAmbiantScriptStartFrame();
 	if (ambiantStartFrame && _bink.getCurFrame() > ambiantStartFrame) {
-		_vm->runAmbientScripts(_vm->_state->getMovieAmbiantScript());
+		// Fixes bug #16491 for missing ambient sounds while a simpleMovie is playing
+		// eg. the burning fire after Saavedro throws the lamp at the curtain in Tomahna (during the intro at Atrus's office)
+		// and the screaming squee after trapping it in Edanna.
+		// This fix is essentially replicating the code from ambientReloadCurrentNode() script command.
+		// In these movies (SimpleMovie), a frame number (ambiantStartFrame) is set (before they start)
+		// upon which the ambient sounds scripts should be re-evaluated,
+		// because a condition and related variables to that condition will have changed
+		// and therefore different ambient sounds should be played.
+		//
+		// NOTE: The value set for var MovieAmbiantScript (181) is not a node id -- so calling runAmbientScripts() here with it as argument does not work.
+		// Instead, we just reload the current node's ambient scripts and then applySounds using the value of MovieAmbiantScript as fadeOutDelay.
+		_vm->_ambient->loadNode(0, 0, 0);
+		_vm->_ambient->applySounds(_vm->_state->valueOrVarValue(_vm->_state->getMovieAmbiantScript()));
+
 		_vm->_state->setMovieAmbiantScriptStartFrame(0);
 		_vm->_state->setMovieAmbiantScript(0);
 	}


Commit: 19a1cfd4d268ce5a3b831fd676b583b11fc64f46
    https://github.com/scummvm/scummvm/commit/19a1cfd4d268ce5a3b831fd676b583b11fc64f46
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2026-02-01T01:04:29+02:00

Commit Message:
MYST3: Fix scaling of draggable objects in widescreen mod

Fixes almost invisible picked up/dragged pegs for the spinner/cups puzzle in widescreen mod

The fix follows the logic for scaling the cursor.

Changed paths:
    engines/myst3/inventory.cpp


diff --git a/engines/myst3/inventory.cpp b/engines/myst3/inventory.cpp
index 51e008bf0ef..041b2d6464e 100644
--- a/engines/myst3/inventory.cpp
+++ b/engines/myst3/inventory.cpp
@@ -379,7 +379,13 @@ Common::Rect DragItem::getPosition() {
 	uint posX = CLIP<uint>(mouse.x, _texture->width / 2, viewport.width() - _texture->width / 2);
 	uint posY = CLIP<uint>(mouse.y, _texture->height / 2, viewport.height() - _texture->height / 2);
 
-	Common::Rect screenRect = Common::Rect::center(posX, posY, _texture->width, _texture->height);
+	// Proper scaling code - similar to cursor scaling code (see: Cursor::draw())
+	float scale = MIN(
+		viewport.width()  / (float) Renderer::kOriginalWidth,
+		viewport.height() / (float) Renderer::kOriginalHeight
+	);
+
+	Common::Rect screenRect = Common::Rect::center(posX, posY, _texture->width * scale, _texture->height * scale);
 	return screenRect;
 }
 


Commit: b3545a5b880da6ce1136920132747e55543e1ee6
    https://github.com/scummvm/scummvm/commit/b3545a5b880da6ce1136920132747e55543e1ee6
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2026-02-01T01:04:29+02:00

Commit Message:
MYST3: Fix subtitles scaling for widescreen mod

The subtitles should not appear tiny in widescreen mod

Changed paths:
    engines/myst3/subtitles.cpp


diff --git a/engines/myst3/subtitles.cpp b/engines/myst3/subtitles.cpp
index ee2a2c76ec1..a9e3fafa7b0 100644
--- a/engines/myst3/subtitles.cpp
+++ b/engines/myst3/subtitles.cpp
@@ -476,8 +476,21 @@ void Subtitles::drawOverlay() {
 	if (!_texture)
 		return;
 
+	Common::Rect viewport;
+	if (_scaled) {
+		viewport = Common::Rect(Renderer::kOriginalWidth, Renderer::kOriginalHeight);
+	} else {
+		viewport = _vm->_gfx->viewport();
+	}
+
+	float scale = MIN(
+		viewport.width()  / (float) Renderer::kOriginalWidth,
+		viewport.height() / (float) Renderer::kOriginalHeight
+	);
+
+
 	Common::Rect screen = _vm->_gfx->viewport();
-	Common::Rect bottomBorder = Common::Rect(Renderer::kOriginalWidth, _surfaceHeight);
+	Common::Rect bottomBorder = Common::Rect(Renderer::kOriginalWidth * scale, _surfaceHeight * scale);
 	bottomBorder.translate(0, _surfaceTop);
 
 	if (_vm->isWideScreenModEnabled()) {
@@ -485,7 +498,7 @@ void Subtitles::drawOverlay() {
 		_vm->_gfx->drawRect2D(Common::Rect(screen.width(), Renderer::kBottomBorderHeight), 0xFF, 0x00, 0x00, 0x00);
 
 		// Center the subtitles in the screen
-		bottomBorder.translate((screen.width() - Renderer::kOriginalWidth) / 2, 0);
+		bottomBorder.translate((screen.width() - Renderer::kOriginalWidth * scale) / 2, 0);
 	}
 
 	Common::Rect textureRect = Common::Rect(_texture->width, _texture->height);


Commit: d0bfac53408fdc2cab1fd43f569e19f98cd8f99e
    https://github.com/scummvm/scummvm/commit/d0bfac53408fdc2cab1fd43f569e19f98cd8f99e
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2026-02-01T01:04:29+02:00

Commit Message:
MYST3: Cleanup subtitles cover box after subtitles sequence ends

Changed paths:
    engines/myst3/subtitles.cpp


diff --git a/engines/myst3/subtitles.cpp b/engines/myst3/subtitles.cpp
index a9e3fafa7b0..50272d900b8 100644
--- a/engines/myst3/subtitles.cpp
+++ b/engines/myst3/subtitles.cpp
@@ -451,14 +451,17 @@ ResourceDescription Subtitles::loadText(int32 id, bool overriden) {
 void Subtitles::setFrame(int32 frame) {
 	const Phrase *phrase = nullptr;
 
-	for (uint i = 0; i < _phrases.size(); i++) {
+	uint phraseIdx = 0;
+	for (uint i = 0; i < _phrases.size(); ++i) {
 		if (_phrases[i].frame > frame)
 			break;
 
 		phrase = &_phrases[i];
+		phraseIdx = i;
 	}
 
-	if (!phrase) {
+	if (!phrase
+		|| (phraseIdx == _phrases.size() - 1 && phrase->string.empty())) {
 		freeTexture();
 		return;
 	}


Commit: 55993e1c10eac0675f882ce5081572fcdd7e6180
    https://github.com/scummvm/scummvm/commit/55993e1c10eac0675f882ce5081572fcdd7e6180
Author: antoniou79 (a.antoniou79 at gmail.com)
Date: 2026-02-01T01:04:29+02:00

Commit Message:
MYST3: Fixes spider spinner reset animations

Fix for bug #15158

Changed paths:
    engines/myst3/puzzles.cpp


diff --git a/engines/myst3/puzzles.cpp b/engines/myst3/puzzles.cpp
index 8239156d2ef..7ddf34634e3 100644
--- a/engines/myst3/puzzles.cpp
+++ b/engines/myst3/puzzles.cpp
@@ -570,7 +570,7 @@ void Puzzles::pinball(int16 var) {
 		int16 endFrame;
 		int16 sound;
 		int16 targetLeftFrame;
-		int16 tragetRightFrame;
+		int16 targetRightFrame;
 		int16 type;
 	};
 
@@ -860,7 +860,7 @@ void Puzzles::pinball(int16 var) {
 			}
 
 			leftSideFrame = jump->targetLeftFrame;
-			rightSideFrame = jump->tragetRightFrame;
+			rightSideFrame = jump->targetRightFrame;
 			_vm->_state->setVar(34, leftSideFrame);
 			_vm->_state->setVar(35, rightSideFrame);
 
@@ -911,8 +911,8 @@ void Puzzles::pinball(int16 var) {
 		if (rightSideFrame < 500)
 			rightSideFrame += 300;
 
-		int32 crashedLeftFrame = ((((leftSideFrame + 25) / 50) >> 4) & 1) != 0 ? 550 : 500;
-		int32 crashedRightFrame = ((((rightSideFrame + 25) / 50) >> 4) & 1) != 0 ? 550 : 500;
+		int32 crashedLeftFrame = (((leftSideFrame + 50) >> 4) & 1) != 0 ? 550 : 500;
+		int32 crashedRightFrame = (((rightSideFrame + 50) >> 4) & 1) != 0 ? 550 : 500;
 
 		while (1) {
 			bool moviePlaying = false;
@@ -942,32 +942,30 @@ void Puzzles::pinball(int16 var) {
 				moviePlaying = true;
 			}
 
-			if (!moviePlaying) {
-				if ((rightComb->movie != 10201 || rightPanelFrame > 2)
-					&& rightPanelFrame != rightComb->expireFrame) {
+			if ((rightComb->movie != 10201 || rightPanelFrame > 2)
+				&& rightPanelFrame != rightComb->expireFrame) {
 
-					if (rightToLeftJumpCountdown) {
-						--rightToLeftJumpCountdown;
-					}
-					if (!rightToLeftJumpCountdown) {
-						_vm->_state->setVar(35, crashedRightFrame);
-						crashedRightFrame++;
-					}
+				if (rightToLeftJumpCountdown) {
+					--rightToLeftJumpCountdown;
+				}
+				if (!rightToLeftJumpCountdown) {
+					_vm->_state->setVar(35, crashedRightFrame);
+					crashedRightFrame++;
+				}
 
-					_vm->_state->setVar(32, rightPanelFrame);
+				_vm->_state->setVar(32, rightPanelFrame);
 
-					++rightPanelFrame;
-					rightSideFrame = rightPanelFrame;
+				++rightPanelFrame;
+				rightSideFrame = rightPanelFrame;
 
-					for (uint i = 0; i < 3; i++) {
-						if (rightComb->pegFrames[i] == rightSideFrame) {
-							_vm->_sound->playEffect(1027, 50);
-							rightToLeftJumpCountdown = 5;
-						}
+				for (uint i = 0; i < 3; i++) {
+					if (rightComb->pegFrames[i] == rightSideFrame) {
+						_vm->_sound->playEffect(1027, 50);
+						rightToLeftJumpCountdown = 5;
 					}
-
-					moviePlaying = true;
 				}
+
+				moviePlaying = true;
 			}
 
 			_drawXTicks(1);




More information about the Scummvm-git-logs mailing list