ReMyst

This page documents my progress in understanding how Mohawk engine works, which powers the Windows version of the Myst classic. The ultimate goal is to reimplement the engine in C using SDL library.

Tools provided here are built in part upon information obtained by reverse engineering efforts of Tito Dal Canton and others, notably MHWK archive structure specification and WDIB compression algorithm description.

Source code is available under the terms of GNU General Public License. Download the source tarball.

mhwk

Mohawk archive resource dumper.

Three modes of operation are supported:

  1. List all types in Mohawk archive.
  2. List all resources of the specified type.
  3. Dump specified resource of the specified type to standard output.

The following will produce hex dump of resource of type RLST with id 4709 and feed it through less pager:

$ mhwk myst.dat ~RLST ~4709 | hexdump -C | less

When invoked without arguments, program will output more detailed usage instructions.

wdib

Filter-like utility for decompressing resources of type WDIB into BMP images.

The following will use gm program to display WDIB image stored in Mohawk archive:

$ mhwk myst.dat ~WDIB ~4709 | wdib | gm display -

rlst

Parses RLST records and outputs them in textual form. All record types encountered in Myst ages are correctly parsed (although meaning of some particular fields is not well understood yet).

Example:

$ mhwk stone.dat ~RLST ~2161 | rlst

TODO: write proper specification of the format, not just C code!

nav

A combination of the above untilities in form of the graphical Myst world navigation application based on SDL library. Data sets from both Myst and Myst Masterpiece Edition are supported (although native PICT images are not yet supported in the latter case).

Usage instructions:

  1. Choose Mohawk archive to explore and pass it as the first argument to nav.
  2. Navigate freely through the selected age (without considering any game state) using left mouse button.
  3. Toggle visualisation of RLST records as colored rectangles by pressing R key.
  4. Toggle fullscreen/windowed mode by pressing F key.
  5. Dump arbitrary RLST records to standard output by clicking right mouse button.

Screenshots:

nav1 nav2
nav3 nav4