[Scummvm-git-logs] scummvm master -> 39202020f6f7910b256423582284f771772bc025

sev- noreply at scummvm.org
Thu Sep 4 19:05:45 UTC 2025


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

Summary:
fcfd37291d MACVENTURE: Display startup and title screens
8ff865503e MACVENTURE: Implement old PACK title screen decoder
48e79c9281 MACVENTURE: Fix title screen corruption
39202020f6 MACVENTURE: Use local Mac resource manager for loading title screen


Commit: fcfd37291d48c4eeb0fa285a546a0d0c43e81f5c
    https://github.com/scummvm/scummvm/commit/fcfd37291d48c4eeb0fa285a546a0d0c43e81f5c
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2025-09-04T21:05:41+02:00

Commit Message:
MACVENTURE: Display startup and title screens

Only the updated versions are supported. The original versions
apparently use different compression for the title screens.

Changed paths:
    engines/macventure/gui.cpp
    engines/macventure/gui.h
    engines/macventure/macventure.cpp


diff --git a/engines/macventure/gui.cpp b/engines/macventure/gui.cpp
index a5093b6d78d..ad5a27cb413 100644
--- a/engines/macventure/gui.cpp
+++ b/engines/macventure/gui.cpp
@@ -209,8 +209,84 @@ void Gui::drawMenu() {
 	_menu->draw(&_screen);
 }
 
+bool Gui::decodeStartupScreen() {
+	Common::SeekableReadStream *stream = Common::MacResManager::openFileOrDataFork("StartupScreen");
+
+	if (!stream)
+		return false;
+
+	for (int y = 0; y < kScreenHeight; y++) {
+		for (int x = 0; x < kScreenWidth / 8; x++) {
+			byte b = stream->readByte();
+
+			for (int z = 0; z < 8; z++) {
+				_screen.setPixel(8 * x + z, y, (b & (0x80 >> z)) ? kColorBlack : kColorWhite);
+			}
+		}
+	}
+
+	return true;
+}
+
+bool Gui::decodeTitleScreen() {
+	Common::Path titlePath = _engine->getFilePath(kTitlePathID);
+	if (_resourceManager->open(titlePath)) {
+		Common::SeekableReadStream *stream = _resourceManager->getResource(MKTAG('P', 'P', 'I', 'C'), 0);
+
+		if (stream) {
+			ImageAsset *title = new ImageAsset(stream);
+
+			_screen.fillRect(Common::Rect(kScreenWidth, kScreenHeight), kColorBlack);
+			title->blitInto(&_screen, 0, (kScreenHeight - title->getHeight()) / 2, kBlitDirect);
+
+			delete title;
+		} else {
+			// PACK file
+			return false;
+		}
+
+		return true;
+	}
+
+	return false;
+}
+
+bool Gui::displayTitleScreenAndWait(uint32 ms) {
+	g_system->copyRectToScreen(_screen.getPixels(), kScreenWidth, 0, 0, kScreenWidth, kScreenHeight);
+
+	uint32 now = g_system->getMillis();
+	while (g_system->getMillis() < now + 3000) {
+		if (_engine->shouldQuit())
+			return false;
+
+		Common::Event event;
+
+		while (_engine->getEventManager()->pollEvent(event)) {
+			if (event.type == Common::EVENT_KEYDOWN && event.kbd.keycode == Common::KEYCODE_ESCAPE)
+				return false;
+		}
+
+		g_system->updateScreen();
+		g_system->delayMillis(10);
+	}
+
+	return true;
+}
+
 void Gui::drawTitle() {
-	warning("drawTitle hasn't been tested yet");
+	bool success = true;
+
+	_wm.pushCursor(Graphics::kMacCursorOff);
+
+	if (decodeStartupScreen())
+		success = displayTitleScreenAndWait(4000);
+
+	if (success) {
+		if (decodeTitleScreen())
+			displayTitleScreenAndWait(4000);
+	}
+
+	_wm.popCursor();
 }
 
 void Gui::clearControls() {
diff --git a/engines/macventure/gui.h b/engines/macventure/gui.h
index 36fd249015c..d01a9e4ee03 100644
--- a/engines/macventure/gui.h
+++ b/engines/macventure/gui.h
@@ -178,6 +178,10 @@ public:
 
 	void createInnerSurface(Graphics::ManagedSurface *innerSurface, Graphics::ManagedSurface *outerSurface, const BorderBounds &borders);
 
+private:
+	bool decodeStartupScreen();
+	bool decodeTitleScreen();
+	bool displayTitleScreenAndWait(uint32 ms);
 
 private: // Attributes
 
diff --git a/engines/macventure/macventure.cpp b/engines/macventure/macventure.cpp
index 99f81a6ea5a..d4492d90d24 100644
--- a/engines/macventure/macventure.cpp
+++ b/engines/macventure/macventure.cpp
@@ -156,6 +156,7 @@ Common::Error MacVentureEngine::run() {
 		}
 	} else {
 		setNewGameState();
+		_gui->drawTitle();
 	}
 	selectControl(kStartOrResume);
 


