FF9/File/0x0A
Fields tiles header
Header size is 0x34 bytes
Offset | 0x00 | 0x02 | 0x04 | 0x06 | 0x08 | 0x0A | 0x0C | 0x10 | 0x14 | 0x18 | 0x1C-0x2f | 0x30 | 0x32 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Size | 2 bytes | 2 bytes | 2 bytes | 2 bytes | 2 bytes | 2 bytes | 4 bytes | 4 bytes | 4 bytes | 4 bytes | ??? bytes | 2 bytes | 2 bytes |
Description | File Size | ?????? | count of animation records | count of tiles blocks | count of ?????? | count of camera settings | pointer to animation records | pointer to tiles blocks | pointer to ?????? | pointer to camera settings | ?????? | Number used for calculating position of blocks [1*] | Number used for calculating position of blocks [2*] |
Animation records
At this place defined animated sequences.
Each record size is 0x10 bytes.
Each record contain frames count information and pointer to sequences.
Structure:
Offset | 0x00 | 0x01 | 0x02-0x0B | 0x0C |
---|---|---|---|---|
Size | 1 byte | 1 byte | ??? bytes | 4 bytes |
Description | ??? Type ??? | Frames Count | ?????? | Pointer to sequences |
Sequences is the id`s of tiles blocks. Sequences consists of that records, count = frames count of this sequence.
One record Staructure:
1 byte | 1 byte |
---|---|
Block ID | ???Type??? |
Tile Blocks
In tile blocks records storage information about number of tiles, offset`s of block, and other. Many information are unknown.
Knowed structure:
Offset | 0x00 | 0x01 | 0x04-0x0B | 0x0C | 0x0E | 0x10-0x17 | 0x18 | 0x1A | 0x1C-0x23 | 0x24 | 0x26 | 0x28 | 0x2C | 0x30 | 0x34-0x38 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Size | 1 byte | 3 byte | ?????? | 2 bytes | 2 bytes | ?????? | 2 bytes | 2 bytes | ?????? | 2 bytes | 2 bytes | 4 Bytes | 4 Bytes | 4 Bytes | ?????? |
Size | ??? TYPE ??? | Plane distance ???? | ?????? | Value for position calculating [3*] | Value for position calculating [4*] | ?????? | it`s not value, just Var. Value = [1*]+[3*] | it`s not value, just Var. Value = [2*]+[4*] | ?????? | TileSet ID (for camera settings record) | Tiles count | Pointer to 4 bytes values (for each tile) | Pointer to 8 bytes values (for each tile) | Var, address in memory to created packet.[For PSX drawning loop]. | ?????? |
One file can contain more than one field, for separating blocks used TileSet ID. And for each field exists camera settings.
When gane engine drawning block, he reading tiles count, and reads information needed for creating packets for GPU from 4 bytes and 8 bytes values.
4 bytes values:
Offset | 0x00-0x0B bits | 0x0C-0x15 bits | 0x16-0x1f bits |
---|---|---|---|
Size | 12 bits | 10 bits | 10 bits |
Description | Not used, or zero ???? | local coordinate Y, from block position | local coordinate X, from block position |
Camera Settings
In asm i found hard coded values:
OFX Screen offset X = 0xA00000
OFY Screen offset Y = 0x700000
Structure of one record:
Header size is 0x34 bytes
Offset | 0x00 | 0x02 | 0x04 | 0x06 | 0x08 | 0x0A | 0x0C | 0x10 | 0x14 | 0x18 | 0x1C-0x2f | 0x30 | 0x32 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Size | 2 bytes | 2 bytes | 2 bytes | 2 bytes | 2 bytes | 2 bytes | 4 bytes | 4 bytes | 4 bytes | 4 bytes | ??? bytes | 2 bytes | 2 bytes |
Description | File Size | ?????? | count of animation records | count of tiles blocks | count of ?????? | count of camera settings | pointer to animation records | pointer to tiles blocks | pointer to ?????? | pointer to camera settings | ?????? | Number used for calculating position of blocks [1*] | Number used for calculating position of blocks [2*] |