|
|
Строка 1: |
Строка 1: |
− | ==Введение==
| + | инфа в процессе корректировки... |
− | | + | --[[Участник:HikeR|HikeR]] 03:10, 6 мая 2007 (MSD) |
− | Разбор all.spawn (попытка 2)
| + | |
− | | + | |
− | Здесь я постараюсь описать структуру файла 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.
| + | |
− | | + | |
− | | + | |
− | ==Второй блок==
| + | |
− | | + | |
− | | + | |
− | {|
| + | |
− | |+
| + | |
− | |-
| + | |
− | !<big>1-й уровень</big>||<big>2-й уровень</big>
| + | |
− | |-
| + | |
− | |
| + | |
− | размер описание комментарий
| + | |
− | (байт)
| + | |
− | ------------------------------------------
| + | |
− | 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 содержание
| + | |
− |
| + | |
− |
| + | |
− |
| + | |
− |
| + | |
− |
| + | |
− | .
| + | |
− |
| + | |
− | .
| + | |
− | |+
| + | |
− | |}
| + | |
− | | + | |
− | {|
| + | |
− | |+
| + | |
− | |-
| + | |
− | !<big>3-й уровень</big>||<big>4-й уровень</big>
| + | |
− | |-
| + | |
− | |
| + | |
− | размер описание комментарий
| + | |
− | (байт)
| + | |
− | ------------------------------------------
| + | |
− | 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
| + | |
− | |+
| + | |
− | |}
| + | |
− | | + | |
− | {|
| + | |
− | |+
| + | |
− | |-
| + | |
− | !<big>5-й уровень. Секция 1</big>||
| + | |
− | |-
| + | |
− | |
| + | |
− | размер описание комментарий
| + | |
− | (байт)
| + | |
− | ------------------------------------------
| + | |
− | 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 байта
| + | |
− | |
| + | |
− | | + | |
− | {|
| + | |
− | |-
| + | |
− | !<big>5-й уровень. Секция 2</big>
| + | |
− | |-
| + | |
− | |Если секция есть, то содержит копию координат из секции 1, вектора вращения представлены в виде 0, Y, X, то есть в обратном порядке с опущенной Z координатой. Только есть еще 2-3 непонятных кода.
| + | |
− | |-
| + | |
− | !<big>6-й уровень. Секция 1</big>
| + | |
− | |-
| + | |
− | |Вот здесь и находится самое интересное. Встречается несколько типов секций. Однозначно сказать, чем отличается каждая я пока не могу. Попробую перечислить уже знакомые.
| + | |
− | |}
| + | |
− | |+
| + | |
− | |}
| + | |
− | | + | |
− | == Третий блок ==
| + | |
− | | + | |
− | Первые 4 байта - количество объектов. 33 A6 00 00 = 42547
| + | |
− | | + | |
− | Размер третьего блока - 850940 (без первых 4-х байт)
| + | |
− | | + | |
− | В итоге имеет размер объекта 20 байт.
| + | |
− | | + | |
− | | + | |
− | | + | |
− | == [[all.spawn(2)_Object_types|Типы объектов]] ==
| + | |
− | | + | |
− | Переходим и смотрим дальше ;)
| + | |
− | | + | |
− | [[Категория:Форматы файлов]]
| + | |