All spawn чем открыть
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)
Общие для всех объектов параметры (параметры cse_alife_object)
- game_vertex_id = 1112
Глобальный вертекс уровня. Необходим для корректного спавна на нужной локации. - distance = 32.899998
Дистанция от локального вертекса до ближайшего глобального. Обычно не нужна, но некоторые типы объектов требуют правильного значения. - level_vertex_id = 29696
Локальный вертекс уровня. Обычно можно поставить -1, но некоторые типы объектов требуют правильного значения - object_flags = 0xffffffbf
Флаги объекта. Представляет собой бинарный флажок, в котором каждый бит соответствует какому-нибудь переключателю. Вот список переключателей и соответствующих битов:
Работает просто: если соответствующий бит в object_flags установлен в 0, переключатель выключен. Если 1 – включен. Таким образом в 32х битном значении можно хранить 32 переключателя, но в игре используется только 14.
- custom_data = <<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 - все сразу
section2.bin
Представляет собой набор данных для периодического рандомного спавна артефактов на локациях. Состоит из блоков по 20 байт, которые содержат координаты спавна, локальный вертекс и дистанцию от локального вертекса до ближайшего глобального. Модостроителю блок обычно не нужен, для интереса можно посмотреть его содержимое с помощью Universal ACDC, запустив распаковку с ключом –af.
section4.bin
Имеется только в спавнах ЧН и ЗП. Представляет собой game.graph, начиная с ЧН его зашивают прямо в спавн.
way_***.ltx
В файлах way содержатся пути для объектов спавна. Каждый путь начинается с секции в квадратных скобках, в которой указывается имя пути:
Это - распакованный all.spawn для версии игры 1.004. В модостроении может кому пригодиться!
Ну + А распоковать и самому можно, если руки и голова есть.
Королева лучниц Можно, если осторожно. Для меня, например, вообще все эти слова в описании установки темный лес. Что куда кидать, какие то батники, небатники.
ну наконец-то выложили! а я-то совсем распаковать не мог! +10. в следующий раз могу оценку поделить ещё на 10. будет 1
Хм, интересно я не пользуюсь, но в будущем может понадобится, во общем +10
хе-хе, где бы еще человека взять, который обратно запаковывать будет)))))
stalker_ak Взял из темы "Модостроение и скриптописание"? LafuGix Запаковать-то не сложно, надо всего лишь скачать ACDC.
По распаковке алл.спавна с помощью acdc.
Расскажу, как делать это без батников.
Если надо распаковать алл.спавн.
1. Помещаем файл алл.спавн в папку, где находятся файлы от acdc. Лучше создать ее на диске С:
2. Нажимаем ПУСК - Выполнить. Появляется командное окно.
3. Вводим команду cmd. Появляется черное окно.
4. В нем пишем cd\ Далее нажимаем enter. Происходит перенос на другую строчку. Эта команда задает диск С для работы с ним.
5. Далее пишем cd C:\"название папки, куда поместили acdc". Нажимаем enter. Переход на другую строчку. Теперь задали папку с которой будем работать. Вот здесь и надо будет вводить команды для acdc.
6. Вводим acdc.pl -d all.spawn Нажимаем enter.
7. Если асдс подходит для данного алл.спавна, то вскоре все распакуется и распакованные файлы можно будет обнаружить в папке с асдс.
8. Если асдс не подходит, то он выдаст ошибку. Тут же в этом черном окне. Надо будет внимательно прочитать о чем ошибка. Обычно для разных модов не хватает какого-нибудь описания чего-нибудь. Например, может ругаться что не может найти af_soul.
Тогда надо будет открыть файл acdc.pl блокнотом. Там найти, где описываются артефакты и в конце строк с артефактами сделать запись для af_soul, напримере других артефактов. После сохранить файл и заново набрать команду по распаковке.
9. После того, как сделали изменения в алл.спавне, надо будет таким же образом войти в папку с acdc, как описывалось раньше.
10. Набрать следующую команду: acdc.pl -c all.ltx
11. Если все сделали правильно в алл.спавне, то через некоторе время в папке с асдс появится файл all.spawn.new. Его надо будет переименовать в all.spawn
12. Правило при работе с алл.спавном - не забывайте правильно пронумеровывать вновь создаваемые секции. Для этого надо найти самый большой номер секции в алл.спавне. И присваивать своим секциям номера по порядку за этим номером.Сегодня мы разберем основу работы с ACDC. Но. Для начала небольшое отступление. Вы зададите вопрос, почему же лучше работать с ACDC нежели чем с xrSpawner? Отвечаю: xrSpawner при всех его преимуществах имеет множество более значительных минусов. Во первых, xrSpawner не определяет не game_vertex, ни level_vertex. А также он измеряет только позицию. Я думаю работающие с xrSpawner, замечали что, порой обьекты которые они спаунят спаунером не всегда появляются на месте. Или вообще не появляются. Потому что повторяю xrSpawner не определяет вертексы т.е. точная позиция и распределение по АИ-сетке. Итак начнём работу! У нас есть программа ACDC, руки и мозги в голове. Кладём all.spawn в папку utils и жмём на батник "распаковка". Итак all.spawn распакован!Мы там видим файлы alife и way. В файлах alife только обьекты которые спаунятся. А в way только пути. Я думаю с алайфом всё понятно. Разберем way. Пути. Путь это и ест путь. По которому может двигаться живой обьект.Сейчас мы это рассмотрим: Для начала устроим текстовый беспредел Найдём файл alife_l01_escape, а в нём
Код
[869]
; cse_abstract properties
section_name = actor
name = level_prefix_actor_0001
s_rp = 0
position = -139.449829101563,-29.6908683776855,-351.492797851563
direction = 0,0.00895109120756388,0
s_flags = 0x29[spawn]
wpn_binoc
novice_outfit
device_torch
END; cse_visual properties
visual_name = actors\hero\stalker_novice; cse_alife_creature_abstract properties
g_team = 0
g_squad = 0
g_group = 0
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =upd:health = 1
upd:timestamp = 0x75732029
upd:creature_flags = 0x70
upd:position = -139.449829101563,-29.6908683776855,-351.492797851563
upd:o_model = 0
upd:o_torso = 0.00895109120756388,0,-0.999959945678711
upd:g_team = 0
upd:g_squad = 0
upd:g_group = 0; cse_alife_trader_abstract properties
money = 40
trader_flags = 0
character_profile = actorupd:actor_state = 0xd20
upd:actor_accel_header = 0
upd:actor_accel_data = 0
upd:actor_velocity_header = 0
upd:actor_velocity_data = 0
upd:actor_radiation = 0
upd:actor_weapon = 110
upd:num_items = 0Примерно такие строки. Для начала расщедримся Припишем актору в [dont_spawn_character_supplies]
[spawn] такие строки.
[dont_spawn_character_supplies]Код
[spawn]
wpn_binoc
wpn_vintorez
ammo_9x39_pab9 = 20
wpn_usp
ammo_11.43x23_hydro = 22
novice_outfit
device_torchПолучиться что мы подарим Меченому при начале игры Винторез, 600 патронов к нему, пистолет USP и 420 патронов к нему. Так. Теперь Меченый у нас будет крутым рэмбо Теперь ещё и подарим ему денежек.
Код
; cse_alife_trader_abstract properties
money = 40
trader_flags = 0
character_profile = actorВ строчке money напишем любое число. Тока астрономические не надо(не проверял). Ну теперь Меченый не только рэмбо но и миллионер. Теперь займемся кординатами. У нас они такие:
Код
position = -139.449829101563,-29.6908683776855,-351.492797851563
direction = 0,0.00895109120756388,0Это наши позиция и дирекция.
Код
; cse_alife_object properties
game_vertex_id = 19 (Тот самный вертекс на игре)
distance = 0.699999988079071
level_vertex_id = 111256 (вертекс на уровне)
object_flags = 0xffffffbf
custom_data = <<ENDА теперь пропишем туда такие кординаты:
Код
position = -167.232299804688,-25.4363708496094,-354.692901611328
direction = 0,-0.365248799324036,0; cse_alife_object properties
game_vertex_id = 0
distance = 0.699999988079071
level_vertex_id = 82413
object_flags = 0xffffffbf
custom_data = <<END
upd:health = 1
upd:timestamp = 0x75732029
upd:creature_flags = 0x70
upd:position = -167.232299804688,-25.4363708496094,-354.692901611328
upd:o_model = 0
upd:o_torso = -0.365248799324036,0,0.930909931659698
upd:g_team = 0
upd:g_squad = 0
upd:g_group = 0Тепер игра начнётся в здании блокпоста на 2 этаже. С этим мы закончим. Теперь создадим нового НПС:
Код
[871]
; cse_abstract properties
section_name = stalker
name = esc_bridge_soldier1
position = -133.27989196777,-30.146812438965,-372.0263671875
direction = 0.028013030067086,0,0.9996075630188; cse_alife_trader_abstract properties
money = 5000
character_profile = esc_soldier_regular; cse_alife_object properties
game_vertex_id = 20
distance = 16.1000003814697
level_vertex_id = 118083
object_flags = 0xffffffbf
custom_data = <<END
[logic]
active = walker[walker]
path_walk = hodim_dvor
END; cse_visual properties
visual_name = actors\soldier\soldier_bandana_3; cse_alife_creature_abstract properties
g_team = 0
g_squad = 1
g_group = 2
health = 1
dynamic_out_restrictions =
dynamic_in_restrictions =upd:health = 1
upd:timestamp = 0
upd:creature_flags = 0
upd:position = -133.27989196777,-30.146812438965,-372.0263671875
upd:o_model = 0
upd:o_torso = 0.028013030067086,0,0.9996075630188
upd:g_team = 0
upd:g_squad = 1
upd:g_group = 2upd:next_game_vertex_id = 65535
upd:prev_game_vertex_id = 65535
upd:distance_from_point = 0
upd:distance_to_point = 0; cse_alife_human_abstract properties
predicate5 = 1,2,2,1,2
predicate4 = 0,1,1,1Так вот он наш друг НПС солдат на блокпосте Тут уже знакомы строки. Позиция, дирекция вертексы. Но есть кое что новое
Код
[logic]
active = walker[walker]
path_walk = hodim_dvorЭлементарная логика НПС. hodim_dvor-Это путь по которому будет ходить НПС. НПС есть всё готово. Но путя то у нас нет Создадим его в файле way_l01_escape. Припишем вот такие строчки.
[hodim_dvor]
points = p0,p1
p0:name = name00
p0:position = -120.44634246826,-30.15016746521,-363.68786621094
p0:game_vertex_id = 24
p0:level_vertex_id = 132887
p0:links = p1(1)p1:name = name01 номер точки
p1:position = -132.61611938477,-30.142726898193,-363.87365722656 - только позиция
p1:game_vertex_id = 19 вертекс на игре
p1:level_vertex_id = 118862 вертекс на уровне
p1:links = p0(1) на какую точку после этой перейдёт НПС. (тут он будет ходить туда сюда, если не написать линкс то он остановиться на месте)Дата: 14.06.2013
Версия сборки: 0.2
Собрал в архив: Earthworm-JimРаспаковщик/Запаковщик all.spawn игр S.T.A.L.K.E.R. - Тень Чернобыля, Чистое Небо, Зов Припяти и модов к ним.
У некоторых не распаковывает all.spawn, при запуске файла .bat "вылазит" окно запустить с помощью программы.
В этой версии это исправлено.Распаковывает/Запаковывает all.spawn ТЧ, ЧН, ЗП любых версий, и большинства модов к ним.
Earthworm-Jim, Спасибо за проделанный адский труд по сборке Universal ACDC в архив
Ну, а если серьезно, чем не понравился архив сделанный KD87? Из-за слишком большого количества батников?Спасибо за проделанный адский труд по сборке Universal ACDC в архив
Ну, а если серьезно, чем не понравился архив сделанный KD87? Из-за слишком большого количества батников?
Для себя сделал. Собрал всё что нужно. Описание написал, чё да как. И да, лишние батники удалил. А чё?А почему когда я все сделал как надо и запускаю Декомпилировать all.spawn.bat у меня открывается батник, потом открывается меню с выбором програм вручную, какую прогу выбирать, Active Perl? Или это окошко вообще не должно вылезать?
antonnkz76 ну. я подозреваю, что когда ты устанавливал Active Perl, то не ставил ассоциацию с файлами, относящимися к этой программе. Вот оно и вылезло. Попробую в этом окошке выбери использовать программу Active Perl.
Earthworm-Jim, пробовал, ну батник все равно пишет: нажмите любую кнопку чтобы закрыть. Ну я жму, смотрю - никакой папки all с изменениями внутри нет
antonnkz76 переустанови Active Perl, и поставь галочку при установке, где будет написано, что вроде: association with files .pl
Earthworm-Jim, нет такого, вообще даже подобного
Добавлено (14.04.2012, 17:12)
---------------------------------------------
ААА, точняк, пишет: не найден файл sections.ini , скинь ссыль на этот файл плизantonnkz76 файл sections.ini создаётся при распаковке.
Добавлено (14.04.2012, 17:17)
---------------------------------------------
antonnkz76 у тебя при установке всё должно быть вот так отмечено:Читайте также: