Line 292: |
Line 292: |
| |- | | |- |
| | 0x0 | | | 0x0 |
− | | 0x3 | + | | 0x4 |
− | | Flags ? | + | | Flags (bit 4: model; bit 1: skeleton) |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | Magic "SOBJ" |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | ? |
| + | |- |
| + | | 0xC |
| + | | 0x4 |
| + | | Unknown symbol offset (self-relative) |
| + | |- |
| + | | 0x10 |
| + | | 0xC |
| + | | ? |
| + | |- |
| + | | 0x1C |
| + | | 0x4 |
| + | | Unknown offset (self-relative) (appears to hold array of floats) ? |
| + | |- |
| + | | 0x20 |
| + | | 0xC |
| + | | ? |
| + | |- |
| + | | 0x2C |
| + | | 0x4 |
| + | | Face groups count |
| + | |- |
| + | | 0x30 |
| + | | 0x4 |
| + | | Offset (self-relative) to face groups offset array |
| + | |- |
| + | | 0x34 |
| + | | 0x4 |
| + | | ? |
| + | |- |
| + | | 0x38 |
| + | | 0x4 |
| + | | Vertex groups count |
| + | |- |
| + | | 0x3C |
| + | | 0x4 |
| + | | Offset (self-relative) to vertex groups offset array |
| + | |- |
| + | | 0x40 |
| + | | 0x4 |
| + | | Unknown offset (self-relative) ? |
| + | |} |
| + | |
| + | Face groups: |
| + | |
| + | {| class="wikitable" |
| + | |- |
| + | ! Offset |
| + | ! Length |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | Bone groups count |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | Offset (self-relative) to 4-byte bone group IDs array |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | ? |
| + | |- |
| + | | 0xC |
| + | | 0x4 |
| + | | Unknown1 count |
| + | |- |
| + | | 0x10 |
| + | | 0x4 |
| + | | Offset (self-relative) to Unknown1 offset array |
| + | |} |
| + | |
| + | Unknown1: |
| + | |
| + | {| class="wikitable" |
| + | |- |
| + | ! Offset |
| + | ! Length |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | Face group descriptor count |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | Offset (self-relative) to face group descriptors offset array |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | Unknown3 count |
| + | |- |
| + | | 0xC |
| + | | 0x4 |
| + | | Offset (self-relative) to 4-byte Unknown2 array |
| + | |- |
| + | | 0x10 |
| + | | 0x8 |
| + | | ? |
| + | |} |
| + | |
| + | Face array descriptor: |
| + | |
| + | {| class="wikitable" |
| + | |- |
| + | ! Offset |
| + | ! Length |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | Flags (bit 1: vertex index format: 0=byte, 1=short) |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | ? |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | Vertex index array size (in bytes) |
| + | |- |
| + | | 0xC |
| + | | 0x4 |
| + | | Offset (self-relative) to vertex index array |
| + | |} |
| + | |
| + | |
| + | Vertex group objects come in one of several formats, specified by the flags field. |
| + | |
| + | Vertex group format 0x40000001: (?) |
| + | |
| + | {| class="wikitable" |
| + | |- |
| + | ! Offset |
| + | ! Length |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| + | | 0x4 |
| + | | Flags (0x40000001) |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | Type ? |
| + | |- |
| + | | 0x8 |
| + | | 0x4 |
| + | | ? |
| + | |- |
| + | | 0xC |
| + | | 0x4 |
| + | | ? |
| + | |- |
| + | | 0x10 |
| + | | 0x4 |
| + | | ? |
| + | |- |
| + | | 0x14 |
| + | | 0x4 |
| + | | Vertex array size (in bytes) |
| + | |- |
| + | | 0x18 |
| + | | 0x4 |
| + | | Offset (self-relative) to vertex array |
| + | |- |
| + | | 0x1C |
| + | | 0x4 |
| + | | ? |
| + | |- |
| + | | 0x20 |
| + | | 0x4 |
| + | | ? |
| |- | | |- |
− | | 0x3 | + | | 0x24 |
| | 0x1 | | | 0x1 |
− | | SOBJ type ? (0x10 = model, 0x02 = skeleton) | + | | ? |
| + | |- |
| + | | 0x25 |
| + | | 0x1 |
| + | | ? |
| + | |- |
| + | | 0x26 |
| + | | 0x1 |
| + | | ? |
| + | |- |
| + | | 0x27 |
| + | | 0x1 |
| + | | ? |
| + | |- |
| + | | 0x28 |
| + | | 0x4 |
| + | | ? |
| + | |- |
| + | | 0x2C |
| + | | 0x4 |
| + | | ? (float) |
| |- | | |- |
| + | | 0x30 |
| | 0x4 | | | 0x4 |
| + | | ? |
| + | |} |
| + | |
| + | Vertex group format 0x40000002: |
| + | |
| + | {| class="wikitable" |
| + | |- |
| + | ! Offset |
| + | ! Length |
| + | ! Description |
| + | |- |
| + | | 0x0 |
| | 0x4 | | | 0x4 |
− | | Magic "SOBJ" | + | | Flags (0x40000002) |
| + | |- |
| + | | 0x4 |
| + | | 0x4 |
| + | | ? |
| |- | | |- |
− | | 0x44 | + | | 0x8 |
| | 0x4 | | | 0x4 |
− | | Y = Offset (self-relative) to bone correspondance array | + | | ? |
| |- | | |- |
− | | 0x48 | + | | 0xC |
| | 0x4 | | | 0x4 |
− | | X = Offset (relative to SOBJ magic) to SOBJ data structure (wrong ?) | + | | ? |
| |- | | |- |
− | | 0x44+Y+0x00 | + | | 0x10 |
| | 0x4 | | | 0x4 |
− | | N = Number of bone IDs in bone correspondance array | + | | ? |
| |- | | |- |
− | | 0x44+Y+0x14 | + | | 0x14 |
− | | 0x4*N | + | | 0x4 |
− | | Bone correspondance array | + | | Vertex array size (in bytes) |
| |- | | |- |
− | | X+0x18 | + | | 0x18 |
− | | 0x1 | + | | 0x4 |
− | | Face data format (?) : 0x1 = u8, 0x3 = u16 | + | | Offset (self-relative) to vertex array |
| |- | | |- |
− | | X+0x20 | + | | 0x1C |
| | 0x4 | | | 0x4 |
− | | Face data section size (in bytes) | + | | ? |
| |- | | |- |
− | | X+0x24 | + | | 0x20 |
| | 0x4 | | | 0x4 |
− | | Face data section offset (self-relative) | + | | ? |
| |- | | |- |
− | | X+0x58 | + | | 0x24 |
| | 0x4 | | | 0x4 |
− | | Vertex data section size (in bytes) | + | | Vertex format size (see below) |
| |- | | |- |
− | | X+0x5C | + | | 0x28 |
| | 0x4 | | | 0x4 |
− | | Vertex data section offset (self-relative) | + | | Unknown3 count |
| |- | | |- |
− | | X+0x68 | + | | 0x2C |
− | | 0x1 | + | | 0x4 |
− | | Vertex data format size (in bytes) | + | | Offset (self-relative) to 0x40000001 offset array |
| |} | | |} |
| + | |
| + | Vertex formats: |
| | | |
| {| class="wikitable" | | {| class="wikitable" |