[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