Jump to content

Text Book

From HedgeDocs
Revision as of 09:47, 3 December 2025 by Hyper (talk | contribs)

Text Book is a file format used in Sonic the Hedgehog (2006) for storing text with friendly names and variables.

These files are located in cache.arc and text.arc under the ./text/ directory from platform root as *.mst files.

Specification

Text Book uses a Binary Resource container. The text to be displayed is encoded as UTF-16, whereas the names and variables are encoded as Shift-JIS.

Header

The header consists of the following data structure:

Length: 0x0C
Offset Type Name Description
0x00 Char[4] Signature Always "WTXT" (referring to UTF-16).
0x04 UInt32 NameOffset The offset of the name of this Text Book.
0x08 UInt32 CardCount The total number of Text Cards in this Text Book.

Text Card

Text Cards consist of the following data structure:

Length: 0x0C
Offset Type Name Description
0x00 UInt32 NameOffset The offset of the name of this Text Card.
0x04 UInt32 TextOffset The offset of the UTF-16 text for this Text Card.
0x08 UInt32 VariablesOffset The offset of the variables for this Text Card.

Variables

Variables are stored as comma-separated values, there should be one for each '$' character in the actual text to be displayed.

Variable Description Parameters
blue Once encountered, starts colouring characters blue. None
color Once encountered, starts colouring characters white. None
color! Once encountered, starts colouring characters yellow. Presumably this is meant as the "warning" colour, hence the exclamation mark. None
gray Once encountered, starts colouring characters grey. None
green Once encountered, starts colouring characters green. None
picture Once encountered, draws the specified picture defined in the game's Text Font Picture file. String
red Once encountered, starts colouring characters red. None
rgba Once encountered, starts colouring characters the specified colour. Despite the name, this does not support setting the alpha colour of the text. Byte, Byte, Byte
sound Once encountered, plays the specified sound effect if the Sound Bank containing it is loaded. String
text Unknown. Unknown
value Unknown. Unknown
yellow Once encountered, starts colouring characters yellow. None

For example, with the following text:

$The quick $brown$ fox jumps over the $lazy$ dog.\nPress the $ button to continue.

And the following variables:

sound(all01_a00_sn),rgba(127,51,0),color,red,color,picture(button_a)

The game should first play the sound all01_a00_sn, then draw something akin to the following text:

The quick brown fox jumps over the lazy dog. Press the button to continue.

Cookies help us deliver our services. By using our services, you agree to our use of cookies.