[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