Anonymous

Changes

From Final Fantasy Inside

FF9/File/0x0A

10,242 bytes added, 05:25, 23 May 2019
m
14 revisions imported
! style="background:rgb(204,204,204);" | Offset
! style="background:rgb(255,255,255);" align="center" | 0x00
! style="background:rgb(249255,203255,81255);" align="center" | 0x02
! style="background:rgb(255,255,255);" align="center" | 0x04
! style="background:rgb(255,255,255);" align="center" | 0x06
{| border="0" cellspacing="1" cellpadding="3" style="background: rgb(0,0,0)" align="center"
! style="background:rgb(204,204,204);" | Offset
! style="background:rgb(249255,203255,81255);" align="center" | 0x00
! style="background:rgb(255,255,255);" align="center" | 0x01
! style="background:rgb(249,203,81);" align="center" | 0x02-0x0B
|-
| style="background:rgb(204,204,204);" | Size
| style="background:rgb(249255,203255,81255);" | 1 byte
| style="background:rgb(255,255,255);" | 1 byte
| style="background:rgb(249,203,81);" | ??? bytes
One record Staructure:
{| border="0" cellspacing="1" cellpadding="3" style="background: rgb(0,0,0)" align="center"
! style="background:rgb(204,204,204);" align="center"| 1 byte
! style="background:rgb(204,204,204);" align="center"| 1 byte
|-
| style="background:rgb(255,255,255);" | Block ID
| style="background:rgb(249,203,81);" | ???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:
{| border="0" cellspacing="1" cellpadding="3" style="background: rgb(0,0,0)" align="center"
! style="background:rgb(204,204,204);" | Offset
! style="background:rgb(249,203,81);" align="center" | 0x00
! style="background:rgb(249,203,81);" align="center" | 0x01
! style="background:rgb(249,203,81);" align="center" | 0x04-0x0B
! style="background:rgb(255,255,255);" align="center" | 0x0C
! style="background:rgb(255,255,255);" align="center" | 0x0E
! style="background:rgb(249,203,81);" align="center" | 0x10-0x17
! style="background:rgb(255,255,255);" align="center" | 0x18
! style="background:rgb(255,255,255);" align="center" | 0x1A
! style="background:rgb(249,203,81);" align="center" | 0x1C-0x23
! style="background:rgb(255,255,255);" align="center" | 0x24
! style="background:rgb(255,255,255);" align="center" | 0x26
! style="background:rgb(255,255,255);" align="center" | 0x28
! style="background:rgb(255,255,255);" align="center" | 0x2C
! style="background:rgb(255,255,255);" align="center" | 0x30
! style="background:rgb(249,203,81);" align="center" | 0x34-0x38
|-
! style="background:rgb(204,204,204);" | Size
! style="background:rgb(249,203,81);" | 1 byte
! style="background:rgb(249,203,81);" | 3 byte
! style="background:rgb(249,203,81);" | ??????
! style="background:rgb(255,255,255);" | 2 bytes
! style="background:rgb(255,255,255);" | 2 bytes
! style="background:rgb(249,203,81);" | ??????
! style="background:rgb(255,255,255);" | 2 bytes
! style="background:rgb(255,255,255);" | 2 bytes
! style="background:rgb(249,203,81);"| ??????
! style="background:rgb(255,255,255);" | 2 bytes
! style="background:rgb(255,255,255);" | 2 bytes
! style="background:rgb(255,255,255);"| 4 Bytes
! style="background:rgb(255,255,255);" | 4 Bytes
! style="background:rgb(255,255,255);" | 4 Bytes
! style="background:rgb(249,203,81);" | ??????
|-
! style="background:rgb(204,204,204);" | Size
! style="background:rgb(249,203,81);"| ??? TYPE ???
! style="background:rgb(249,203,81);"| Plane distance ????
! style="background:rgb(249,203,81);"| ??????
! style="background:rgb(255,255,255);"| Value for position calculating [3*]
! style="background:rgb(255,255,255);" | Value for position calculating [4*]
! style="background:rgb(249,203,81);" | ??????
! style="background:rgb(255,255,255);" | it`s not value, just Var. Value = [1*]+[3*]
! style="background:rgb(255,255,255);" | it`s not value, just Var. Value = [2*]+[4*]
! style="background:rgb(249,203,81);" | ??????
! style="background:rgb(255,255,255);" | TileSet ID (for camera settings record)
! style="background:rgb(255,255,255);" | Tiles count
! style="background:rgb(255,255,255);" | Pointer to 4 bytes values (for each tile)
! style="background:rgb(255,255,255);"| Pointer to 8 bytes values (for each tile)
! style="background:rgb(255,255,255);"| Var, address in memory to created packet.[For PSX drawning loop].
! style="background:rgb(249,203,81);" | ??????
|}
 
 
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:
 
{| border="0" cellspacing="1" cellpadding="3" style="background: rgb(0,0,0)" align="center"
! style="background:rgb(204,204,204);" | Offset
! style="background:rgb(249,203,81);" align="center" | 0x00-0x0B bits
! style="background:rgb(255,255,255);" align="center" | 0x0C-0x15 bits
! style="background:rgb(255,255,255);" align="center" | 0x16-0x1f bits
|-
| style="background:rgb(204,204,204);" | Size
| style="background:rgb(249,203,81);" | 12 bits
| style="background:rgb(255,255,255);" | 10 bits
| style="background:rgb(255,255,255);" | 10 bits
|-
| style="background:rgb(204,204,204);" | Description
| style="background:rgb(249,203,81);" | Not used, or zero ????
| style="background:rgb(255,255,255);" | local coordinate Y [for drawning], from block position
| style="background:rgb(255,255,255);" | local coordinate X [for drawning], from block position
|}
 
 
8 bytes values:
 
{| border="0" cellspacing="1" cellpadding="3" style="background: rgb(0,0,0)" align="center"
! style="background:rgb(204,204,204);" | Offset
! style="background:rgb(255,255,255);" align="center" | 0x00-0x08 bits
! style="background:rgb(255,255,255);" align="center" | 0x09-0x0E bits
! style="background:rgb(255,255,255);" align="center" | 0x0F bit
! style="background:rgb(255,255,255);" align="center" | 0x10-0x13 bits
! style="background:rgb(255,255,255);" align="center" | 0x14-0x15 bits
! style="background:rgb(255,255,255);" align="center" | 0x16-0x17 bits
! style="background:rgb(255,255,255);" align="center" | 0x18-0x1F bits
! style="background:rgb(255,255,255);" align="center" | 0x20-0x27 bits
! style="background:rgb(249,203,81);" align="center" | 0x28-0x3B bits
! style="background:rgb(255,255,255);" align="center" | 0x3C bit
! style="background:rgb(249,203,81);" align="center" | 0x3D-0x3F bits
|-
| style="background:rgb(204,204,204);" | Size
| style="background:rgb(255,255,255);" | 9 bits
| style="background:rgb(255,255,255);" | 6 bits
| style="background:rgb(255,255,255);" | 1 bit
| style="background:rgb(255,255,255);" | 4 bits
| style="background:rgb(255,255,255);" | 2 bits
| style="background:rgb(255,255,255);" | 2 bits
| style="background:rgb(255,255,255);" | 8 bits
| style="background:rgb(255,255,255);" | 8 bits
| style="background:rgb(249,203,81);" | 20 bits
| style="background:rgb(255,255,255);" | 1 bit
| style="background:rgb(249,203,81);" | 3 bits
|-
| style="background:rgb(204,204,204);" | Description
| style="background:rgb(255,255,255);" | CLUT ID Y
| style="background:rgb(255,255,255);" | CLUT ID X
| style="background:rgb(255,255,255);" | Page Y
| style="background:rgb(255,255,255);" | Page X
| style="background:rgb(255,255,255);" | TP
| style="background:rgb(255,255,255);" | ABR
| style="background:rgb(255,255,255);" | v
| style="background:rgb(255,255,255);" | u
| style="background:rgb(249,203,81);" | ??????
| style="background:rgb(255,255,255);" | Packet type (0: 0x7C, 1: 0x7E)
| style="background:rgb(249,203,81);" | ??????
|}
+--------+--------+if packet type is 0x7C, then tile is 16x16 sprite, else if type is 0x7E, packet is ???transparent??? 16x16 sprite.
| 1 byte | 1 byte |
+--------+--------+'''Camera Settings'''In asm i found hard coded values:
| block |???Type |OFX Screen offset X = 0xA00000
| id | ??? |OFY Screen offset Y = 0x700000
+Structure of one record:Header size is 0x34 bytes{| border="0" cellspacing="1" cellpadding="3" style="background: rgb(0,0,0)" align="center"! style="background:rgb(204,204,204);" | Offset! style="background:rgb(255,255,255);" align="center" | 0x00! style="background:rgb(255,255,255);" align="center" | 0x02! style="background:rgb(255,255,255);" align="center" | 0x04! style="background:rgb(255,255,255);" align="center" | 0x06! style="background:rgb(255,255,255);" align="center" | 0x08! style="background:rgb(255,255,255);" align="center" | 0x0A! style="background:rgb(255,255,255);" align="center" | 0x0C! style="background:rgb(255,255,255);" align="center" | 0x0E! style="background:rgb(255,255,255);" align="center" | 0x10! style="background:rgb(255,255,255);" align="center" | 0x12! style="background:rgb(255,255,255);" align="center" | 0x14! style="background:rgb(255,255,255);" align="center" | 0x18! style="background:rgb(255,255,255);" align="center" | 0x1C! style="background:rgb(249,203,81);" align="center" | 0x20-0x27! style="background:rgb(255,255,255);" align="center" | 0x28! style="background:rgb(255,255,255);" align="center" | 0x2A! style="background:rgb(255,255,255);" align="center" | 0x2C! style="background:rgb(255,255,255);" align="center" | 0x2E! style="background:rgb(255,255,255);" align="center" | 0x30! style="background:rgb(255,255,255);" align="center" | 0x32|-| style="background:rgb(204,204,204);" | Size| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 4 bytes| style="background:rgb(255,255,255);" | 4 bytes| style="background:rgb(255,255,255);" | 4 bytes| style="background:rgb(249,203,81);" | ??????| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes| style="background:rgb(255,255,255);" | 2 bytes|------+--------+| style="background:rgb(204,204,204);" | Description| style="background:rgb(255,255,255);" | H Projection plane distance| style="background:rgb(255,255,255);" | R11| style="background:rgb(255,255,255);" | R12| style="background:rgb(255,255,255);" | R13| style="background:rgb(255,255,255);" | R21| style="background:rgb(255,255,255);" | R22| style="background:rgb(255,255,255);" | R23| style="background:rgb(255,255,255);" | R31| style="background:rgb(255,255,255);" | R32| style="background:rgb(255,255,255);" | R33| style="background:rgb(255,255,255);" | TRX| style="background:rgb(255,255,255);" | TRY| style="background:rgb(255,255,255);" | TRZ| style="background:rgb(249,203,81);" | ??????| style="background:rgb(249,203,81);" | ??????| style="background:rgb(249,203,81);" | ??????| style="background:rgb(249,203,81);" | ??????| style="background:rgb(249,203,81);" | ??????| style="background:rgb(249,203,81);" | ??????| style="background:rgb(249,203,81);" | ??????|}