Commit: 8ff865503e3d43849c7a4144244af6694ebb1ea6
    https://github.com/scummvm/scummvm/commit/8ff865503e3d43849c7a4144244af6694ebb1ea6
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2025-09-04T21:05:41+02:00

Commit Message:
MACVENTURE: Implement old PACK title screen decoder

Changed paths:
    engines/macventure/gui.cpp


diff --git a/engines/macventure/gui.cpp b/engines/macventure/gui.cpp
index ad5a27cb413..73d85903cd2 100644
--- a/engines/macventure/gui.cpp
+++ b/engines/macventure/gui.cpp
@@ -234,6 +234,7 @@ bool Gui::decodeTitleScreen() {
 		Common::SeekableReadStream *stream = _resourceManager->getResource(MKTAG('P', 'P', 'I', 'C'), 0);
 
 		if (stream) {
+			// New PPICT title screen
 			ImageAsset *title = new ImageAsset(stream);
 
 			_screen.fillRect(Common::Rect(kScreenWidth, kScreenHeight), kColorBlack);
@@ -241,14 +242,44 @@ bool Gui::decodeTitleScreen() {
 
 			delete title;
 		} else {
-			// PACK file
-			return false;
-		}
+			// Old PACK title screen
+			stream = Common::MacResManager::openFileOrDataFork(titlePath);
+			if (!stream)
+				return false;
 
-		return true;
+			stream->seek(0x200);
+
+			for (int y = 0; y < 302; y++) {
+				byte line[72];
+				int count = 0;
+
+				while (count < 72) {
+					byte n = stream->readByte();
+
+					if (n == 0x80) {
+						// Do nothing
+					} else if (n & 0x80) {
+						n = (n ^ 0xFF) + 2;
+						byte v = stream->readByte();
+
+						while (n--)
+							line[count++] = v;
+					} else {
+						n++;
+						while (n--)
+							line[count++] = stream->readByte();
+					}
+				}
+
+				for (int x = 0; x < 512; x++)
+					_screen.setPixel(x, y, (line[x / 8] & (0x80 >> (x % 8))) ? kColorBlack : kColorWhite);
+			}
+
+			delete stream;
+		}
 	}
 
