SCI/SCI32 Mac Support Status

From ScummVM :: Wiki
< SCI
Revision as of 04:59, 29 January 2020 by Sluicebox (talk | contribs) (Sluicebox moved page SCI32 Mac Support Status to SCI/SCI32 Mac Support Status: Added "SCI" prefix so that it will be a subpage)
Jump to navigation Jump to search

Status

This page is an attempt to track the state of ScummVM support for SCI32 Mac games. They are not supported yet. The work stalled for several years and it is unclear how much is left to do. I (sluicebox) gathered most of the Mac games to determine their current blockers. In the process I found several easy fixes that got some games to boot and play audio for the first time. Many of the others are one or two issues away from booting. We could be closer than we think.

Data Files

Extracting data files from SCI32 Macintosh CDs is particularly difficult. Unless a reasonable method is discovered and documented, it seems unlikely that the average user will be able to take advantage of ScummVM support.

Extracting Macintosh files is already complicated by resource and data forks. SCI resources are in the resource fork and many users have trouble with just that part. It's often necessary to use a real or emulated classic Macintosh at some point in the process. SCI32 CDs complicate this further by setting the Hidden flag on files and directories. The Macintosh Hidden file system flag is like the Windows one in that it prevents a file from appearing in Finder. The difference is that Macintosh has no Show Hidden Files setting. Instead, third party programs such as File Buddy must be used to reveal and copy these otherwise invisible files. Sierra hid all files that didn't need to be copied to the hard disk, which is all of the media files and most of the data files. As a final complication, some data files were duplicated between these hidden directories and the visible ones, and different data files use the same name on different CDs.

There is also a performance problem that needs to be solved for SCI32 Mac games. The CD versions contain as many as ten thousand media files which slows the loader to a crawl when starting a game. Each audio resource is in its own file instead of a resource volume and the loader is doing work on each.

General TODOs

  • Fix "Failed to initialize sound driver!" error when loading SCI2.1+ games (see patch below for bypassing this)
  • Implement save and restore for games that use native Macintosh file dialogs. (I almost finished this a while ago, will resume...)
  • Fix screen items not being cleared when restoring
  • Fix palette handling. Games either have corrupt palettes at startup or soon afterwards.
  • Use correct kDoSound subop numbers. Mac versions of SCI2.1 Middle and later continue using older subop numbers.
  • Implement support for Mac color cursors. They are currently black and white and not upscaled.
  • Reverse engineer outstanding kPlatform subops and verify the existing implementation.
  • Games seem too dark
  • Verify accuracy of music playback

SCI32 Mac Games

Game Blockers
GK1
  • Palette corruption after a while.
  • Native Mac save/restore dialogs.
KQ7
  • Most main menu buttons don't work.
  • Introduction movie (QuickTime) fails an assertion.
  • Uses a kPlatform subop to open a native Mac file dialog prompting "Who's game?" [sic]
LSL6 HI-RES
  • Palette corruption.
  • Native Mac save/restore dialogs.
PQ4
  • Palette corruption.
  • Introduction error about too many screen items.
  • Native Mac save/restore dialogs.
GK2
  • "Failed to initialize sound driver!"
  • Palette corruption.
  • Native Mac save/restore dialogs.
HOYLE5
  • "Failed to initialize sound driver!"
  • Wrong kDoSound subops.
MOTHERGOOSE HI-RES
  • "Unknown kMacPlatform(9)" after Sierra logo.
PHANTASMAGORIA
  • "Failed to initialize sound driver!"
  • "kArrayFill signature mismatch"
SHIVERS
  • "Failed to initialize sound driver!"
  • Wrong kDoSound subops.
SQ6
  • "Failed to initialize sound driver!"
  • Wrong kDoSound subops.
  • Native Mac save/restore dialogs.
TORIN
  • "Failed to initialize sound driver!"
LSL7
  • "Failed to initialize sound driver!"
LIGHTHOUSE
  • "Failed to initialize sound driver!"
  • Lite:init sends to non-script object.
  • Native Mac save/restore dialogs.
RAMA
  • TODO
PQSWAT
  • "Failed to initialize sound driver!"
  • Wrong kDoSound subops.

"Failed to initialize sound driver!"

The "Failed to initialize sound driver!" error occurs within SciMusic::init. You can temporarily bypass that with this patch:

--- a/engines/sci/sound/music.cpp
+++ b/engines/sci/sound/music.cpp
@@ -74,6 +74,8 @@ void SciMusic::init() {
 #ifdef ENABLE_SCI32
        if (g_sci->_features->generalMidiOnly()) {
                deviceFlags = MDT_MIDI;
+       } else if (platform == Common::kPlatformMacintosh) {
+               deviceFlags = MDT_MIDI;
        } else {
 #endif
                deviceFlags = MDT_PCSPK | MDT_PCJR | MDT_ADLIB | MDT_MIDI;

...Or even better, you could figure out what it's supposed to do! =)