FONTFILE.RAW:

+0 - Byte offset to FONTDATA
+4 - FONTLOOKUP

FONTLOOKUP:

+0 - Maximum character height
+4 - Average character width
+8 - CHARDEF (starting at ASCII 32)
+20 - next CHARDEF (ASCII 33)....
+20 + n*12 - all the way to ASCII (((sizeof(FONTLOOKUP)-8)/12)+32)

CHARDEF:

+0 - FONTDATA offset for this character
+4 - Width of character
+8 - Height of character

FONTDATA:

RLE data for each character offset in FONTLU



The annoyance of course is that you have to decompress each character with the RLE decompressor which seems to be causing you some trouble with dodgy offsets.

The player decompresses each character as it needs it to save run time memory overhead. This is how we suddenly acquired a more complete character set and actually saved memory (at the expense of cpu) overhead.