BMG files are the jnlib file format for storing text strings. The BMG file header is as follows:

||Offset||Type||Meaning
| 0x00   | u32 | File signature. {{"MESG"}} for BMG files.
| 0x04   | u32 | File type. {{"bmg1"}} for BMG files.
| 0x08   | u32 | File size
| 0x0C   | u32 | Number of data blocks.
| 0x10   | u8  | Character set. Can be narrow character (1), wide character (2), Shift-JIS (3), or UTF-8 (4).
| 0x11   | u8[[0xF] | Unused?

The BMG file is composed of multiple data blocks. These are {{INF1}}, {{MID1}}, {{DAT1}}, {{STR1}}, {{FLW1}}, and {{FLI1}}. The data blocks have a common header structure:

||Offset||Type||Meaning
| 0x00   | char[[4] | Tag
| 0x04   | u32 | Block size, including this header.

!!INF1 Block

The {{INF1}} (info) block stores basic info about the BMG file. It takes the following structure:

||Offset||Type||Meaning
| 0x00   | u16 | Number of entries
| 0x02   | u16 | Size of entry (always 4?)
| 0x04   | u16 | Group ID
| 0x06   | u8  | Color ID
| 0x07   | u8  | 
| 0x08   | u32[[...] | Offsets to strings. This is a list of offsets into the {{DAT1}} block.

!!MID1 Block

!!DAT1 Block

The {{DAT1}} block stores message data. This block is an unstructured string pool referenced by the offset array in the {{INF1}} block.

!!STR1 Block

!!FLW1 Block

!!FLI1 Block