[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