EvilEngine/JAW: Difference between revisions

Content added Content deleted
No edit summary
No edit summary
Line 13: Line 13:


==Format==
==Format==
The asset data starts with an int which defines the amount of entries in the jaw data table, then a directory containing each entry's offset and size. Each directory entry has the following format:
The asset data starts with an int which defines the amount of entries in the jaw data table, then a table containing each entry's offset and size. Each table entry has the following format:


===xJawDataTable===
{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Variable !! Description
|-
|-
| 0x00 || [[AssetID]] ([[SND|Sound]]/[[SNDS|Streaming Sound]]) || '''Sound'''
| 0x00 || [[AssetID]] || '''soundHashID''' || ([[SND|Sound]]/[[SNDS|Streaming Sound]])
|-
|-
| 0x04 || int || '''Offset''' of jaw data (relative to end of directory)
| 0x04 || int || '''dataStart''' || Offset of jaw data (relative to end of directory)
|-
|-
| 0x08 || int || '''Size''' of jaw data (in bytes)
| 0x08 || int || '''dataLength''' || Size of jaw data (in bytes)
|}
|}


After the directory are the entries themselves. Each entry is 4-byte aligned and padded with null (0) bytes. The offsets in the directory are calculated based on this alignment, and the sizes do not include the padding. Each entry has the following format:
After the table are the entries themselves. Each entry is 4-byte aligned and padded with null (0) bytes. The offsets in the table are calculated based on this alignment, and the sizes do not include the padding. Each entry has the following format:


{| class="wikitable"
{| class="wikitable"
! Offset !! Type !! Description
! Offset !! Type !! Description
|-
|-
| 0x00 || int || '''Length''' of jaw data in frames (?) (size - 4). This is little-endian on all platforms.
| 0x00 || int || '''Length''' of jaw data in frames (?) (dataLength - 4). This is little-endian on all platforms.
|-
|-
| 0x04 || byte[Length] || '''Jaw data'''. Each byte represents the speaker's mouth position at the current point in time, from 0 (fully closed) to 255 (fully open).
| 0x04 || byte[Length] || '''Jaw data'''. Each byte represents the speaker's mouth position at the current point in time, from 0 (fully closed) to 255 (fully open).