Old Mohawk archive format
Some of the very old Mohawk games do not use exactly the same format as the rest of the Mohawk games. However, it's really the same thing minus the MHWK headers and the resource table/file table merging. In fact, many of the games using the older format were just ported directly into Mohawk files later with only minor changes.
The files are have the extension .ibm or .mac, being PC and Mac versions, respectively. The biggest difference between these two are endianness, but there are some other minor differences as well. Throughout this, I will use the same wording as the regular archive format to show where the differences are. The Name Table is always missing here, but it looks like they left room for it, hence the u0 in each type table entry.
Contents
Windows Format (.ibm)
All values are in Little Endian format. Including the FourCC's! This is important so that it matches up.
Header
unsigned long | absolute offset of the Resource Dir |
unsigned short | size of Resource Dir (analogous to the size of the File table) |
The offset of the resource directory seems to be always 6.
Type Table
At the beginning of the Resource Dir is the Type table.
unsigned short | number of resource types in this file |
Entry (one for each type):
4 bytes | resource type (BMAP, WAV (with a space), VRSN etc.) |
unsigned short | offset in Resource Dir of the Resource Table for this type |
unsigned short | u0 |
The offset is the offset within the Resource Dir, not the absolute offset. u0 appears to always be 0.
Resource Table
Header:
unsigned short | number of resources for this type (number of table entries) |
Entry:
unsigned short | resource ID |
unsigned long | absolute offset of resource data block |
unsigned short | resource data size |
unsigned long | u0 |
This circumvents having the file table, as it stores the offset and length here. u0 appears to always be 0.
Macintosh Format (.mac)
All values are in Big Endian format.
Header
unsigned long | absolute offset of the Resource Dir |
unsigned short | size of Resource Dir (analogous to the size of the File table) |
The offset of the resource directory seems to be always 6.
Type Table
At the beginning of the Resource Dir is the Type table.
unsigned short | number of resource types in this file |
Entry (one for each type):
4 bytes | resource type (BMAP, WAV (with a space), VRSN etc.) |
unsigned long | offset in Resource Dir of the Resource Table for this type |
unsigned long | u0 |
The offset is the offset within the Resource Dir, not the absolute offset. u0 appears to always be 0.
Resource Table
Header:
unsigned short | number of resources for this type (number of table entries) |
Entry:
unsigned short | resource ID |
unsigned long | absolute offset of resource data block |
byte | resource data size, bits 23-16 |
unsigned short | resource data size, bits 15-0 |
unsigned long | u0 |
byte | u1 |
This circumvents having the file table, as it stores the offset and length here. u0 and u1 appear to always be 0. u1 is probably for alignment.