SpawnEd — S.T.A.L.K.E.R. Inside Wiki

SpawnEd

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск

Введение

Текущая версия - 0.20

Главное окно редактора

Итак, более менее стал понятен формат all.spawn файла. есть еще много неясного, но надеюсь, что дело все-таки не застрянет на полпути.

Программа позволяет просматривать ресурсы спавн файла в более удобном виде, нежели просто в шестнадцатиричном редакторе. В дальнейшем программа легко превратится в редактор ресурсов, если возникнет такая необходимость.

Главная ее задача на текущий момент - помочь более детально разобрать формат спавн файла для возможности свободного оперирования его ресурсами до появления оффициальных инструментов от разработчика. Для этого в программе существует небольшой настраиваемый скриптовый парсер, позволяющий самостоятельно выделять интересующие места в файле для дальйнешего анализа.

Описание работы

Дополнительные окна редактора

Для начала работы необходимо иметь сам редактор, файл all.spawn любой версии, и файлы схем (о них более подробно далее). Спавн должен быть в одном каталоге с программой. Стартуем, и в зависимости от мощности компьютера получаем главное окно через пару десятков секунд.

Подробнее о формате all.spawn можно посмотреть тут недалеко. Вот именно там я и надеюсь увидеть пополнение информации. Начинаем разбираться, где у нас что находится. Описываю слева направо сверху вниз. Сразу оговорючь, что почти все смещения в программе указаны относительно начала секции, а не начала файла.

  1. Левая часть.
    • 4 основные секции all.spawn файла. Мы с вами только начинаем разбирать вторуюю, так что еще 2 впереди. Поэтому кроме второй нам пока ничего надо, да и при старте автоматом переходим куда нам надо.
    • Упакованная секция. Размеры, смещения, ничего интересного.
    • Перечислены номера всех игровых объектов, указаны их смещения и размеры. Также тут есть два поля для ввода номеров объектов (быстрый переход) и кнопка для попеременного показа двух заранее заданных объектов.
    • Заголовок выбранного объекта. Только размеры. 4 тире - это содержимое вложенных секций, которое видно на следующей части.
  2. Центральная часть
    • (сверху) Первая секция объекта. Всегда присутствует. Содержит имя объекта, его координаты, версию игры и вложенную секцию
    • (снизу) Вторая секция объекта. Иногда присутствует. Если есть, то содержит копию данных из первой секции.
    • (справа) Содержание вложенной секции, самой загадочной на данный момент.
  3. Правая часть.
    • Вот тут как раз и находится настраиваемый парсер. Эта часть является простым текстовым редактором.
  4. Кнопки
    • Показать\скрыть Hex - вызывает дополнительное окно с шестнадцатиричным представлением секции
    • Показать\скрыть скрипты - если у объекта есть встроенные скрипты, то вызывается окно для их просмтора
    • Прыг - при заполнененных полях по обеим сторонам от кнопки циклически переключается между двумя объектами
    • Перегрузить схемы - повторное применение схемы к выбранному объекту в случае редактирования внешними инструментами.
    • Записать схему - записываются внесенные изменения произведенные прямо в программе, схема применяется заново.


Схемы

Теоретически, существует единое описание всех объектов, позволяющее задать любой из них одной формулировкой. Практически объекты довольно разные, и на первый взгляд (да и на второй) имеют значительные отличия. Для поиска этой единой формулировки, или, формата объекта, раньше я копировал в хексе объект в блокнот и ручками делил на байты, на двойки, на четверки чтобы найти границы либо конкреные значения.

Потом это надоело и появился SpawnEd. Я хотел найти похожие объекты, чтобы в итоге загнать их под одну гребенку (прошу прощения, формулу). Поэтому требовалось разделить описание разных объектов. Для этого используются схемы.

Что такое схема?

Если посмотреть в таблицу "Секция 1 - шапка", то вторым параметром в ней будет имя объекта. Оно жестко привязано к используемым параметрам. Всего в файле all.spawn (первый патч) 190 различных объектов. Но это не все, что есть в игровых ресурсах. Все знают, что из игры были выброшены транспорт, несколько монстров и некоторые аномалии. Поэтому зная, как описаны похожие объекты мы сможем вернуть отсутствующие детали, а заоодно и подредактируем старые.

И в се же, вернемся к схеме. Схема (термин использую я, и не факт, что он тут уместен) - это набор команд парсера, по которым программа выводит содержимое секция объекта. Если вернемся к таблице "Секция 1 - шапка", то увидим, что в ней есть пара названий, координаты, разделители. Чтобы программа знала, как показать нам содержание этой части, она использует скрипты.

Использование схем

Все на примерах, так будет понятнее.

Для отображение "Секция 1 - шапка" используется следующая схема:

Команда Описание
 ;секция 1 первая строка - коментарий. Не обрабатывается, служит для пометок.
