FF7/World Map/BSZ

From Final Fantasy Inside
< FF7

[Lazy Bastard]: Using a hex editor, I've mapped out a BSZ file, namely WM0.BSZ - Cloud's world map model. Incidentally, WM1.BSZ is Tifa's world map model, WM2.BSZ is Cid's, and WM3.BSZ seems to be every other world map model, similar to a BSX in fields (though I haven't confirmed this yet).

There is a remarkable resemblance here to BCX format, so I should be able to create custom world map models fairly soon, using the same techniques I used in fields. [Update: I did just that; see Qhimm.com forum threads]

Akari: Perhaps you can use this data to implement a utility and functionality in Q-Gears?

Without further ado:


______________________________________


In PSX memory, WM0.BSZ starts at 14A600 (and ends at 14F3B7). Every 80-type offset in this file can be treated as such: offset minus 8014A600 equals in-file offset.


'BSZ Header Section' [at offset 0x00000000]:



Unknown (always the same) [at offset 0x00000000]:


02 00 00 00 08 00 00 00



Relative offset from end of 'BSZ Header Section' to 'Texture Data Section' [at offset 0x00000008]:

5C 47 00 00



Offset to Model Section, Header (offset minus 0x8014A600 equals file offset) [at offset 0x00000010]:


18 A6 14 80



Relative offset from end of 'BSZ Header Section' to Unknown [at offset 0x00000014]:


54 47 00 00



Note: 'BSZ Header Section' runs until 'Model Section'.


__________________________________________


'Model Section' [at offset 0x00000018]:



'Model Section', Header [at offset 0x00000018]:


01 FF 16 0F 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 58 00 38 02 3C A6 14 80 00 00 00 00


01 FF - Unknown

16 - Number of bones

0F - Number of parts

0A - Number of animations

00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 02 58 00 - Unknown

38 02 - Total data size of bones+parts (little-endian, so 0x0238)

3C A6 14 80 - Offset to 'Model Section', Bones (little-endian, so 0x8014A63C)

00 00 00 00 - Unknown



Note: 'Model Section', Header runs until 'Model Section', Bones.



______________________________


'Model Section, Bones' [at offset 0x0000003C]:



00 00 FF 00 00 00 00 01 CB FF 01 01 7B FF 02 01 CB FF 01 00 82 FF 04 00 BA FF 05 01 B7 FF 06 01 74 FF 07 01 CB FF 01 00 82 FF 09 00 BA FF 0A 01 B7 FF 0B 01 74 FF 0C 01 00 00 00 00 C4 FF 0E 01 4F FF 0F 01 39 FF 10 01 00 00 00 00 C4 FF 12 01 4F FF 13 01 39 FF 14 01



Note: 'Model Section', Bones runs until 'Model Section', Parts.



___________________________________



'Model Section, Parts' [at offset 0x00000094]:


01 01 0E 00 00 00 00 00 00 00 0C 06 00 00 74 00 AC 01 AC 01 AC 01 28 02 14 A9 14 80 00 00 00 00 01 02 20 00 00 00 00 00 00 00 06 1B 00 00 04 01 80 03 80 03 80 03 74 04 C0 AA 14 80 00 00 00 00 01 03 5A 0C 02 06 00 00 00 00 96 0D 03 08 D4 02 EC 0D E0 0D 04 0E 94 13 40 AE 14 80 00 00 00 00 01 06 10 00 00 00 00 00 00 00 0A 09 00 00 84 00 D8 01 D8 01 D8 01 5C 02 4C BC 14 80 00 00 00 00 01 07 10 00 00 00 00 00 00 00 00 0E 00 00 84 00 9C 01 9C 01 9C 01 F8 01 24 BE 14 80 00 00 00 00 01 08 08 00 00 00 00 00 00 00 00 06 00 00 44 00 BC 00 BC 00 BC 00 D8 00 C0 BF 14 80 00 00 00 00 01 0B 10 00 00 00 00 00 00 00 0A 09 00 00 84 00 D8 01 D8 01 D8 01 5C 02 7C C0 14 80 00 00 00 00 01 0C 10 00 00 00 00 00 00 00 00 0E 00 00 84 00 9C 01 9C 01 9C 01 F8 01 54 C2 14 80 00 00 00 00 01 0D 08 00 00 00 00 00 00 00 00 06 00 00 44 00 BC 00 BC 00 BC 00 D8 00 F0 C3 14 80 00 00 00 00 01 0F 0A 00 00 00 00 00 00 00 08 04 00 00 54 00 24 01 24 01 24 01 70 01 AC C4 14 80 00 00 00 00 01 10 15 00 00 00 00 00 00 00 04 0E 00 00 AC 00 04 02 04 02 04 02 68 02 D0 C5 14 80 00 00 00 00 01 11 0A 00 00 00 00 00 00 00 02 07 00 00 54 00 00 01 00 01 00 01 34 01 D4 C7 14 80 00 00 00 00 01 13 0A 00 00 00 00 00 00 00 08 04 00 00 54 00 24 01 24 01 24 01 70 01 D4 C8 14 80 00 00 00 00 01 14 15 00 00 00 00 00 00 00 04 0E 00 00 AC 00 04 02 04 02 04 02 68 02 F8 C9 14 80 00 00 00 00 01 15 0A 00 00 00 00 00 00 00 02 07 00 00 54 00 00 01 00 01 00 01 34 01 FC CB 14 80 00 00 00 00


Breakdown of first line of 'Model Section', Parts above:

01 - Unknown; "0 - not calculate stage lighting and color. 1 - calculate."

01 - Bone to which this part is attached to

0E - Number of vertices

00 - Number of Texture coord

00 - number of textured quads (Gourad Shading)

00 - number of textured triangles (Gourad Shading)

00 - number of textured quads (Flat Shading)

00 - number of textured triangles (Flat Shading)

00 - number of monochrome triangles

00 - number of monochrome quads

0C - number of gradated triangles

06 - number of gradated quads

00 00 - number of data in block 4 (flags)

74 00 - Relative offset to ?

AC 01 - Relative offset to ?

AC 01 - Relative offset to texture settings. Indexed by 5th block data (control)

AC 01 - Relative offset to one byte stream for every packet with texture

28 02 - Relative offset to ?

14 A9 14 80 - Offset to skeleton data section (little-endian, so 0x8014A914)

00 00 00 00 - Offset to ?



Note: 'Model Section', Parts runs until 'Model Section', Animations.


_______________________________________




'Model Section', Animations [at offset 0x00000274]:


01 00 16 00 02 00 B4 00 B4 00 B8 00 FC CC 14 80 0F 00 16 01 01 20 B4 00 D2 00 D4 00 B4 CD 14 80 14 00 16 03 00 26 B4 00 2C 01 2C 01 68 D0 14 80 18 00 16 03 00 33 B4 00 44 01 44 01 8C D4 14 80 0F 00 16 03 00 39 B4 00 0E 01 0E 01 98 DA 14 80 0F 00 16 03 00 34 B4 00 0E 01 0E 01 00 DF 14 80 1E 00 16 00 02 1E B4 00 B4 00 B8 00 1C E3 14 80 1E 00 16 00 02 01 B4 00 B4 00 B8 00 58 E7 14 80 0F 00 16 02 00 2A B4 00 F0 00 F0 00 30 E8 14 80 06 00 16 01 02 2B B4 00 C0 00 C4 00 98 EB 14 80



Note: In CLOUD.BCX, the above would be the end of the file. In this format, however, the Model Section

(with all its components) comes before actual parts/animations data, after which is texture data, which

comprises the remainder of the file.



Note: 'Model section', Animations runs into 'Skeleton Data Section'.



___________________________