All.spawn(2) — различия между версиями
Материал из S.T.A.L.K.E.R. Inside Wiki
HikeR (обсуждение | вклад) м (инфа в процессе корректировки...) |
HikeR (обсуждение | вклад) м (восставшая из пепла ;)) |
||
Строка 1: | Строка 1: | ||
− | + | ==Введение== | |
− | --[[ | + | |
+ | Разбор 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|Типы объектов]] == | ||
+ | |||
+ | Переходим и смотрим дальше ;) | ||
+ | |||
+ | [[Категория:Форматы файлов]] |
Версия 20:38, 29 мая 2007
Введение
Разбор 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.
Второй блок
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 байта |
|
Третий блок
Первые 4 байта - количество объектов. 33 A6 00 00 = 42547
Размер третьего блока - 850940 (без первых 4-х байт)
В итоге имеет размер объекта 20 байт.
Типы объектов
Переходим и смотрим дальше ;)