read-2 вывести 2 байта (разделитель)
find-00-объект вывести несколько байт в ASCII до первого символа 00, присвоить имя объект
find-00-имя аналогично, но имя строки - имя
read-2 вывести два байта (разделитель)
hex-real-X вывести 4 байта, перевести их в формат дробных чисел
hex-real-Y присвоить названия X Y Z
hex-real-Z
hex-real-Xrot аналогично, но названия Xrot Yrot Zrot
hex-real-Yrot
hex-real-Zrot
read-8-разд вывести 8 байт, название разд
read-4-?? показать 4 байта, названий ?? ( то есть неизвестно)
read-4-версия ну и так далее...
read-2-секция ...
read-2-размер-dec показать 2 байта, и добавить в скобках десятичное значение
next-table переход на вложенную секцию

Я думаю, что смысл понятен. Есть 4 команды с параметрами, и парсер их выполняет. К нему побайтого постпает содержание секций и он просто кладет их в нужные места (нужные нам).

Команды в схемах

Формат всех команд одинаков, разделителем выступает тире:

команда-значение[-название[-опция]]
 команды:  read, find, hex, next.
 значение: XX
 опции:    dec, show
  • read. Получить и вывести XX байт. Опция dec добавляет десятичное значение полученных данных
  • find. Выводится последовательность поступаемых байт до первого символа XX. Затем последовательность конвертируется в ASCII символы. Иначе говоря, так мы получаем все текстовые значения. Опция show выведет полученный текст в дополнительное окно (обычно используется для длинных скриптов)
  • hex. Значением выступает слово real, однако использовано только для читаемости. Переводит 4 байта в дробное число.
  • next. Используется только для перехода к вложенной секции в другой таблице.

Файлы

В комплекте с программой идут несколько файлов.

  • data\object - 191 объект, после символа "равно" - используемая схема. Изначально все объекты имеют схему "0", то есть "пустышку", которая просто показывает несколько байт. Я некоторые разобрал, но не факт, что правильно, так что смотрите.
  • data\*.sch - а это сами схемы и есть. обычные текстовые файлы. Которые начинаются с подчеркивания - это схемы второй секции, из программы они не редактируются, так как там все ясно (почти).

Уже занятые схемы: 1-stalker; 2-restrictor, smart_terrain; 3-m_flesh; 4-actor; 5-breakable_object, всякие lamp; 6-m_trader. 7,8,9 - пустые, их можно использовать для дальнейшей работы. Можно создать до 100 файлов, но я надеюсь, что и десятка должно хватить. Не хватит - копируйте 0.sch под новым именем и пользуйте.

Пример работы

После запуска программа перекинет нас на объект 93, stalker, схема 1. В ней многое описано, но еще и остались непонятные пункты. Но мы сейчас будет разбирать ворону... Вот тут есть описание формата объекта "ворона" ;) Смотрим его:

число пример
байт
2    FC 00
4    00 00 00 00
4    01 00 00 00
4    D9 2D 03 00
1    BA
3    FF FF FF
1    00
4    FF FF FF FF
4    FF FF FF FF
х    monsters\crow\crow
1    00
6    00 00 00 00 00 00
4    80 3F 00 00
4    00 00 00 00
4    00 00 FF FF
4    00 00 00 00
4    00 00 00 00

Чтобы увидеть такое, нужно всего лишь добавить схему для вороны. Для этого перейдем на любой объект "ворона" (например, объект 289). Его схема изначально не задана, то есть "пустышка". Для создания новой схемы (сейчас мы не будет пытаться адаптировать уже существующие) в таблице Секция 1 - шапка сделайте двойной щелчок на строке объект m_crow. Откроется окно привязки объектов к схемам. Стрелками выберем схему 7. Она пока не занята. После выбора закроем окно, оно больше не нужно.

Теперь просто напишем следущее в правой части программы, в месте для команд парсера:

;m_crow

чтобы самим потом вспомнить, для чего эта схема. и дальше еще пару строк (в скобках - мои коментарии, их не нужно писать):

;m_crow
read-2 (три двубайтовых значения - почти всегда так начинается секция)
read-2
read-2
read-4 (01000000 - всегда присутствует)
read-4 (в зависимости от уровня)
read-4
read-1 (здесь будет 00, обычно присутствует скрипт, но сейчас его нет)
read-4 (а тут одни FF, видимо опущенные параметры)
read-4
find-00

Теперь нажмем Записать схему, и увидим уже более осмысленный результат. Немного облагородим вид, добавим названия (которые знаем):

;m_crow
read-2-код1
read-2
read-2
read-4
read-4-код2
read-4
read-1
read-4
read-4
find-00-модель

Ну и в том же духе продожаем пробовать. Обратите внимание, что вторая секция заполнилась автоматом, менять ее можно только внешним редактором в файлах _?.sch, но нам это не нужно сейчас.

Теперь все вороны будут на попадаться в уже полуразобранном виде ;) И можно попробовать посмотреть, подойдет ли эта схема например к собакам. Ищем собаку, меняем ей схему на нашу m_crow и продолжаем дальше.

Вобщем, удачи в исследованиях. И не забывайте делится найденными схемами, которые подходят сразу под несколько объектов, а не только для ворон.

--HikeR 03:16, 6 мая 2007 (MSD)

Ссылки

  • в данный момент нет доступных ссылок
Другие места
LANGUAGE