|File Allocation Table (FAT)||Beginning|
The SSP format is how most files in the game Space Chase by Safari Software are stored. Different versions of the game may use different versions of this format, and the earliest known demo version does not use this format at all.
Files that the game expects to find inside the SSP archive must be stored in that archive. The game does not appear to support external files as an alternative.
There is no known signature for this format. And to make things worse, there are at least three known versions of the SSP format. And not one of them stores a version number (or anything similar) to identify which version of the format is used.
The only thing that all (known) versions of this format have in common is that they all start with a UINT16LE that defines how many file entries are used in this file. This value is followed directly by an array of UINT32LE values that store the size of each file.
This information can be used to calculate the total size of the File Allocation Table (FAT), assuming that the SSP archive has no unused bytes at the end of the file or between the files, and also assuming that there are no overlapping files. Simply sum up the size values of all the used file entries and subtract the sum from the total size of the SSP file.
Based on the size of the FAT, you can read the actual file entries as described below.
All known files in the SSP format use the following layout:
|UINT16LE||iCount||Number of file entries used|
|UINT32LE||iSizes||Size of each sub-file|
|CHAR||cNames||NULL-terminated name of each sub-file (fixed-length entries, usually padded with NULLs)|
|UINT32LE||iOffsets||Offset of each sub-file (relative to the beginning of the sub-file data!)|
|BYTE||data||Beginning of the sub-file data|
The number of file entries in each array, the length of the file names, and the length of the padding in between the blocks of data varies depending on the version of the game. Known versions of the SSP format are as follows:
|FAT size||Max. Entries||Names Start||Name Length||Offsets Start||Description|
|9478||128||514||64||8834||used in v4.00 of Episode 1|
|2334||100||402||13||1802||used in v2.14D of Episode 1|
|4534||200||802||13||3602||used in v2.00D and v2.02D of Episode 1|
The FAT size is also the offset of the beginning of the sub-file data. This value needs to be added to each value in the iOffsets array to get the actual offset within the SSP file.
- The number of used file entries should not exceed the maximum allowed by the current version of the SSP format. More than 200 file entries are not allowed in any known version of the format.
- Offset and Size of any used file entry should never exceed the size of the SSP file minus the FAT size.
While the following is true for all known archives that shipped with the games, these restrictions are not part of the file format per se. The the game will most likely still be able to read these files even if the following conditions are not met.
- The data for the sub-files is usually stored in the same order as the entries in the FAT, so all used entries in the iOffsets array should be in ascending order.
- Unused entries, as well as the padding between the blocks, are usually set to NULLs.
- File names should fit the 8.3 naming scheme.
The following tools are able to work with this game.