Space Quest V Font
Format type | Font |
---|---|
Max glyph count | 256 |
Minimum glyph size (pixels) | 0×0 |
Maximum glyph size (pixels) | 255×255 |
Access mode | Indexed |
Metadata? | None |
Bitmap glyphs? | Yes |
Vector glyphs? | No |
Compressed glyphs? | No |
Hidden data? | Yes |
Games |
While Space Quest V is a Sierra/Dynamix game, its font format does not resemble the older fonts in any way; there is no "FNT:" header and no header arrays for the font dimensions, and it does not support 8-bit graphics. For that reason, it is not classified as v7, but simply as "Space Quest V font".
The font is a 1-bpp font with a header that, besides some general formatting and identifying bytes, contains three UINT16LE values; one that is always 0 but which may be the start symbol, another that specifies the amount of symbols, and a third that more or less corresponds to the font's height.
It has an index referencing all the symbol data. Each block of symbol data is comprised of two bytes indicating the width and height, followed by the actual 1-bpp image data.
Header
Offset | Data type | Name | Description |
---|---|---|---|
0x00 | UINT8 | FileId | Identifying byte. Always 0x87. |
0x01 | UINT8 | HeaderStart | Start of the header data, relative to the pointer after reading the two previous bytes. Seems to always be set to 0x20, making the actual header start at 0x22. |
0x02 | UINT8[HeaderStart] | Junk | For some reason the header skips 20 bytes here. The data in this part appears to be a cut-off duplicate of the real data at offset 0x22. It has not been tested whether the game reads the three header values from this version or from the later one, but given the fact the symbols index is relative to the start of the header data at 0x22, and starts 0x06 bytes after that, this is probably just junk. Still, to be sure, you could duplicate the three values below at this position when writing the format. |
0x02+HeaderStart | UINT16LE | StartSymbol? | May be the start symbol, but it's 0x00 in all existing fonts. Needs testing. |
0x02+HeaderStart+0x02 | UINT16LE | NrOfSymbols | Number of symbols. Is 0x80 in all official fonts, but can probably be changed. |
0x02+HeaderStart+0x04 | UINT16LE | Height? | Unsure. This usually more or less corresponds to the maximum height found in the font, but in some cases there are symbols with a larger height. It does not appear to be a "base line" Y-offset; the value never matches the most common lowest pixel Y coordinate of the characters. |
0x02+HeaderStart+0x06 | UINT16LE[NrOfSymbols] | SymbolsIndex | Index of offsets for the actual symbol data. The offsets are relative to the start point of the header, meaning 0x02+HeaderStart needs to be added to each value.
|
As with any format that references its data through an index, duplicate symbols can be removed from the data to save space.
Symbol data
The symbol data, as referenced by the symbols index, contains blocks in the following format:
Offset | Data type | Name | Description |
---|---|---|---|
0x00 | UINT8 | SymbolWidth | Symbol width. |
0x04 | UINT8 | SymbolHeight | Symbol height. |
0x08 | BYTE[] | SymbolData | Symbol data. Each line should have a stride of stride = ((SymbolWidth + 7) / 8) bytes long, making the full size of a symbol data block stride * SymbolHeight .
|
Tools
The following tools are able to work with files in this format.
Name | Platform | View images in this format? | Convert/export to another file/format? | Import from another file/format? | Access hidden data? | Edit metadata? | Notes |
---|---|---|---|---|---|---|---|
Westwood Font Editor | Windows | Yes | Yes | Yes | No | N/A |