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

From ScummVM :: Wiki
< SCI
Jump to navigation Jump to search
m (Update TODOs)
m (Update TODOs)
Line 14: Line 14:


* Upscale native Mac cursors when/if appropriate.
* Upscale native Mac cursors when/if appropriate.
* Implement kPlatform Mac subops for saving and restoring in Lighthouse and Mother Goose.
* Implement kPlatform Mac subops for saving and restoring in Lighthouse.
* Implement, or workaround, kPlatform Mac subop 12 for setting music volume (Phantasmagoria only)
* Implement, or workaround, kPlatform Mac subop 12 for setting music volume (Phantasmagoria only)
* Handle Macintosh black and white palette entries correctly (0 is white, 255 is black)
* Update kernel tables and tests to handle that Mac versions of SCI_VERSION_3 games are SCI_VERSION_2_1_LATE (separate script and hunk)
* Games seem too dark
* Games seem too dark
* Add engine support for standard MIDI files (SQ6 only)
* Add engine support for standard MIDI files (SQ6 only)
Line 52: Line 54:
|MOTHERGOOSE HI-RES
|MOTHERGOOSE HI-RES
|
|
* Requires kPlatform 0 6,7,8,9,10,11 subops for saving and loading, prevents booting
* Music isn't playing, though the sound resource appears to be.
* kSetLanguage only handles PC directory/resource structure, prevents booting
|-
|-
|PHANTASMAGORIA
|PHANTASMAGORIA
Line 84: Line 85:
|
|
* Determine how to name/detect the multi-disc Data files
* Determine how to name/detect the multi-disc Data files
* kFileIOWriteWord signature mismatch when saving
* kFileIOWriteWord signature mismatch when saving, kernel table expects this to be an SCI3 game
* Credits don't display (Mac black/white palette mapping)
* Credits don't display (Mac black/white palette mapping)
|-
|-
Line 99: Line 100:
* 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.
* 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.
* 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.
* Mother Goose uses subops 6, 7, 8, 9, 10, and 11 for saving and restoring. 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.
* Phantasmagoria sets the music volume from the control panel with subop 12 and passes a volume parameter between 0 and 15.

Revision as of 22:49, 5 May 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

  • Upscale native Mac cursors when/if appropriate.
  • Implement kPlatform Mac subops for saving and restoring in Lighthouse.
  • Implement, or workaround, kPlatform Mac subop 12 for setting music volume (Phantasmagoria only)
  • Handle Macintosh black and white palette entries correctly (0 is white, 255 is black)
  • Update kernel tables and tests to handle that Mac versions of SCI_VERSION_3 games are SCI_VERSION_2_1_LATE (separate script and hunk)
  • Games seem too dark
  • Add engine support for standard MIDI files (SQ6 only)
  • Verify accuracy of music playback

SCI32 Mac Games

Game Blockers
GK1
  • Testing, the game seems playable.
KQ7
  • Credits don't display (Mac black/white palette mapping)
LSL6 HI-RES
  • Testing, the game seems playable.
PQ4
  • Testing, the game seems playable.
GK2
  • Determine how to name/detect the multi-disc Data files
HOYLE5
  • Testing, the game seems playable.
MOTHERGOOSE HI-RES
  • Music isn't playing, though the sound resource appears to be.
PHANTASMAGORIA
  • Determine how to name/detect the multi-disc Data files
SHIVERS
  • Testing, the game seems playable.
SQ6
  • Music stored in resource fork of "Midi Library" as standard MIDI files
TORIN
  • Testing, the game seems playable.
LSL7
  • Testing, the game seems playable.
LIGHTHOUSE
  • Script crash when starting new game
  • 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
  • kFileIOWriteWord signature mismatch when saving, kernel table expects this to be an SCI3 game
  • Credits don't display (Mac black/white palette mapping)
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. 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.