Difference between revisions of "SCI/SCI32 Mac Support Status"

From ScummVM :: Wiki
< SCI
Jump to navigation Jump to search
(Updated with kPlatform info and latest status)
(Updates to TODO items and blockers)
Line 13: Line 13:
==General TODOs==
==General TODOs==


* Fix "Failed to initialize sound driver!" error when loading SCI2.1+ games (see patch below for bypassing this)
* Fix screen items not being cleared when restoring
* Fix palette handling. Games either have corrupt palettes at startup or soon afterwards.
* 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.
* Implement support for Mac color cursors. They are currently black and white and not upscaled.
* Implement kPlatform Mac subops for saving and restoring in KQ7, Shivers, Lighthouse, and Mother Goose.
* Implement kPlatform Mac subops for saving and restoring in KQ7, Shivers, Lighthouse, and Mother Goose.
Line 31: Line 28:
|GK1
|GK1
|
|
* Palette corruption after a while.
* Testing, the game is playable.
|-
|-
|KQ7
|KQ7
Line 40: Line 37:
|LSL6 HI-RES
|LSL6 HI-RES
|
|
* Palette corruption.
* Testing, the game is playable.
|-
|-
|PQ4
|PQ4
Line 49: Line 46:
|GK2
|GK2
|
|
* "Failed to initialize sound driver!"
* Palette corruption.
* Palette corruption.
* Video files don't play. VLC can't play the Mac videos. Possible endian issue.
* Out of bounds assertion when playing AIFF audio.
* Determine how to name/detect the multi-disc Data files
|-
|-
|HOYLE5
|HOYLE5
|
|
* "Failed to initialize sound driver!"
* Palette corruption.
* Wrong kDoSound subops.
|-
|-
|MOTHERGOOSE HI-RES
|MOTHERGOOSE HI-RES
|
|
* Requires kPlatform 0 6,7,8,9,10,11 subops for saving and loading, prevents booting
* Requires kPlatform 0 6,7,8,9,10,11 subops for saving and loading, prevents booting
* Palette corruption.
|-
|-
|PHANTASMAGORIA
|PHANTASMAGORIA
|
|
* "Failed to initialize sound driver!"
* Palette corruption.
* "kArrayFill signature mismatch"
* Out of bounds assertion when playing AIFF audio.
* Requires a kPlatform subop for setting music volume (see below)
* Determine how to name/detect the multi-disc Data files
|-
|-
|SHIVERS
|SHIVERS
|
|
* "Failed to initialize sound driver!"
* Wrong kDoSound subops.
* Requires kPlatform subops for saving and loading (see below)
* Requires kPlatform subops for saving and loading (see below)
|-
|-
|SQ6
|SQ6
|
|
* "Failed to initialize sound driver!"
* Palette corruption.
* Wrong kDoSound subops.
* Audio assertion when clicking a main menu item.
|-
|-
|TORIN
|TORIN
|
|
* "Failed to initialize sound driver!"
* Lip sync not animating, log reports missing sync resources
|-
|-
|LSL7
|LSL7
|
|
* "Failed to initialize sound driver!"
* Saving/restoring crashes, kScummVMSaveLoad script patch not applied correctly
|-
|-
|LIGHTHOUSE
|LIGHTHOUSE
|
|
* "Failed to initialize sound driver!"
* Lite:init errors
* Lite:init errors
* Requires kPlatform subops for saving and loading (see below)
* Requires kPlatform subops for saving and loading (see below)
* Determine how to name/detect the multi-disc Data files
|-
|-
|RAMA
|RAMA
|
|
* "Failed to initialize sound driver!"
* Determine how to name/detect the multi-disc Data files
|-
|-
|PQSWAT
|PQSWAT
|
|
* "Failed to initialize sound driver!"
* Determine how to name/detect the multi-disc Data files
* 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:
<syntaxhighlight lang="diff">
--- 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;
</syntaxhighlight>
...Or even better, you could figure out what it's supposed to do! =)


== kPlatform subops ==
== kPlatform subops ==

Revision as of 21:47, 7 February 2020

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 palette handling. Games either have corrupt palettes at startup or soon afterwards.
  • Implement support for Mac color cursors. They are currently black and white and not upscaled.
  • Implement kPlatform Mac subops for saving and restoring in KQ7, Shivers, Lighthouse, and Mother Goose.
  • Implement, or workaround, kPlatform Mac subop 12 for setting music volume (Phantasmagoria only)
  • Games seem too dark
  • Verify accuracy of music playback

SCI32 Mac Games

Game Blockers
GK1
  • Testing, the game is playable.
KQ7
  • Requires kPlatform subops for saving and loading (see below)
  • Intro and other movies require QuickTime to be implemented in video player
LSL6 HI-RES
  • Testing, the game is playable.
PQ4
  • Palette corruption.
  • Introduction error about too many screen items.
GK2
  • Palette corruption.
  • Video files don't play. VLC can't play the Mac videos. Possible endian issue.
  • Out of bounds assertion when playing AIFF audio.
  • Determine how to name/detect the multi-disc Data files
HOYLE5
  • Palette corruption.
MOTHERGOOSE HI-RES
  • Requires kPlatform 0 6,7,8,9,10,11 subops for saving and loading, prevents booting
  • Palette corruption.
PHANTASMAGORIA
  • Palette corruption.
  • Out of bounds assertion when playing AIFF audio.
  • Determine how to name/detect the multi-disc Data files
SHIVERS
  • Requires kPlatform subops for saving and loading (see below)
SQ6
  • Palette corruption.
  • Audio assertion when clicking a main menu item.
TORIN
  • Lip sync not animating, log reports missing sync resources
LSL7
  • Saving/restoring crashes, kScummVMSaveLoad script patch not applied correctly
LIGHTHOUSE
  • Lite:init errors
  • Requires kPlatform subops for saving and loading (see below)
  • Determine how to name/detect the multi-disc Data files
RAMA
  • Determine how to name/detect the multi-disc Data files
PQSWAT
  • Determine how to name/detect the multi-disc Data files

kPlatform subops

kPlatform supports a handful of miscellaneous Mac-specific sub operations. The SCI32 ones are different than SCI16, and some changed between SCI32 versions. I have decompiled and audited all kPlatform calls in all SCI32 Mac scripts, so this is a complete list of who uses what outstanding operations:

  • KQ7 does custom saving and restoring with subops 3, 4, and 5 to initiate, save, and restore files. Initiate is called when starting a new game. Initiate and Restore would display a native Mac save or open dialog with a hard-coded and misspelled prompt such as "Who's game?". The interpreter would remember the current save file, not the game scripts. These subops take no parameters.
  • Shivers also does custom saving and restoring with subops 3, 4, and 5 but they take parameters similar to the normal kSave and kRestore functions. It appears the interpreter is no longer in charge of tracking the current save file.
  • Lighthouse also does custom saving and restoring but just for fun it only uses subop 3 but adds a sub-subop parameter for the three operations. It appears that -1 initializes, 1 saves, and 0 restores.
  • Mother Goose uses subops 6, 7, 8, 9, 10, and 11 for saving and restoring. This includes delete functionality. These subops take parameters similar to kSave and kRestore.
  • Phantasmagoria sets the music volume from the control panel with subop 12 and passes a volume parameter between 0 and 15.