Формат файлов *.object (формат объектов SDK)
Материал из S.T.A.L.K.E.R. Inside Wiki
Содержание
О формате
Формат *.object используется в качестве основного формата хранения моделей на этапе редактирования (включая экспорт из Maya или 3ds Max и хранение моделей до компиляции уровня)
Описание структуры
Формат бинарный. Файл состоит из вложенных друг в друга блоков. Весь файл представляет собой единый блок.
Структура блока
Блок имеет 3 обязательные части:
Часть | Тип(размер) | Подробнее |
---|---|---|
Идентификатор типа блока | (4) | 2 байта идентификатора и 2 нулевых байта |
Размер блока | uint(4) | без учета этих частей — только то, что идет дальше |
Данные | (Размер блока) | Данные могут быть представлены вложенными блоками |
Типы данных
Особое внимание стоит обратить на то, как хранятся строки: они нуль-терминальные, то есть в конце обязательно содержат нулевой байт.
Структура
В заголовке последующих пунктов в скобках содержатся идентификаторы типа блока в шестнадцатиричной форме, при этом байты представлены в обратном порядке (то есть так, как числа задаются в исходниках), поэтому идентификатор 0x0912 в файле будет выглядеть как 09 12 00 00.
Описание формата(из кода xrFSL)
const uint16 EOBJ_VERSION = 0x10;
EObjectChunkIDs:
EOBJ_CHUNK_MAIN = 0x7777,
EOBJ_CHUNK_VERSION = 0x0900,
EOBJ_CHUNK_FLAGS = 0x0903,
EOBJ_CHUNK_SURFACES_0 = 0x0905, // old format
EOBJ_CHUNK_SURFACES_1 = 0x0906, // old format
EOBJ_CHUNK_SURFACES_2 = 0x0907,
EOBJ_CHUNK_MESHES = 0x0910,
EOBJ_CHUNK_0911 = 0x0911, // ignored by AE(Actor Editor)
EOBJ_CHUNK_USERDATA = 0x0912,
EOBJ_CHUNK_BONES_0 = 0x0913, // old format
EOBJ_CHUNK_MOTIONS = 0x0916,
EOBJ_CHUNK_SHADERS_0 = 0x0918, // old format
EOBJ_CHUNK_PARTITIONS_0 = 0x0919, // old format
EOBJ_CHUNK_TRANSFORM = 0x0920,
EOBJ_CHUNK_BONES_1 = 0x0921,
EOBJ_CHUNK_REVISION = 0x0922, // file revision
EOBJ_CHUNK_PARTITIONS_1 = 0x0923,
EOBJ_CHUNK_MOTION_REFS = 0x0924,
EOBJ_CHUNK_LOD_REF = 0x0925 // LOD\Reference
EObjectClipChunkIDs:
EOBJ_CLIP_VERSION_CHUNK = 0x9000,
EOBJ_CLIP_DATA_CHUNK = 0x9001
const uint16 EMESH_VERSION = 0x11;
EMeshChunkID:
EMESH_CHUNK_VERSION = 0x1000,
EMESH_CHUNK_MESHNAME = 0x1001,
EMESH_CHUNK_FLAGS = 0x1002,
EMESH_CHUNK_BBOX = 0x1004,
EMESH_CHUNK_VERTS = 0x1005,
EMESH_CHUNK_FACES = 0x1006,
EMESH_CHUNK_VMAPS_0 = 0x1007,
EMESH_CHUNK_VMREFS = 0x1008,
EMESH_CHUNK_SFACE = 0x1009,
EMESH_CHUNK_OPTIONS = 0x1010,
EMESH_CHUNK_VMAPS_1 = 0x1011,
EMESH_CHUNK_VMAPS_2 = 0x1012,
EMESH_CHUNK_SG = 0x1013
const uint16 BONE_VERSION_1 = 0x1;
const uint16 BONE_VERSION_2 = 0x2;
const uint16 BONE_VERSION = BONE_VERSION_2;
EboneChunkID:
BONE_CHUNK_VERSION = 0x0001,
BONE_CHUNK_DEF = 0x0002,
BONE_CHUNK_BIND_POSE= 0x0003,
BONE_CHUNK_MATERIAL = 0x0004,
BONE_CHUNK_SHAPE = 0x0005,
BONE_CHUNK_IK_JOINT = 0x0006,
BONE_CHUNK_MASS_PARAMS = 0x0007,
BONE_CHUNK_IK_FLAGS = 0x0008,
BONE_CHUNK_BREAK_PARAMS = 0x0009,
BONE_CHUNK_FRICTION = 0x0010
Game Materials Library(из кода xrFSL)
const uint16 GAMEMTLS_VERSION = 1;
GAMEMTLS_CHUNK_VERSION = 0x1000,
GAMEMTLS_CHUNK_AUTOINC = 0x1001,
GAMEMTLS_CHUNK_MATERIALS = 0x1002,
GAMEMTLS_CHUNK_MATERIAL_PAIRS = 0x1003,
GAMEMTL_CHUNK_MAIN = 0x1000,
GAMEMTL_CHUNK_FLAGS = 0x1001,
GAMEMTL_CHUNK_PHYSICS = 0x1002,
GAMEMTL_CHUNK_FACTORS = 0x1003,
GAMEMTL_CHUNK_FLOTATION = 0x1004,
GAMEMTL_CHUNK_DESC = 0x1005,
GAMEMTL_CHUNK_INJURY = 0x1006,
GAMEMTLPAIR_CHUNK_PAIR = 0x1000,
GAMEMTLPAIR_CHUNK_BREAKING = 0x1002,
GAMEMTLPAIR_CHUNK_STEP = 0x1003,
GAMEMTLPAIR_CHUNK_COLLIDE = 0x1005,
SGameMaterial:
MF_BREAKABLE = 0x00000001,
MF_BOUNCEABLE = 0x00000004,
MF_SKIDMARK = 0x00000008,
MF_BLOODMARK = 0x00000010,
MF_CLIMABLE = 0x00000020,
MF_PASSABLE = 0x00000080,
MF_DYNAMIC = 0x00000100,
MF_LIQUID = 0x00000200,
MF_SUPPRESS_SHADOWS = 0x00000400,
MF_SUPPRESS_WALLMARKS = 0x00000800,
MF_ACTOR_OBSTACLE = 0x00001000,
MF_INJURIOUS = 0x10000000,
MF_SHOOTABLE = 0x20000000,
MF_TRANSPARENT = 0x40000000,
MF_SLOW_DOWN = 0x80000000,
SGameMaterialPair:
MPF_BREAKING_SOUNDS = 0x02,
MPF_STEP_SOUNDS = 0x04,
MPF_COLLIDE_SOUNDS = 0x10,
MPF_COLLIDE_PARTICLES = 0x20,
MPF_COLLIDE_MARKS = 0x40,