Values in INF1 section, aka "info" property - epichickensoup/honoruty GitHub Wiki
The INF1 section of the binary message.bmg file in Super Mario Galaxy 1 consists of as many 12 byte long entries as there are messages (The number of messages, or more precisely, the number of INF1 entries, is indicated by a 16-bit integer 4 bytes after the end of the string "INF1". In the vanilla file, this is 2464 messages.)
The 12 bytes, which are in fact documented by struct.tbl
through mostly unknown hashes:
0x00 | 32 bit int | Offset into the DAT1 section of the message's text
0x04 | single byte | Never goes higher than 16. If its value is 1, the next byte will not be 0
0x05 | single byte | unknown
0x06 | single byte | Sound (officially "mSound")
0x07 | single byte | unknown
0x08 | single byte | "Shout"
0x09 | single byte | Text box style
0x0a | single byte | Pertains to message areas, often FF
0x0b | single byte | unknown, often FF
The pointer to the DAT1 data will sometimes point to a null character (0x0000) in which case the message is empty. If the pointer is 0, the message will always be blank; however, some blank messages point to a "random" null character elsewhere in the DAT1 data. xml2bmg points all blank messages to 0 (and thus a reconverted BMG will never be the same byte-for-byte).
The "info" value in the XML file currently consists of 8 numbers in parentheses separated by commas. These are the last 8 bytes of every INF1 entry. This is what they mean:
- First number - Unknown.
- Second number - Unknown.
- Third number - Sound byte. Most of the possible values for this byte can be found in sound_ids.csv.
- 4th number - Unknown.
- 5th number - "Shout", as it is called in MSBT. Can be 0, 1, or 2: 0 = normal message, 1 = appears above head, and 2 = "trap" where message activates when close. A value of 4 is used by many blank messages; however, it does not appear functional.
- 6th number - Text box style. 4 is sign style.
- 7th number - Matches the obj_arg0 of a message area. 255 is used for "no message area."
- 8th number - Unknown, usually 255. When 0, causes the "shout" parameter to be ignored (the default behaviour 0 is used).
Thanks to Evanbowl for figuring out the purposes of the 6th and 7th bytes!