*.spawn compiler/decompiler (Universal ACDC) — различия между версиями

Материал из xrWiki
Перейти к: навигация, поиск
(Новая страница: «<div style="padding: .5em 1em; float: right; background: #f2f2f2; border: 1px solid #aaaaaa;"> <big>'''Universal ACDC'''</big> ---- {| style="border: none" | '''…»)
 
Строка 8: Строка 8:
 
|-
 
|-
 
| '''Последняя версия''' || 1.31 (30.08.2012)
 
| '''Последняя версия''' || 1.31 (30.08.2012)
|-
 
| '''Платформа'''        || x86, x86-64
 
 
|-
 
|-
 
| '''Написан на'''      || Perl 5
 
| '''Написан на'''      || Perl 5
Строка 235: Строка 233:
 
ACDC для ТЧ — bardak, для ЗП — bardak, Kolmogor. Все остальное — K.D.<br />
 
ACDC для ТЧ — bardak, для ЗП — bardak, Kolmogor. Все остальное — K.D.<br />
 
Используйте/выкладывайте где и как хотите, с указанием авторов.
 
Используйте/выкладывайте где и как хотите, с указанием авторов.
 +
 +
[[Категория:Скрипты на Perl]]

Версия 15:56, 3 июня 2013

Universal ACDC


Тип Компилятор/декомпилятор
Автор K.D.
Последняя версия 1.31 (30.08.2012)
Написан на Perl 5
Обратная связь AMK форум

Утилита предназначена для распаковки и запаковки all.spawn/level.spawn от любого билда, начиная с 1265.

Основные возможности:

  • распаковка оригинальных спавнов ТЧ, ЧН, ЗП и билдов ТЧ, начиная с xrCore build 1265
  • распаковка спавнов от модов (требуется папка конфигов от мода)
  • конвертация спавна в любую другую версию
  • массовая замена значений game vertex в распакованном спавне
  • разбивка all.spawn на level.spawn и level.game

Что нужно для работы:

  • собственно, сам спавн (all.spawn, level.spawn)
  • game.graph (только если распаковываете all.spawn). Если all.spawn от билда 3120, ЧН или ЗП — game.graph не нужен (он вшит в спавн).
  • папка configs (если распаковываете мод и acdc жалуется на unknown section)

Для корректной работы используйте с stkutils строго последней версии.

Установка

  1. Установите ActivePerl.
  2. Распакуйте архив со скриптом в нужную папку.
  3. Скопируйте библиотеку модулей stkutils в папку с библиотеками Perl (например, C:\Perl\lib) или в папку со скриптом.

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

Распаковка спавна

Команда:

 -d <spawn_file> [common_options]
  • -d <spawn_file>
    Путь до спавна.
  • common_options
    Общие опции. См. ниже.

Запаковка спавна

Команда:

 -compile <dir> [-idx <index_file>] [-f <flag1,flag2,...>] [common_options]
  • -compile <dir>
    Папка, в которой лежит распакованный спавн. Если работаете в текущей папке, <dir> не нужно.
  • common_options
    Общие опции. См. ниже.
  • -idx <index_file>
    С этим ключом скрипт сформирует ltx с секциями вида:
[13_box_wood_01_0021]		;формат - "индекс_локации"_"имя_объекта"
id = 2907			;id объекта
story_id = -1			;story_id объекта

Такие записи создадутся для ВСЕХ объектов из спавна.
Если указать ключ -idx без пути до конфига, то он будет создан в папке с acdc (spawn_ids). Зачем это нужно? В игре вы сможете открыть этот файл из скриптов и найти нужный вам объект. Если раньше для нахождения нужного id объекта по имени требовалось перебрать все объекты в игре, теперь это можно сделать, просто считав id из нужной секции конфига.

Конвертирование спавна

Команда:

 -convert <file> -version <new_version> [-ini <file>] [common_options]
  • -convert <file>
    Файл, который нужно сконвертировать. Можно указывать как запакованный (*.spawn) спавн, так и распакованный (alife_***.ltx). Внимание! Так как граф и кросс-таблицы в ЧН и ЗП вшиты в спавн, для конвертирования ЗАПАКОВАННЫХ спавнов ТЧ в эти форматы вам потребуется положить в папку с acdc папку levels из игры. Необязательно копировать все файлы, достаточно оставить в папке с каждой локацией файл level.gct.
  • -version <new_version>
    Новая версия спавна. Подобрать версию вы сможете, посмотрев файл spawn_versions.txt
  • -ini
    Файл тонкой настройки конвертации (convert.ini). Если не указан, используется convert.ini, лежащий в текущей папке.
  • common_options
    Общие опции. См. ниже.

Также поддерживается тонкая настройка конвертации через файл convert.ini.
В файле есть две секции: [exclude] и [change]. В секции exclude можно прописать те секции, которые надо удалить из спава при конвертации. Пример:

[exclude]
sections = m_trader, m_car, flesh_weak

Также поддерживается маскирование. Вместо кучи однотипных секций (stalker_zombied, stalker_sakharov и т.д.) можно задать маску, используя символ *. Пример: stalker*. Такая запись приведет к исключению всех секций, в названии которых есть слово stalker.

В секции [change] прописываются имена тех секций, в которых нужно что-то поменять или дополнить. Пример:

[change]
sections = inventory_box

Далее заполняете файл записями для тех секций, которые вы прописали в change. Пример:

[inventory_box]			;section_name нужной секции
add:custom_data = PREVED	;префикс add используется для тех параметров, в которые нужно добавить
add:game_vertex_id = 10000	;необходимое значение (если число - складывается, если строка - добавляется в конец)
rep:level_vertex_id = 0		;префикс rep используется для параметров, которые необходимо заменить на что-то

Общий пример. Следующий конфиг приведет к тому, что у всех сталкеров прибавится 500 к game_vertex'у и visual_name сменится на визуал вояки в противогазе:

[exclude]

[change]
sections = stalker

[stalker]	
add:game_vertex_id = 500
rep:visual_name = actors/soldier/soldier_antigas.ogf

Массовая замена вертексов

Команда:

acdc -parse <file> -old <old_gvid0> -new <new_gvid0> [-way] [common_options]
  • -parse <file>
    Имя ltx, в котором находится спавн.
  • -old <old_gvid0>
    Старый начальный game_vertex_id локации.
  • -new <new_gvid0>
    Новый начальный game_vertex_id локации.
  • -way
    Обрабатывает также файл way_*.ltx для этой же локации.
Пример:
acdc -parse alife_l01_escape.ltx -old 0 -new 934

Разбивка all.spawn на level.spawn

Команда:

acdc -split <file> [-use_graph] [-way] [common_options]
  • -split <file>
    Разбиваемый спавн. Для восстановления graph point'ов необходимы level.spawn для всех локаций, находящихся в графе. Их следует поместить в папку levels согласно их положению в геймдате сталкера — по папкам, соответствующим локациям. Папка levels должна быть в папке с acdc (или путь до нее можно задать ключом — читайте далее).
  • -use_graph
    Использовать game.graph для восстановления граф-поинтов. Плюс — не нужны level.spawn, минус — не восстанавливаются имена граф-поинтов (за исключением граф-поинтов переходов).
  • -way
    Генерировать level.game из спавна.

Общие опции

  • -out <file> Путь до файла/папки с результатом. Имеет разный смысл для разных опций:
    • для -decompile, -parse — папка с результатом
    • для -compile, -convert — результирующий файл.
    • для -split — папка levels, куда сохранять level.spawn.
  • -scan <scan_dir>
    Путь до папки с конфигами. Используется в случае спавнов от модов.
  • -g <graph_dir>
    Путь до папки с game.graph. Бесполезен для -compile и -parse, а также если в случае работы со спавном ЧН, ЗП, build 3120.
  • -level
    Обрабатывать спавн как level.spawn.
  • -af
    Также распаковываются\запаковываются места спавна артефактов в аномалиях (section2.bin).
  • -nofatal
    Отключает вылет при фатальной ошибке, заменяя ее предупреждением.

Замечания

Если acdc генерирует ошибку 'unknown clsid ... for section...' , это означает, что в данном моде добавлены новые пары клиентский/серверный класс в class_registrator.script. Дабы не усложнять работу с acdc, такие пары не определяются автоматически. Лучше всего сообщить об этом автору, однако, если вы понимаете, что находится внутри class_registrator.script, можете добавить новые сеты в clsids.ini сами. Сеты добавляются в таком формате:

clsid = соответствующий_серверный_класс

Пример:

ZS_ELECT  = se_zone_anom

Любые имена опций можно сокращать. К примеру, необязательно использовать именно -use_graph, скрипт поймет также и -use, и -u. Однако ряд опций при сокращении их имени могут конфликтовать друг с другом. -compile нельзя сократить до -c, поскольку в таком случае скрипту неясно, что имеется ввиду: -compile или -convert. В таком случае наиболее короткое имя для compile будет таким: -com

Внимание!

При работе со спавнами билдов 25xx перед каждой новой распаковкой ОБЯЗАТЕЛЬНО следует удалять sections.ini и сканировать конфиги заново.

История правок

1.31

  • [!] изменен алгоритм сканирования конфигов
  • [!] изменен приоритет запросов из clsids.ini, теперь данные из него перекрывают внутренние таблицы
  • [!] скрипт адаптирован под новую систему отладочных сообщений
  • [i] поправлена логика работы с пакетом актора в ЧН
  • [+] добавлена возможность вынесения лога в файл
  • [+] добавлена возможность вынесения сетов в отдельный конфиг-файл

1.30

  • [i] теперь новая версия обработчика ошибок по-прежнему обрабатывает спавн Народной солянки
  • [i] исправлены проблемы распаковки level.spawn некоторых билдов

1.29

  • [i] исправлена ошибка распаковки level.spawn билдов
  • [i] исправлена ошибка распаковки спавна ЧН
  • [i] мелкие правки

1.28

  • [i] исправлено игнорирование парсером ключа -way в режиме split.
  • [i] исправлена ошибка сканирования конфигов при компиляции.
  • [i] исправлена ошибка чтения секций некоторых se-классов.
  • [i] исправлена ошибка разбивки спавна, из-за которой генерировались level.spawn неправильного формата.
  • [+] добавлен контроль дупликатов актора при компиляции.

1.27

  • [i] исправлена ошибка парсера, в некоторых случаях приводившая к порче логики.
  • [i] исправлено создание папок при сохранении результата.
  • [+] добавлена переинициализация параметров секции после смены класса при конвертации. Это расширяет диапазон версий, доступных для конвертирования.
  • [+] добавлена поддержка маск при конвертации.
  • [+] добавлен ключ -ini в режиме конвертации

1.26

  • [i] поправлена распаковка спавнов ЧН.
  • [+] добавлено автоматическое заполнение версии спавна из первой секции (если актора в спавне нет).
  • [+] что-то еще по мелочи, не помню.

1.25

  • [i] отключен вывод пустого параметра spawned_obj при распаковке.
  • [+] реализовано автоматическое заполнение параметров version и script_version при запаковке спавнов с секциями из разных версий игры. Версия берется из конфига актора.

1.24

  • [i] исправлена распаковка/запаковка спавна билда 2571.
  • [i] исправлена запись guids.ltx
  • [i] мелкие правки

1.23b

  • [+] убрано предупреждение "state data left" при распаковке спавнов ЗП, запакованных ранее с помощью acdccop.pl
  • [i] исправлены ошибки split, из-за которых могли получаться кривые level.spawn
  • [i] переделана логика чтения/записи пакетов se_stalker/se_monster
  • [i] мелкие изменения

1.22b

  • [+] добавлен ключ -nofatal

1.21b

  • [i] исправлены небольшие опечатки в коде.
  • [i] парсер теперь корректно читает значения с комментариями.

1.2b

  • [+] небольшие правки по конвертации.
  • [+] добавленные в модах соответствия clsid -> серверный класс теперь редактируются в отдельном конфиге (clsids.ini).
  • [+] ошибка при встрече незнакомого clsid теперь выдается при распаковки секции спавна с таким clsid, а не при сканировании конфигов, как раньше.

1.1b

  • [+] проверена распаковка билд-спавнов, решена проблема декомпиляции спавнов билдов 25хх.
  • [+] добавлен контроль наличия параметра version в секциях распакованного спавна.
  • [i] исправлено исключение файла со spawn_id объектов при сканировании конфигов.

1.0b

  • [+] основательно переработан код, часть скрипта вынесена в отдельные модули.
  • [i] исправлены все неработавшие функции.
  • [+] увеличена скорость выполнения кода, уменьшены требования по памяти.

Разработчики

ACDC для ТЧ — bardak, для ЗП — bardak, Kolmogor. Все остальное — K.D.
Используйте/выкладывайте где и как хотите, с указанием авторов.