[Scummvm-git-logs] scummvm master -> 8734f273c2ac63aef6f8dfdd29547f144d3c1bbe
neuromancer
noreply at scummvm.org
Fri Sep 11 10:58:12 UTC 2026
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
2c291e73d4 SCUMM: RA2: avoid screen corruption in L11
8734f273c2 SCUMM: RA2: avoid L2 train/tram corruption
Commit: 2c291e73d4d7ca843d7b5710e48aac7a45dce47f
https://github.com/scummvm/scummvm/commit/2c291e73d4d7ca843d7b5710e48aac7a45dce47f
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-09-11T12:39:46+02:00
Commit Message:
SCUMM: RA2: avoid screen corruption in L11
Changed paths:
engines/scumm/insane/rebel2/render.cpp
diff --git a/engines/scumm/insane/rebel2/render.cpp b/engines/scumm/insane/rebel2/render.cpp
index ab2c7d0c858..77a3edc8560 100644
--- a/engines/scumm/insane/rebel2/render.cpp
+++ b/engines/scumm/insane/rebel2/render.cpp
@@ -374,6 +374,17 @@ void InsaneRebel2::loadEmbeddedSan(int userId, byte *animData, int32 size, byte
}
EmbeddedSanFrame &frame = _rebelEmbeddedHud[userId];
+ // Transparent background patches update the existing scene in place.
+ if (_rebelHandler == 25 && userId == 4 && codec == SMUSH_CODEC_RLE &&
+ isValidEmbeddedFrame(frame) && left >= 0 && top >= 0 &&
+ width > 0 && height > 0 && left + width <= frame.width &&
+ top + height <= frame.height && stream.pos() < subDataEnd) {
+ smushDecodeRLE(frame.pixels, animData + stream.pos(), left, top,
+ width, height, frame.width);
+ renderEmbeddedFrame(renderBitmap, frame, userId);
+ return;
+ }
+
frame.valid = false;
if (width > 0 && height > 0 && width <= 800 && height <= 480) {
Commit: 8734f273c2ac63aef6f8dfdd29547f144d3c1bbe
https://github.com/scummvm/scummvm/commit/8734f273c2ac63aef6f8dfdd29547f144d3c1bbe
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2026-09-11T12:57:49+02:00
Commit Message:
SCUMM: RA2: avoid L2 train/tram corruption
Changed paths:
engines/scumm/smush/rebel/smush_player_ra2.cpp
engines/scumm/smush/rebel/smush_player_ra2.h
diff --git a/engines/scumm/smush/rebel/smush_player_ra2.cpp b/engines/scumm/smush/rebel/smush_player_ra2.cpp
index a0fd008b0c0..e42e08cd969 100644
--- a/engines/scumm/smush/rebel/smush_player_ra2.cpp
+++ b/engines/scumm/smush/rebel/smush_player_ra2.cpp
@@ -169,6 +169,8 @@ void SmushPlayerRebel2::initGamePlayerFields() {
_ra2FrameObjectOriginalHeight = 0;
_ra2FrameObjectSurfaceWidth = 0;
_ra2FrameObjectSurfaceHeight = 0;
+ _ra2SpecialBufferWidth = 0;
+ _ra2SpecialBufferHeight = 0;
_ra2DeltaBlocksWidth = 0;
_ra2DeltaBlocksHeight = 0;
_ra2DeltaGlyphsWidth = 0;
@@ -223,6 +225,8 @@ void SmushPlayerRebel2::initGameVideoState() {
_loadPlaybackPending = (_curVideoFlags & 0x40) != 0;
_ra2PendingAnimHeaderPalette = false;
_ra2UsingGameplaySurface = false;
+ _ra2SpecialBufferWidth = 0;
+ _ra2SpecialBufferHeight = 0;
_smushAudioTable[100] = 0;
// Some menu videos inherit the previous SMUSH palette.
@@ -1025,6 +1029,8 @@ bool SmushPlayerRebel2::ra2SelectFrameBuffer(int codec, int width, int height) {
}
_width = surfaceWidth;
_height = surfaceHeight;
+ _ra2SpecialBufferWidth = surfaceWidth;
+ _ra2SpecialBufferHeight = surfaceHeight;
}
if (needsSpecialBuffer &&
@@ -1472,11 +1478,12 @@ void SmushPlayerRebel2::handleGameFrameStart() {
if (ra2IsHighResMode()) {
if (isRebel2GameplayActive(_insane)) {
- if (_ra2UsingGameplaySurface && _specialBuffer != nullptr &&
- _specialBufferSize >= kRebel2GameplaySurfaceWidth * kRebel2GameplaySurfaceHeight) {
+ // Restore the decode surface's pitch before drawing the background.
+ if (_specialBuffer != nullptr && _ra2SpecialBufferWidth > 0 && _ra2SpecialBufferHeight > 0 &&
+ (int64)_ra2SpecialBufferWidth * _ra2SpecialBufferHeight <= _specialBufferSize) {
_dst = _specialBuffer;
- _width = kRebel2GameplaySurfaceWidth;
- _height = kRebel2GameplaySurfaceHeight;
+ _width = _ra2SpecialBufferWidth;
+ _height = _ra2SpecialBufferHeight;
} else if (ra2EnsureLowResVideoBuffer()) {
_dst = _ra2LowResVideoBuffer;
_width = 320;
diff --git a/engines/scumm/smush/rebel/smush_player_ra2.h b/engines/scumm/smush/rebel/smush_player_ra2.h
index 3c8b37568ce..9326c8e8210 100644
--- a/engines/scumm/smush/rebel/smush_player_ra2.h
+++ b/engines/scumm/smush/rebel/smush_player_ra2.h
@@ -106,6 +106,8 @@ private:
int _ra2FrameObjectOriginalHeight;
int _ra2FrameObjectSurfaceWidth;
int _ra2FrameObjectSurfaceHeight;
+ int _ra2SpecialBufferWidth;
+ int _ra2SpecialBufferHeight;
int _ra2DeltaBlocksWidth;
int _ra2DeltaBlocksHeight;
int _ra2DeltaGlyphsWidth;
More information about the Scummvm-git-logs
mailing list