<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://stalkerin.gameru.net/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=69.37.164.25&amp;*</id>
		<title>S.T.A.L.K.E.R. Inside Wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://stalkerin.gameru.net/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=69.37.164.25&amp;*"/>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/69.37.164.25"/>
		<updated>2026-04-29T17:52:52Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>http://stalkerin.gameru.net/wiki/index.php?title=SpawnEd</id>
		<title>SpawnEd</title>
		<link rel="alternate" type="text/html" href="http://stalkerin.gameru.net/wiki/index.php?title=SpawnEd"/>
				<updated>2009-03-26T02:09:57Z</updated>
		
		<summary type="html">&lt;p&gt;69.37.164.25: /* Введение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;D9qoFO  &amp;lt;a href=&amp;quot;http://uqsrvmfcaxmv.com/&amp;quot;&amp;gt;uqsrvmfcaxmv&amp;lt;/a&amp;gt;, [url=http://entngduqawjo.com/]entngduqawjo[/url], [link=http://wonbhedjumux.com/]wonbhedjumux[/link], http://ayvvvlmwiykv.com/&lt;br /&gt;
&lt;br /&gt;
== Описание работы ==&lt;br /&gt;
&lt;br /&gt;
[[Изображение:SpawnEd_0_20_help_window.png|thumb|right|Дополнительные окна редактора]]&lt;br /&gt;
&lt;br /&gt;
Для начала работы необходимо иметь сам редактор, файл '''all.spawn''' любой версии, и файлы схем (о них более подробно далее). Спавн должен быть в одном каталоге с программой. Стартуем, и в зависимости от мощности компьютера получаем главное окно через пару десятков секунд.&lt;br /&gt;
&lt;br /&gt;
Подробнее о формате '''all.spawn''' можно посмотреть [[all.spawn(2)|тут недалеко]]. Вот именно там я и надеюсь увидеть пополнение информации.&lt;br /&gt;
Начинаем разбираться, где у нас что находится. Описываю слева направо сверху вниз. Сразу оговорючь, что почти все смещения в программе указаны относительно начала секции, а не начала файла.&lt;br /&gt;
&lt;br /&gt;
#Левая часть.&lt;br /&gt;
#*4 основные секции all.spawn файла. Мы с вами только начинаем разбирать вторуюю, так что еще 2 впереди. Поэтому кроме второй нам пока ничего надо, да и при старте автоматом переходим куда нам надо.&lt;br /&gt;
#*Упакованная секция. Размеры, смещения, ничего интересного.&lt;br /&gt;
#*Перечислены номера всех игровых объектов, указаны их смещения и размеры. Также тут есть два поля для ввода номеров объектов (быстрый переход) и кнопка для попеременного показа двух заранее заданных объектов.&lt;br /&gt;
#*Заголовок выбранного объекта. Только размеры. 4 тире - это содержимое вложенных секций, которое видно на следующей части.&lt;br /&gt;
#Центральная часть&lt;br /&gt;
#*(сверху) Первая секция объекта. Всегда присутствует. Содержит имя объекта, его координаты, версию игры и вложенную секцию&lt;br /&gt;
#*(снизу) Вторая секция объекта. Иногда присутствует. Если есть, то содержит копию данных из первой секции.&lt;br /&gt;
#*(справа) Содержание вложенной секции, самой загадочной на данный момент.&lt;br /&gt;
#Правая часть.&lt;br /&gt;
#*Вот тут как раз и находится настраиваемый парсер. Эта часть является простым текстовым редактором.&lt;br /&gt;
#Кнопки&lt;br /&gt;
#*'''Показать\скрыть Hex''' - вызывает дополнительное окно с шестнадцатиричным представлением секции&lt;br /&gt;
#*'''Показать\скрыть скрипты''' - если у объекта есть встроенные скрипты, то вызывается окно для их просмтора&lt;br /&gt;
#*'''Прыг''' - при заполнененных полях по обеим сторонам от кнопки циклически переключается между двумя объектами&lt;br /&gt;
#*'''Перегрузить схемы''' - повторное применение схемы к выбранному объекту в случае редактирования внешними инструментами.&lt;br /&gt;
#*'''Записать схему''' - записываются внесенные изменения произведенные прямо в программе, схема применяется заново.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=&amp;quot;both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Схемы ==&lt;br /&gt;
&lt;br /&gt;
Теоретически, существует единое описание всех объектов, позволяющее задать любой из них одной формулировкой. Практически объекты довольно разные, и на первый взгляд (да и на второй) имеют значительные отличия. Для поиска этой единой формулировки, или, формата объекта, раньше я копировал в хексе объект в блокнот и ручками делил на байты, на двойки, на четверки чтобы найти границы либо конкреные значения.&lt;br /&gt;
&lt;br /&gt;
Потом это надоело и появился '''SpawnEd'''. Я хотел найти похожие объекты, чтобы в итоге загнать их под одну гребенку (прошу прощения, формулу). Поэтому требовалось разделить описание разных объектов. Для этого используются схемы.&lt;br /&gt;
&lt;br /&gt;
Что такое схема?&lt;br /&gt;
&lt;br /&gt;
Если посмотреть в таблицу '''&amp;quot;Секция 1 - шапка&amp;quot;''', то вторым параметром в ней будет имя объекта. Оно жестко привязано к используемым параметрам. Всего в файле '''all.spawn''' (первый патч) 190 различных объектов. Но это не все, что есть в игровых ресурсах. Все знают, что из игры были выброшены транспорт, несколько монстров и некоторые аномалии. Поэтому зная, как описаны похожие объекты мы сможем вернуть отсутствующие детали, а заоодно и подредактируем старые.&lt;br /&gt;
&lt;br /&gt;
И в се же, вернемся к схеме. Схема (термин использую я, и не факт, что он тут уместен) - это набор команд парсера, по которым программа выводит содержимое секция объекта. Если вернемся к таблице '''&amp;quot;Секция 1 - шапка&amp;quot;''', то увидим, что в ней есть пара названий, координаты, разделители. Чтобы программа знала, как показать нам содержание этой части, она использует скрипты.&lt;br /&gt;
&lt;br /&gt;
== Использование схем ==&lt;br /&gt;
&lt;br /&gt;
Все на примерах, так будет понятнее.&lt;br /&gt;
&lt;br /&gt;
Для отображение '''&amp;quot;Секция 1 - шапка&amp;quot;''' используется следующая схема:&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; class=&amp;quot;simple&lt;br /&gt;
|+&lt;br /&gt;
! |Команда&lt;br /&gt;
! |Описание&lt;br /&gt;
|-&lt;br /&gt;
| ;секция 1 || первая строка - коментарий. Не обрабатывается, служит для пометок.&lt;br /&gt;
|-&lt;br /&gt;
| read-2 || вывести 2 байта (разделитель)&lt;br /&gt;
|-&lt;br /&gt;
| find-00-объект || вывести несколько байт в ASCII до первого символа '''00''', присвоить имя '''объект'''&lt;br /&gt;
|-&lt;br /&gt;
| find-00-имя || аналогично, но имя строки - '''имя'''&lt;br /&gt;
|-&lt;br /&gt;
| read-2 || вывести два байта (разделитель)&lt;br /&gt;
|-&lt;br /&gt;
| hex-real-X || вывести 4 байта, перевести их в формат дробных чисел&lt;br /&gt;
|-&lt;br /&gt;
| hex-real-Y || присвоить названия '''X Y Z''' &lt;br /&gt;
|-&lt;br /&gt;
| hex-real-Z&lt;br /&gt;
|-&lt;br /&gt;
| hex-real-Xrot || аналогично, но названия '''Xrot Yrot Zrot'''&lt;br /&gt;
|-&lt;br /&gt;
| hex-real-Yrot&lt;br /&gt;
|-&lt;br /&gt;
| hex-real-Zrot&lt;br /&gt;
|-&lt;br /&gt;
| read-8-разд || вывести 8 байт, название '''разд'''&lt;br /&gt;
|-&lt;br /&gt;
| read-4-?? || показать 4 байта, названий '''??''' ( то есть неизвестно)&lt;br /&gt;
|-&lt;br /&gt;
| read-4-версия || ну и так далее...&lt;br /&gt;
|-&lt;br /&gt;
| read-2-секция || ...&lt;br /&gt;
|-&lt;br /&gt;
| read-2-размер-dec || показать 2 байта, и добавить в скобках десятичное значение&lt;br /&gt;
|-&lt;br /&gt;
| next-table || переход на вложенную секцию&lt;br /&gt;
|-&lt;br /&gt;
|+&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Я думаю, что смысл понятен. Есть 4 команды с параметрами, и парсер их выполняет. К нему побайтого постпает содержание секций и он просто кладет их в нужные места (нужные нам).&lt;br /&gt;
&lt;br /&gt;
== Команды в схемах ==&lt;br /&gt;
&lt;br /&gt;
Формат всех команд одинаков, разделителем выступает '''тире''':&lt;br /&gt;
 команда-значение[-название[-опция]]&lt;br /&gt;
  команды:  read, find, hex, next.&lt;br /&gt;
  значение: XX&lt;br /&gt;
  опции:    dec, show&lt;br /&gt;
&lt;br /&gt;
*''read''. Получить и вывести XX байт. Опция ''dec'' добавляет десятичное значение полученных данных&lt;br /&gt;
*''find''. Выводится последовательность поступаемых байт до первого символа XX. Затем последовательность конвертируется в ASCII символы. Иначе говоря, так мы получаем все текстовые значения. Опция ''show'' выведет полученный текст в дополнительное окно (обычно используется для длинных скриптов)&lt;br /&gt;
*''hex''. Значением выступает слово ''real'', однако использовано только для читаемости. Переводит 4 байта в дробное число.&lt;br /&gt;
*''next''. Используется только для перехода к вложенной секции в другой таблице.&lt;br /&gt;
&lt;br /&gt;
== Файлы ==&lt;br /&gt;
&lt;br /&gt;
В комплекте с программой идут несколько файлов.&lt;br /&gt;
*data\object - 191 объект, после символа &amp;quot;равно&amp;quot; - используемая схема. Изначально все объекты имеют схему &amp;quot;0&amp;quot;, то есть &amp;quot;пустышку&amp;quot;, которая просто показывает несколько байт. Я некоторые разобрал, но не факт, что правильно, так что смотрите.&lt;br /&gt;
*data\*.sch - а это сами схемы и есть. обычные текстовые файлы. Которые начинаются с подчеркивания - это схемы второй секции, из программы они не редактируются, так как там все ясно (почти).&lt;br /&gt;
&lt;br /&gt;
Уже занятые схемы: 1-stalker; 2-restrictor, smart_terrain; 3-m_flesh; 4-actor; 5-breakable_object, всякие lamp; 6-m_trader. 7,8,9 - пустые, их можно использовать для дальнейшей работы. Можно создать до 100 файлов, но я надеюсь, что и десятка должно хватить. Не хватит - копируйте 0.sch под новым именем и пользуйте.&lt;br /&gt;
&lt;br /&gt;
== Пример работы ==&lt;br /&gt;
&lt;br /&gt;
После запуска программа перекинет нас на объект 93, stalker, схема 1. В ней многое описано, но еще и остались непонятные пункты. Но мы сейчас будет разбирать ворону...&lt;br /&gt;
[[S.T.A.L.K.E.R._-_all.spawn_Object_types|Вот тут]] есть описание формата объекта &amp;quot;ворона&amp;quot; ;) Смотрим его:&lt;br /&gt;
 число пример&lt;br /&gt;
 байт&lt;br /&gt;
 2    FC 00&lt;br /&gt;
 4    00 00 00 00&lt;br /&gt;
 4    01 00 00 00&lt;br /&gt;
 4    D9 2D 03 00&lt;br /&gt;
 1    BA&lt;br /&gt;
 3    FF FF FF&lt;br /&gt;
 1    00&lt;br /&gt;
 4    FF FF FF FF&lt;br /&gt;
 4    FF FF FF FF&lt;br /&gt;
 х    monsters\crow\crow&lt;br /&gt;
 1    00&lt;br /&gt;
 6    00 00 00 00 00 00&lt;br /&gt;
 4    80 3F 00 00&lt;br /&gt;
 4    00 00 00 00&lt;br /&gt;
 4    00 00 FF FF&lt;br /&gt;
 4    00 00 00 00&lt;br /&gt;
 4    00 00 00 00&lt;br /&gt;
&lt;br /&gt;
Чтобы увидеть такое, нужно всего лишь добавить схему для вороны. Для этого перейдем на любой объект &amp;quot;ворона&amp;quot; (например, объект 289). Его схема изначально не задана, то есть &amp;quot;пустышка&amp;quot;. Для создания новой схемы (сейчас мы не будет пытаться адаптировать уже существующие) в таблице '''Секция 1 - шапка''' сделайте двойной щелчок на строке '''объект m_crow'''. Откроется окно привязки объектов к схемам. Стрелками выберем схему 7. Она пока не занята. После выбора закроем окно, оно больше не нужно.&lt;br /&gt;
&lt;br /&gt;
Теперь просто напишем следущее в правой части программы, в месте для команд парсера:&lt;br /&gt;
 ;m_crow&lt;br /&gt;
чтобы самим потом вспомнить, для чего эта схема. и дальше еще пару строк (в скобках - мои коментарии, их не нужно писать):&lt;br /&gt;
 ;m_crow&lt;br /&gt;
 read-2 (три двубайтовых значения - почти всегда так начинается секция)&lt;br /&gt;
 read-2&lt;br /&gt;
 read-2&lt;br /&gt;
 read-4 (01000000 - всегда присутствует)&lt;br /&gt;
 read-4 (в зависимости от уровня)&lt;br /&gt;
 read-4&lt;br /&gt;
 read-1 (здесь будет 00, обычно присутствует скрипт, но сейчас его нет)&lt;br /&gt;
 read-4 (а тут одни FF, видимо опущенные параметры)&lt;br /&gt;
 read-4&lt;br /&gt;
 find-00&lt;br /&gt;
Теперь нажмем '''Записать схему''', и увидим уже более осмысленный результат. Немного облагородим вид, добавим названия (которые знаем):&lt;br /&gt;
 ;m_crow&lt;br /&gt;
 read-2-код1&lt;br /&gt;
 read-2&lt;br /&gt;
 read-2&lt;br /&gt;
 read-4&lt;br /&gt;
 read-4-код2&lt;br /&gt;
 read-4&lt;br /&gt;
 read-1&lt;br /&gt;
 read-4&lt;br /&gt;
 read-4&lt;br /&gt;
 find-00-модель&lt;br /&gt;
Ну и в том же духе продожаем пробовать. Обратите внимание, что вторая секция заполнилась автоматом, менять ее можно только внешним редактором в файлах _?.sch, но нам это не нужно сейчас.&lt;br /&gt;
&lt;br /&gt;
Теперь все вороны будут на попадаться в уже полуразобранном виде ;) И можно попробовать посмотреть, подойдет ли эта схема например к собакам. Ищем собаку, меняем ей схему на нашу m_crow и продолжаем дальше.&lt;br /&gt;
&lt;br /&gt;
Вобщем, удачи в исследованиях. И не забывайте делится найденными схемами, которые подходят сразу под несколько объектов, а не только для ворон.&lt;br /&gt;
&lt;br /&gt;
--[[Участник:HikeR|HikeR]] 03:16, 6 мая 2007 (MSD)&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
*в данный момент нет доступных ссылок&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программы]]&lt;/div&gt;</summary>
		<author><name>69.37.164.25</name></author>	</entry>

	</feed>