HeroQuest Strings Format
The .BIN files in HeroQuest are used to store any in-game text in the game that is not contained inside the QUESTxx.BIN files.
These are the files that do not have the "QUEST##.BIN" format.
It is basically an LZW compressed archive with the pointer section on the top and a block containing all the text formatted to fit the scroll graphic.
Each message in the game is written onto a scroll. Both the text and the scroll are drawn relative to the 18×27 (hex values) matrix screen. 00 00 is top left, 18 27 is bottom right.
The following header precedes each text in the language file:
05 05 14 07 0D 09 6B 35 00 00 FF FF 11 05 05 | | | | | | | / | | | / | | | | | | | | | |/ | | |/ 11 Y X First line header | | | | | | | | | fixed code | | | | | | | means no second option | | | | | | "1st option" string pointer (usually "OK") | | | | X Y "1st option" string position | | | Scroll height (UPPER ROLL + TEXT LINES + LOWER ROLL) | | Scroll lenght (lenght changes only on even values 1A, 1C etc.) X Y Scroll's top-left position
The pointers in the first block of the files points directly to the first byte of the above header in case of "text in a scroll". For normal labels (like Strenght potion) the pointer marks the first letter of the label.
The "first option" is in the most cases, OK, CANCEL, CONGRATULATIONS. There are some occasions when the game asks the player to choose between two options; the second option is injected between those two zeroes in the exact same fashion of the first option: 4 bytes (X,Y,pointer).
The Line header precedes each following line of the box. the start position coordinates can be adjusted at will.
The language.bin files must be recompressed to be accepted as proper file, though a dummy-compression is sufficient.
Research credits
- The compression was figured out by Shelwien from encode.su forum
- TheRuler from the OldGamesItalia translation project mapped the format of the strings files.