Здесь я постараюсь описать структуру файла all.spawn для игры S.T.A.L.K.E.R.:_Shadow_of_Chernobyl найденную методом проб и ошибок. Так как появление SDK пока еще за горами, то я надеюсь, что эта информация смжет оказаться полезной для модостроителей и откроет новые горизонты для этого нелегкого и интересного занятия.
Структура размер (байт) описание комментарий ------------------------------------------- 4 номер блока 00 00 00 00 4 размер блока (L1) L1 содержание блока
На текущий момент всего таких блоков 4. "шапка" объединенные файлы level.spawn сетка координат (пока непонятно чего) список переменных используемых во втором блоке
похоже, что 4-й блок компилируется с использованием файлов level.game из каталогов уровней.
Первый блок
Пока в изучении. Можно только сказать, что по смещению 44 (здесь и далее смещение приводится в десятичном виде, если не указано обратное, а также за ноль принято начало блока) находится 2-байтовое значение, которое содержит количество всех объектов. В версии 1.0001 и 1.0002 оно равно 8641.
Второй блок1-й уровень 2-й уровень размер описание комментарий (байт) ------------------------------------------ 4 номер секции 00 00 00 00 4 размер след. параметра L1 L1 количество объектов 4 номер секции 01 00 00 00 4 размер вложенной секции L2 L2 содержание секции 4 номер секции 02 00 00 00 4 пустышка 00 00 00 00
Содержит вложенную секцию, в версии 1.(много нолей)1
ее размер равен CD F6 26 00 (2553549) байт. размер описание комментарий (байт) ------------------------------------------ 4 номер объекта 00 00 00 00 4 размер L1 L1 содержание
.
. 3-й уровень 4-й уровень размер описание комментарий (байт) ------------------------------------------ 4 номер секции 00 00 00 00 4 размер след. параметра L1 L1 номер объекта 01 00 00 00 разделитель 4 размер вложенной секции L2 L2 содержимое секции
размер описание комментарий (байт) ------------------------------------------ 4 номер секции 00 00 00 00 4 размер вложенной секции L1 2 еще раз размер L1-2=L2 L2 содержание секции 1 4 номер секции 01 00 00 00 4 размер вложенной секции L3 2 еще раз размер L3-2=L4 L4 содержание секции 2 5-й уровень. Секция 1 размер описание комментарий (байт) ------------------------------------------ 01 00 начало секции всегда 01 00 x текст до первого 00 y текст до первого 00 00 FE разделитель всегда 00 FE 4 координата X float 4 координата Y float 4 координата Z float 4 координата X вращение,float 4 координата Y вращение,float 4 координата Z вращение,float 00 00 FF FF FF FF FF FF разделитель 4 неизвестно почти всегда равно 29 00 76 00 (кроме пары десятков случаев) 4 версия игры 06 00 00 00 2 номер объекта 2 размер вложенной секции включая эти 2 байта 5-й уровень. Секция 2 Если секция есть, то содержит копию координат из секции 1, вектора вращения представлены в виде 0, Y, X, то есть в обратном порядке с опущенной Z координатой. Только есть еще 2-3 непонятных кода. 6-й уровень. Секция 1 Вот здесь и находится самое интересное. Встречается несколько типов секций. Однозначно сказать, чем отличается каждая я пока не могу. Попробую перечислить уже знакомые.
Третий блок
Первые 4 байта - количество объектов. 33 A6 00 00 = 42547
Размер третьего блока - 850940 (без первых 4-х байт)