all.spawn — различия между версиями
RedPython (обсуждение | вклад) (Новая страница: «__NOTOC__ == Определение == '''all.spawn''' — важная часть игровой системы ИИ. В этом файле хранятся н…») |
RedPython (обсуждение | вклад) м |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
__NOTOC__ | __NOTOC__ | ||
− | |||
'''all.spawn''' — важная часть игровой системы ИИ. В этом файле хранятся настройки спавна различных игровых сущностей. Файл бинарный, блокнотом не распаковывается. | '''all.spawn''' — важная часть игровой системы ИИ. В этом файле хранятся настройки спавна различных игровых сущностей. Файл бинарный, блокнотом не распаковывается. | ||
Строка 244: | Строка 243: | ||
− | |||
==Автор== | ==Автор== | ||
Статья написана '''K.D.''' | Статья написана '''K.D.''' | ||
+ | |||
+ | [[Категория:Справка]][[Категория:Форматы файлов]] |
Текущая версия на 21:30, 2 декабря 2017
all.spawn — важная часть игровой системы ИИ. В этом файле хранятся настройки спавна различных игровых сущностей. Файл бинарный, блокнотом не распаковывается.
Структура[править]
all.spawn, как и подавляющее число игровых файлов сталкера, имеет RIFF-формат. Он состоит из многочисленных вложенных друг в друга чанков. На самом нижнем уровне вложенности находятся чанки секций предметов, которые в свою очередь, в точности соответствуют формату нет-пакета этого предмета в игре. В принципе, упрощенно можно считать, что all.spawn содержит начальные нет-пакеты, которыми движок инициализирует объекты сталкера. Также в нем содержатся настройки автоматического спавна артефактов на локациях и пути движения объектов.
Редакторы[править]
all.spawn может редактироваться несколькими способами:
- Официальный способ — создание спавна в Level Editor. После создания или правки спавна для каждой локации запускается утилита xrAI, которая объединяет все локальные спавны в один большой глобальный. Способ, пожалуй, самый неплохой, но требующий некоторого количества времени и наличия исходников локации. Отлично подходит для заселения локации с нуля.
- xrSpawner. Упоминаю только как дань истории. Пользоваться утилитой не рекомендую – может испортить спавн.
- ACDC. Скрипт легендарного bardak’а, написанный на Perl. Идеально подходит для мелких правок и анализа спавна. На сегодня существуют версии acdc под все части сталкера и все патчи, их вы можете найти тут. Отдельно выделю Universal ACDC, поддерживающий сразу все версии спавна, включая билд-спавны.
Описание[править]
ACDC в процессе работы создает ряд файлов формата ltx, для редактирования которых подойдет обычный блокнот. Файлы содержат ряд секций с параметрами, как правило, соответствующими параметрам объектов в LE. Если будет необходимо, буду давать пояснения по ходу.
all.ltx[править]
Содержит общую информацию о спавне:
- graph_version — версия game.graph. ТЧ – 8, ЧН, ЗП – 10.
- guid — глобальный идентификатор спавна. Подробнее о guid.
- graph_guid — глобальный идентификатор game.graph. Используется для проверки соответствия спавна и графа.
- level_count — количество уровней
Далее идут имена файлов, полученных при декомпиляции спавна.
alife_***.ltx[править]
В этих файлах содержатся секции с настройками спавна объектов игры. В all.spawn объекты идут подряд, при распаковке разбиваются по принадлежности к локации (которая в свою очередь определяется по глобальному вертексу). Каждая секция начинается с индекса в квадратных скобках, что означает начало новой секции. Индексы выдаются acdc произвольно и в игре ничего не означают.
Перед разбором немножко теории. Как известно, в сталкере существует развитая система классов объектов. Немного опишу систему серверных классов. Есть абстрактный класс CSE_Abstract, от которого наследуют все остальные классы (намеренно упрощаю). Если взять, скажем, оружие (автомат), то для него дерево наследования будет выглядеть так:
CSE_AlifeWeaponMagazined->CSE_AlifeWeapon->CSE_AlifeItem->CSE_AlifeDynamicObject->CSE_AlifeObject->CSE_Abstract.
В данном случае нам важен такой факт: при наследовании класса наследуются также и все параметры объекта, из чего следует, что у объектов есть общие параметры, а есть характерные только для них. Родственные объекты (оружие, например) имеют больше общих параметров.
Следует сказать и о типах параметров. Их два — M_SPAWN и M_UPDATE. Параметры первого типа определяют начальный спавн объекта. В параметрах второго типа сохраняется текущее состояние объекта при игровых апдейтах. В распакованном спавне это параметры с индексом upd. В спавне для этих параметров следует указывать те же значения, что и для одноименных обычных параметров, так как движок при первом же апдейте начнет использовать апдейт-параметры. Например, если поменять координаты спавна в position, но забыть поменять координаты upd:position, изменения не будут учтены при спавне. Апдейт-параметры есть не у всех типов объектов, по тексту будет указано, у каких есть.
Пока опишу только полезные для модостроителей параметры. Остальные не нужны практически никогда.
Общие для всех объектов параметры (параметры cse_abstract)[править]
- section_name = climable_object
Имя секции объекта. Описание секции задается в конфигах, имя секции имеет критически важное значение – именно по этому имени движок узнает, какой класс имеет данный объект. - name = clmbl#0
Имя объекта. Давайте своим объектам уникальные имена. - position = 127.544509887695, 8.15257263183594, 67.6282119750977
Координаты спавна объекта. - direction = 0.0420370548963547, 0.0266562905162573, 1.56232643127441
Ориентация объекта в пространстве. Каждый параметр представляет собой угол поворота объекта в радианах относительно одной из осей. - version = 123
Версия спавна. Править обычно не надо, параметр нужен для нормальной работы universal acdc. - script_version = 8
Версия скриптовой системы серверных объектов. Править обычно не надо, параметр нужен для нормальной работы universal acdc.
Общие для всех объектов параметры (параметры cse_alife_object)[править]
Эти параметры также общие для всех объектов, которые правят модостроители. Этих параметров нет у граф-поинтов, но они есть только в level.spawn и их не надо править – они представляют собой заготовки для xrAI.
Также перед чтением этого раздела советую изучить статью ИИ в Сталкере. Отпадут вопросы про глобальный и локальный вертексы.
- game_vertex_id = 1112
Глобальный вертекс уровня. Необходим для корректного спавна на нужной локации. - distance = 32.899998
Дистанция от локального вертекса до ближайшего глобального. Обычно не нужна, но некоторые типы объектов требуют правильного значения. - level_vertex_id = 29696
Локальный вертекс уровня. Обычно можно поставить -1, но некоторые типы объектов требуют правильного значения - object_flags = 0xffffffbf
Флаги объекта. Представляет собой бинарный флажок, в котором каждый бит соответствует какому-нибудь переключателю. Вот список переключателей и соответствующих битов:
flUseSwitches = 0x00000001; //Используется только редактором уровней ([[LevelEditor]]
//из X-Ray SDK) и отвечает за видимость в редакторе
//флажков flSwitchOnline и flSwitchOffline
flSwitchOnline = 0x00000002; //Можно ли переводить в онлайн
flSwitchOffline = 0x00000004; //Можно ли переводить в оффлайн
flInteractive = 0x00000008;
flVisibleForAI = 0x00000010; //Для зон отвечает за возможность реакции на контакт
flUsefulForAI = 0x00000020;
flOfflineNoMove = 0x00000040; //По идее должен отвечать за отсутствие движения в
//оффлайне, но не используется
flUsedAI_Locations = 0x00000080; //Использовать ли левел вертекс для спавна
flUseGroupBehaviour = 0x00000100;
flCanSave = 0x00000200; //Сохранять ли объект
flVisibleForMap = 0x00000400; //Устанавливает видимость на миникарте
flUseSmartTerrains = 0x00000800;
flCheckForSeparator = 0x00001000; //Флаг для компилятора xrAI. Устанавливает, проверять
//ли данный спейс-рестриктор на разделение АИ-сетки.
//В игре не используется.
flCorpseRemoval = 0x00002000;
Работает просто: если соответствующий бит в object_flags установлен в 0, переключатель выключен. Если 1 – включен. Таким образом в 32х битном значении можно хранить 32 переключателя, но в игре используется только 14.
- custom_data = <<END
Содержимое конфига текущего объекта – логика, описание респавна, конфиг смарт-террейна и много другое. Можно писать прямо тут, можно делать ссылки на игровые конфиги. Вот пример:
[logic]
cfg = scripts\agroprom\zooman.ltx
END
- story_id = 1023
Уникальный игровой идентификатор объекта. Используется для быстрого получения объекта в скриптах, в которых есть специфические функции для этого. Обычно задается для сюжетных персонажей и предметов для облегчения манипулирования ими.
Больше у объектов общих параметров нет. Объекты (и, соответственно, параметры) можно далее разделить на две группы: имеющие визуал (игровую модель) и не имеющие ее. К первым относится большая часть объектов — живые существа и различные предметы. Ко вторым — лестницы, области пространства (рестрикторы, аномалии, смарт-каверы, смарт-террейны, переходы между уровнями). Рассмотрим их по отдельности.
Параметры объектов без визуала[править]
Каждый объект описывается формой (shape).
- shapes = 1
Количество форм, которыми описывается объект - shape_0:type = sphere
Тип формы. Может быть сфера (sphere) или коробка (box)
Для сферы:
- shape_0:offset = 0,0,0
Смещение центра сферы от координат объекта, указанных в position. - shape_0:radius = 2
Радиус сферы
Для коробки:
- shape_0:axis_x = 1,0,0
Длина по оси X - shape_0:axis_y = 0,1,0
Длина по оси Y - shape_0:axis_z = 0,0,1
Длина по оси Z - shape_0:offset = 0,0,0
Смещение центра коробки от координат объекта, указанных в position.
Длины коробки так странно выглядят, потому что в спавне они заданы как матрица трансформации объекта, поскольку движок оперирует именно ими. Если описываете объект правильным параллелепипедом, значение имеют только «диагональные» координаты: первая для X, вторая для Y, третья для Z. Остальные должны быть нулевые. Если же меняете их, грани шейпа в игре не будут параллельны, коробка будет «кривой».
Для аномалий обычно используется сфера, для всего остального – коробка.
- restrictor_type = 3
Тип рестриктора для объекта.
Параметры аномалий[править]
Есть два типа аномалий: статичные (не двигающиеся с места) и динамические. Динамические аномалии могут двигаться в пространстве (помните аномалии в X-18?), но не могут порождать артефактов. Оба типа имеют разный набор параметров.
Статичные аномалии:
- offline_interactive_radius
Радиус аномалии в оффлайне - artefact_spawn_count
Количество рандомных точек спавна артефактов - artefact_position_offset
Смещение в section2.bin, по которому расположены конфиги точек спавна артефактов
Существует тип статичных аномалий, который имеет анимации. Это cse_alife_zone_visual, в игре это жарки, например. У них есть еще два параметра:
- idle_animation
Имя анимации в режиме ожидания - attack_animation
Имя анимации при активации аномалии.
Динамические аномалии:
- motion_name
Путь до файла с объектной анимацией (anm)
Параметры переходов между уровнями[править]
- dest_game_vertex_id
Глобальный вертекс точки, куда будем прыгать. Необходимо корректное значение на новой локации - dest_level_vertex_id
Локальный вертекс точки назначения
- dest_position
Позиция, в которую прыгаем - dest_direction
Направление взгляда после прыжка - dest_level_name
Имя локации назначения. Используется вроде только в LevelEditor - dest_graph_point
Граф-поинт назначения. Используется вроде только в LevelEditor
Параметры смарт-каверов[править]
- description
Тип смарт-кавера - enter_min_enemy_distance
Минимальное расстояние до врага, при котором непись туда лезет - exit_min_enemy_distance
Минимальное расстояние до врага, при котором непись вылезает из укрытия - is_combat_cover
Боевое ли укрытие
Параметры объектов с визуалом[править]
К этому типу объектов принадлежит большая часть объектов сталкера. Это монстры, сталкеры, актор, лампочки, стекла, предметы и оружие. Рассмотрим их с разделением по категориям.
Общий параметр:
- visual_name = actors\stalker_neutral\stalker_neutral_1
Тут все просто: ссылка на модель объекта от папки meshes. Пишется без расширения ogf, будьте внимательны.
Лампочки[править]
- main_color
Цвет - main_brightness
Яркость - main_color_animator
Световая анимация (к примеру, мигание) - main_range
Дальность свечения - light_flags
Флаги лампочки - lamp_fixed_bones
Кость, за которую фиксируется лампочка - health
«Здоровье» лампочки - main_cone_angle
Растр светового конуса - glow_radius
Радиус свечения - ambient_bone
Живые существа[править]
У сталкеров, монстров и актора есть общие параметры:
- g_team
Команда. Оставляйте нулем. - g_squad
Отряд. Оставляйте нулем. - g_group
Группа. Оставляйте нулем. - health
Здоровье. Поставите 0 — заспавнится труп. - dynamic_out_restrictions
Рестрикторы, за пределами которых объекту нельзя быть. - dynamic_in_restrictions
Рестрикторы, внутри которых объекту нельзя быть. - equipment_preferences = 0, 0, 1, 1, 0
Предпочтение снаряжения. Имеет отношение к файлам ai\*.efd, лучше не трогать. - main_weapon_preferences = 2, 0, 2, 1
Предпочтение оружия. Имеет отношение к файлам ai\*.efd, лучше не трогать. - upd:health = 1
Здоровье. Должно соответствовать health - upd:timestamp
Временная метка. Не трогать - upd:position
Апдейт координат спавна. Должно соответствовать position. - upd:o_torso
Апдейт направления туловища объекта. Задается так же, как и direction, в радианах.
У актора, сталкеров и торговцев также можно задать следующие параметры:
- money
Количество денег - trader_flags
Флаг торговли. - character_profile
Ссылка на профиль.
Предметы[править]
Физические предметы, которые нельзя брать в инвентарь:
- physic_type
- mass
Масса предмета - fixed_bones
Кость фиксации предмета (если предмет нельзя сдвинуть)
Инвентарные предметы[править]
Оружие, еда, аптечки – все, что можно взять в инвентарь.
- condition
Состояние. Изменяется от 0 до 1.
Дополнительные параметры для оружия:
- ammo_current
Текущее количество патронов в стволе - addon_flags
Навешанные аддоны. Бинарный флаг по сути, но распишу подробней:- 0 – нету
- 1 – прицел
- 2 – гранатомет
- 3 - прицел+подствольный гранатомет
- 4 – глушитель
- 5 - прицел + глушитель
- 6 - подствольный гранатомет + глушитель
- 7 - все сразу
- ammo_type
Тип патронов. 0 - обычные, 1 - бронебойные. Если есть еще - идут в том же порядке, что указан в конфигах. - upgrades
Только ЗП или ЧН старше 4 патча. Тут можно указать через запятую список сделанных апгрейдов для оружия. - upd:current_fire_mode
Режим стрельбы. 0 - одиночными, 1 - два патрона, 2 - очередью. Если режима по 2 патрона у оружия нет, то режим очередью будет 1. - upd:grenade_mode
Только у оружия с возможностью крепления подствольника. Режим подствольника. 0 - выключен, 1 – включен - upd:condition = 1
Состояние оружия. Необходимо обязательно ставить этот параметр, иначе оружие заспавнится сломанным.
section2.bin[править]
Представляет собой набор данных для периодического рандомного спавна артефактов на локациях. Состоит из блоков по 20 байт, которые содержат координаты спавна, локальный вертекс и дистанцию от локального вертекса до ближайшего глобального. Модостроителю блок обычно не нужен, для интереса можно посмотреть его содержимое с помощью Universal ACDC, запустив распаковку с ключом –af.
section4.bin[править]
Имеется только в спавнах ЧН и ЗП. Представляет собой game.graph, начиная с ЧН его зашивают прямо в спавн.
way_***.ltx[править]
В файлах way содержатся пути для объектов спавна. Каждый путь начинается с секции в квадратных скобках, в которой указывается имя пути:
- [agr_smart_terrain_4_4_sleep_3]
Далее идут настройки пути:
- points = p0,p1
Перечисление индексов всех точек (waypoint), содержащихся в пути
Конфиги точек:
- p0:name = name00
Имя точки. Также может содержать флаги для парсера логики. Подробнее о флагах (и вообще путях) читайте тут. - p0:position = 19.5853118896484,0.166345998644829,24.0984535217285
Координаты точки - p0:game_vertex_id = 1111
Глобальный вертекс точки - p0:level_vertex_id = 168909
Локальный вертекс точки - p0:links = p1(1)
Связи с другими точками. Задаются в формате: индекс_точки(вероятность_перехода_в_точку). Если указано 1, объект обязательно перемещается именно в эту точку, если, скажем, 0.5 – объект переместится в точку с вероятностью 50%.
Автор[править]
Статья написана K.D.