2
0
mirror of https://github.com/dpethes/rerogue.git synced 2025-06-07 18:58:32 +02:00
rerogue/doc/file_hob_spec.txt
2016-04-14 21:07:39 +02:00

130 lines
2.9 KiB
Plaintext

HOB
{
4B object count OF. 0 in empty files
4B simple offset to vertices/faces - doesn't work all the time. Probably useless?
array[OF] of object header
array[OF] of facegroup header
..
array[] of vertices
}
OF * object header [116B]
{
16B name
4B int facegroups offset
4B int facegroup header offset
4B int facegroup header 2 offset
12B zero
4B int ? 94, 0xD4
4B int ? 98, 0x100
4B int ? 9C, 0x104
4B float ?:
-bark_moon, cldcar: 1.0
-sky, e_cor: 0.2
-wmvwing: 1.25
12B zero
5x4B floats ?
4B int offset before 0xFFFFFFFF header end marker
6x 4B float ?
}
OF * facegroup header [varlen]
{
2B number of facegroups NOF
2B NX ?
NOF * facegroup/meshdef0 offset {
4B int ?
4B int facegroup/meshdef0 offset
}
2B NOF again
2B NX ?
NX * offsets + zeros
NOF * name {
2B facegroup number
8B char
}
4B 0xFFFFFFFF header end marker
}
NOF * facegroup/meshdef0 (fg/m0) [132B]
{
4B int offset to next fg/m0, 0 if there's no next, or in some other circumstances
4B int offset to prev?
4B int offset to beginning if this is not first fg/m0?
4B int offset to end if offset to next = 0
4B int offset to meshdef1 + 4
8B zero
48B 3 * {
4B float 1.0
12B zero
}
4B int, 8 in atst, 0 in tief, 1,9,5 in atpt
3 * 4B float
3 * 4B float 1.0, 2.961700037E-02?
4 * 4B float
3 * 4B float - (relative) translation x/y/z?
}
NOF * facegroup/meshdef1 [96B]
{
4B int facedef end offset
20B zero
4B int vertices used
4B int ?
4B zero
4B int face def offset
4B int vertex def offset
52B zero
}
NOF * face block
{
8B zero
4B int filepos + 4
4B int face count FC
FC * face
{
4B int face flags
- bits 0, 1 unknown
- if bit 2 is set, face has texture coordinates (uv-s)
- if bit 3 is set, the face is a quad, otherwise it's a triangle
- if bit 4 is set, face has separate colors for each vertex
- if bit 5 is set, face has color
- if bit 6 is set, face has extra 8 bytes before vertex colors
- bits 7-10 unknown. higher bits don't seem to be set
1B int ? 46/49/4B
1B int ? 51/71
1B int ? 0C
1B int face block size divided by 4
- A = 40B, 9 = 36, etc.
2B int zero
2B int material index
4x 2B vertex indices, relative to the face group. The last index is zero in triangle faces
if (face has extra 8 bytes) {
8B extra bytes
}
if (face has color) {
if (face has vertex colors) {
3/4 * 4B RGBA vertex color
} else {
4B RGBA color
}
}
if (face has texture coordinates) {
3/4 * {
2B int horizontal texture coord
2B int vertical texture coord
}
}
}
}
Vertices
{
2B int X
2B int Y
2B int Z
2B int ?
}