[Scummvm-git-logs] scummvm master -> 55b8ba0f92fbd2d92351d8ed7a2f1dcc1aa110a0

dreammaster noreply at scummvm.org
Sat Dec 20 01:33:05 UTC 2025


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

Summary:
55b8ba0f92 MM: MM1: Support override background and sprites for Enhanced mode


Commit: 55b8ba0f92fbd2d92351d8ed7a2f1dcc1aa110a0
    https://github.com/scummvm/scummvm/commit/55b8ba0f92fbd2d92351d8ed7a2f1dcc1aa110a0
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2025-12-20T12:32:31+11:00

Commit Message:
MM: MM1: Support override background and sprites for Enhanced mode

Changed paths:
    engines/mm/mm1/globals.cpp
    engines/mm/shared/xeen/sprites.cpp
    engines/mm/shared/xeen/sprites.h


diff --git a/engines/mm/mm1/globals.cpp b/engines/mm/mm1/globals.cpp
index 0246453cabf..a797a523ed4 100644
--- a/engines/mm/mm1/globals.cpp
+++ b/engines/mm/mm1/globals.cpp
@@ -22,6 +22,7 @@
 #include "common/engine_data.h"
 #include "engines/engine.h"
 #include "graphics/fonts/ttf.h"
+#include "image/bmp.h"
 #include "mm/mm1/globals.h"
 #include "mm/mm1/mm1.h"
 #include "mm/shared/utils/strings.h"
@@ -86,10 +87,15 @@ bool Globals::load(bool isEnhanced) {
 		{
 			// Load the Xeen game screen background
 			Common::File f;
-			if (!f.open("back.raw"))
+			Image::BitmapDecoder decoder;
+			if (f.open("gfx/back.bmp") && decoder.loadStream(f))
+				_gameBackground.copyFrom(*decoder.getSurface());
+			else if (f.open("back.raw")) {
+				_gameBackground.create(320, 200);
+				f.read(_gameBackground.getPixels(), 320 * 200);
+			} else {
 				error("Could not load background");
-			_gameBackground.create(320, 200);
-			f.read(_gameBackground.getPixels(), 320 * 200);
+			}
 		}
 
 		{
diff --git a/engines/mm/shared/xeen/sprites.cpp b/engines/mm/shared/xeen/sprites.cpp
index 67e1f96ae3f..c26527f51d9 100644
--- a/engines/mm/shared/xeen/sprites.cpp
+++ b/engines/mm/shared/xeen/sprites.cpp
@@ -24,6 +24,7 @@
 #include "common/memstream.h"
 #include "common/textconsole.h"
 #include "graphics/paletteman.h"
+#include "image/bmp.h"
 #include "mm/shared/xeen/sprites.h"
 #include "mm/mm.h"
 
@@ -103,6 +104,15 @@ void SpriteResource::load(Common::SeekableReadStream &f) {
 	for (int i = 0; i < count; ++i) {
 		_index[i]._offset1 = f.readUint16LE();
 		_index[i]._offset2 = f.readUint16LE();
+
+		// Check for any bitmaps overriding the default Xeen sprites for M&M1 Enhanced mode
+		Common::String fname = Common::String::format("gfx/%s/image%.2d.bmp", _filename.baseName().c_str(), i);
+		if (Common::File::exists(fname.c_str())) {
+			File fBitmap(fname.c_str());
+			Image::BitmapDecoder decoder;
+			if (decoder.loadStream(fBitmap))
+				_index[i]._override.copyFrom(*decoder.getSurface());
+		}
 	}
 }
 
@@ -149,10 +159,14 @@ void SpriteResource::draw(XSurface &dest, int frame, const Common::Point &destPo
 
 	// WORKAROUND: Crash clicking Vertigo well in Clouds
 	if (frame < (int)_index.size()) {
-		// Sprites can consist of separate background & foreground
-		drawer->draw(dest, _index[frame]._offset1, destPos, r, flags, scale);
-		if (_index[frame]._offset2)
-			drawer->draw(dest, _index[frame]._offset2, destPos, r, flags, scale);
+		if (!_index[frame]._override.empty()) {
+			dest.blitFrom(_index[frame]._override, destPos);
+		} else {
+			// Sprites can consist of separate background & foreground
+			drawer->draw(dest, _index[frame]._offset1, destPos, r, flags, scale);
+			if (_index[frame]._offset2)
+				drawer->draw(dest, _index[frame]._offset2, destPos, r, flags, scale);
+		}
 	}
 
 	delete drawer;
diff --git a/engines/mm/shared/xeen/sprites.h b/engines/mm/shared/xeen/sprites.h
index 4697900e300..504f6513105 100644
--- a/engines/mm/shared/xeen/sprites.h
+++ b/engines/mm/shared/xeen/sprites.h
@@ -53,8 +53,10 @@ class SpriteResource {
 protected:
 	struct IndexEntry {
 		uint16 _offset1, _offset2;
+		Graphics::ManagedSurface _override;
 	};
 	Common::Array<IndexEntry> _index;
+	Common::Array<Graphics::ManagedSurface> _overrides;
 	size_t _filesize;
 	byte *_data;
 	Common::Path _filename;




More information about the Scummvm-git-logs mailing list