[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