*.spawn compiler/decompiler (Universal ACDC) — различия между версиями
RedPython (обсуждение | вклад) (Новая страница: «<div style="padding: .5em 1em; float: right; background: #f2f2f2; border: 1px solid #aaaaaa;"> <big>'''Universal ACDC'''</big> ---- {| style="border: none" | '''…») |
RedPython (обсуждение | вклад) |
||
Строка 8: | Строка 8: | ||
|- | |- | ||
| '''Последняя версия''' || 1.31 (30.08.2012) | | '''Последняя версия''' || 1.31 (30.08.2012) | ||
− | |||
− | |||
|- | |- | ||
| '''Написан на''' || 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
строго последней версии.
Содержание
Установка
- Установите ActivePerl.
- Распакуйте архив со скриптом в нужную папку.
- Скопируйте библиотеку модулей
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.
Используйте/выкладывайте где и как хотите, с указанием авторов.