-	return false;
+	return true;
 }
 
 bool Gui::displayTitleScreenAndWait(uint32 ms) {


Commit: 48e79c9281ab089c74821e404d60175ceb6c9511
    https://github.com/scummvm/scummvm/commit/48e79c9281ab089c74821e404d60175ceb6c9511
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2025-09-04T21:05:41+02:00

Commit Message:
MACVENTURE: Fix title screen corruption

As best as I can understand it, a 32-bit bitstream requires the base
stream size to be a multiple of 4. That's not the case here, so change
it to an 8-bit bitstream.

Changed paths:
    engines/macventure/image.cpp
    engines/macventure/image.h


diff --git a/engines/macventure/image.cpp b/engines/macventure/image.cpp
index 4354429be6a..8cf1036bd5c 100644
--- a/engines/macventure/image.cpp
+++ b/engines/macventure/image.cpp
@@ -116,7 +116,7 @@ ImageAsset::~ImageAsset() {
 }
 
 void ImageAsset::decodePPIC(Common::SeekableReadStream *baseStream, Common::Array<byte> &data, uint &bitHeight, uint &bitWidth, uint &rowBytes) {
-	Common::BitStream32BEMSB stream(baseStream);
+	Common::BitStream8MSB stream(baseStream);
 
 	uint8 mode = stream.getBits<3>();
 	int w, h;
@@ -179,7 +179,7 @@ void ImageAsset::decodePPIC(ObjID id, Common::Array<byte> &data, uint &bitHeight
 	decodePPIC(baseStream, data, bitHeight, bitWidth, rowBytes);
 }
 
-void ImageAsset::decodePPIC0(Common::BitStream32BEMSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes) {
+void ImageAsset::decodePPIC0(Common::BitStream8MSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes) {
 	uint words = bitWidth >> 4;
 	uint bytes = bitWidth & 0xF;
 	uint v = 0;
@@ -201,15 +201,15 @@ void ImageAsset::decodePPIC0(Common::BitStream32BEMSB &stream, Common::Array<byt
 
 }
 
-void ImageAsset::decodePPIC1(Common::BitStream32BEMSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes) {
+void ImageAsset::decodePPIC1(Common::BitStream8MSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes) {
 	decodeHuffGraphic(PPIC1Huff, stream, data, bitHeight, bitWidth, rowBytes);
 }
 
-void ImageAsset::decodePPIC2(Common::BitStream32BEMSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes) {
+void ImageAsset::decodePPIC2(Common::BitStream8MSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes) {
 	decodeHuffGraphic(PPIC2Huff, stream, data, bitHeight, bitWidth, rowBytes);
 }
 
-void ImageAsset::decodePPIC3(Common::BitStream32BEMSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes) {
+void ImageAsset::decodePPIC3(Common::BitStream8MSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes) {
 	// We need to load the huffman from the PPIC itself
 	PPICHuff huff;
 	uint16 v, bits;
@@ -261,7 +261,7 @@ void ImageAsset::decodePPIC3(Common::BitStream32BEMSB &stream, Common::Array<byt
 	decodeHuffGraphic(huff, stream, data, bitHeight, bitWidth, rowBytes);
 }
 
-void ImageAsset::decodeHuffGraphic(const PPICHuff &huff, Common::BitStream32BEMSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes) {
+void ImageAsset::decodeHuffGraphic(const PPICHuff &huff, Common::BitStream8MSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes) {
 	byte flags = 0;
 	_walkRepeat = 0;
 	_walkLast = 0;
@@ -356,7 +356,7 @@ void ImageAsset::decodeHuffGraphic(const PPICHuff &huff, Common::BitStream32BEMS
 	}
 }
 
-byte ImageAsset::walkHuff(const PPICHuff &huff, Common::BitStream32BEMSB &stream) {
+byte ImageAsset::walkHuff(const PPICHuff &huff, Common::BitStream8MSB &stream) {
 	if (_walkRepeat) {
 		_walkRepeat--;
 		_walkLast = ((_walkLast << 8) & 0xFF00) | (_walkLast >> 8);
diff --git a/engines/macventure/image.h b/engines/macventure/image.h
index e3baa073372..12f19046f69 100644
--- a/engines/macventure/image.h
+++ b/engines/macventure/image.h
@@ -78,13 +78,13 @@ private:
 	void decodePPIC(Common::SeekableReadStream *baseStream, Common::Array<byte> &data, uint &bitHeight, uint &bitWidth, uint &rowBytes);
 	void decodePPIC(ObjID id, Common::Array<byte> &data, uint &bitHeight, uint &bitWidth, uint &rowBytes);
 
-	void decodePPIC0(Common::BitStream32BEMSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes);
-	void decodePPIC1(Common::BitStream32BEMSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes);
-	void decodePPIC2(Common::BitStream32BEMSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes);
-	void decodePPIC3(Common::BitStream32BEMSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes);
+	void decodePPIC0(Common::BitStream8MSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes);
+	void decodePPIC1(Common::BitStream8MSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes);
+	void decodePPIC2(Common::BitStream8MSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes);
+	void decodePPIC3(Common::BitStream8MSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes);
 
-	void decodeHuffGraphic(const PPICHuff &huff, Common::BitStream32BEMSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes);
-	byte walkHuff(const PPICHuff &huff, Common::BitStream32BEMSB &stream);
+	void decodeHuffGraphic(const PPICHuff &huff, Common::BitStream8MSB &stream, Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes);
+	byte walkHuff(const PPICHuff &huff, Common::BitStream8MSB &stream);
 
 	void blitDirect(Graphics::ManagedSurface *target, int ox, int oy, const Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes);
 	void blitBIC(Graphics::ManagedSurface *target, int ox, int oy, const Common::Array<byte> &data, uint bitHeight, uint bitWidth, uint rowBytes);


Commit: 39202020f6f7910b256423582284f771772bc025
    https://github.com/scummvm/scummvm/commit/39202020f6f7910b256423582284f771772bc025
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2025-09-04T21:05:41+02:00

Commit Message:
MACVENTURE: Use local Mac resource manager for loading title screen

The global one is reserved for other use. Using it here messes up its
state.

Changed paths:
    engines/macventure/gui.cpp


diff --git a/engines/macventure/gui.cpp b/engines/macventure/gui.cpp
index 73d85903cd2..985d931c6b1 100644
--- a/engines/macventure/gui.cpp
+++ b/engines/macventure/gui.cpp
@@ -229,9 +229,11 @@ bool Gui::decodeStartupScreen() {
 }
 
 bool Gui::decodeTitleScreen() {
+	Common::MacResManager resMan;
 	Common::Path titlePath = _engine->getFilePath(kTitlePathID);
-	if (_resourceManager->open(titlePath)) {
-		Common::SeekableReadStream *stream = _resourceManager->getResource(MKTAG('P', 'P', 'I', 'C'), 0);
+
+	if (resMan.open(titlePath)) {
+		Common::SeekableReadStream *stream = resMan.getResource(MKTAG('P', 'P', 'I', 'C'), 0);
 
 		if (stream) {
 			// New PPICT title screen




More information about the Scummvm-git-logs mailing list