SDK для 4A Engine своими руками |
Здравствуйте, гость ( Авторизация | Регистрация )
SDK для 4A Engine своими руками |
01.03.2019, 00:36
Сообщение
#821
|
|
. Репутация: 750 Куратор темы Сообщений: 7072 Регистрация: 30.07.2010 |
Мне тут предложили создать отдельную тему по поводу редактора уровней который я показывал в теме "Вскрытие ресурсов Метро 2033", так что теперь все новости и прочее будет здесь.
Скачать актуальную версию можно тут: Скачать последнюю тестовую версию можно тут: Чейнджлог Версия от 28 февраля 2019:
Версия от 17 марта 2019:
Версия от 23 марта 2019:
Версия от 30 апреля 2019:
Версия от 18 августа 2019:
Версия от 25 августа 2019:
Версия от 20 января 2020:
Версия от 30 марта 2020:
Версия от 28 июня 2021:
Версия от 20 сентября 2021:
Версия от 4 ноября 2021:
Версия от 18 ноября 2021:
Версия от 6 февраля 2022:
Консольные утилиты Полноценный распаковщик и запаковщик для Last Light, readme в архиве Программы для работы с конфигами и конвертер моделей Исходники можно найти в исходниках level_editor'а. В архиве содержится три программы: split.exe, binunp.exe и model.exe. Первая split.exe, предназначена для разбития scripts.bin на отдельные файлы и сборки обратно. Для разбития поместить файл scripts.bin в рабочей папке и запустить без параметров или с одним параметром -d(без разницы). Код split.exe Если всё прошло хорошо должна появится папка scripts с большим количеством .bin файлов в ней. Для обратной сборки запустить с ключом -c: Код split.exe -c Скрипты при сборке опять таки берутся из папки scripts в рабочей папке. Вторая binunp.exe, предназначена для конвертирования .bin конфигов(файлы добытые из scripts.bin, level.bin и некоторые другие) в человеко-читаемый формат и обратно. Именно на её основе строится редактор уровней. Что умеет:
Распаковка level.bin осуществляется следующим образом: Код binunp.exe -l -d level.bin level.txt Где level.bin - имя файла для распаковки. Где level.txt - имя распакованного текстового файла. Запаковка level.bin: Код binunp.exe -l [-k N] -c level.txt level.bin Где level.txt - имя текстового файла для запаковки. Где level.bin - имя нового двоичного файла. Параметр -k необязательный, на месте N указывается тип .bin файла, по умолчанию 5. В 2033 используется 5, в last light 4, в следующих играх 36. Распаковка конфигов с отладочной инфой: Код binunp.exe -l -d file.bin file.txt Где file.bin - имя файла для распаковки. Где file.txt - имя распакованного текстового файла. При попытке распаковать таким образом конфиг без отладочной информации будет выведено сообщение об ошибке следующего вида: Код Exception: Cannot decompile config with kind=4 Распаковка конфигов без отладочной инфы(при помощи скрипта): Код binunp [-v] -s js\script.js file.bin file.txt Где js\script.js - имя скрипта в папке js используемого для разбора конфига. Где file.bin - имя файла для распаковки. Где file.txt - имя распакованного текстового файла. Параметр -v необязательный, если указать то будет выводиться предупреждение в том случае если данные были прочитаны не до конца. Есть специальный случай, если имя файла для распаковки textures.bin, то скрипт не используется, вместо него нужно указать пустую строчку. Код binunp -s "" textures.bin textures.txt Запаковка конфигов: Код binunp.exe [-k N] -c file.txt file.bin Где file.txt - имя текстового файла для запаковки. Где file.bin - имя нового двоичного файла. Параметр -k необязательный, на месте N указывается тип .bin файла, по умолчанию 5. Желательно указывать такой же какой был показан при распаковке. Последняя model.exe, конвертер моделей. Умеет следующее:
Краткая справка доступна при запуске без параметров. Эта инструкция будет дописываться. Сторонние утилиты Сообщение отредактировал Modera - 06.02.2022, 08:21 |
 
|
|
|
|
08.11.2021, 17:29
Сообщение
#822
|
|
Игрок Репутация: 7 Группа: Участник Сообщений: 46 Регистрация: 10.10.2018 |
Modera, не очень понял зачем добавил "cut", я привык постоянно копипастить через пкм, а там теперь на 1 месте в списке cut какое-то. Тем более вместо cut есть же кнопка delete, или эту функцию как-то еще можно использовать? Она тупо удаляет выделенную область? Я пока не разобрался.
Сообщение отредактировал Berkut107 - 08.11.2021, 17:30 -------------------- |
 
|
|
08.11.2021, 17:38
Сообщение
#823
|
|
. Репутация: 750 Куратор темы Сообщений: 7072 Регистрация: 30.07.2010 |
Berkut107, копирует и потом удаляет, так же как во всех других редакторах. По русски это называется "вырезать".
|
 
|
|
08.11.2021, 18:46
Сообщение
#824
|
|
Игрок Репутация: 7 Группа: Участник Сообщений: 46 Регистрация: 10.10.2018 |
Berkut107, копирует и потом удаляет, так же как во всех других редакторах. По русски это называется "вырезать". Да это я понял, просто очень не удобное расположение честно говоря. -------------------- |
 
|
|
08.11.2021, 19:11
Сообщение
#825
|
|
. Репутация: 750 Куратор темы Сообщений: 7072 Регистрация: 30.07.2010 |
Как везде.
|
 
|
|
09.11.2021, 01:15
Сообщение
#826
|
|
Ветеран Репутация: 13 Группа: Участник Сообщений: 79 Регистрация: 26.03.2021 |
Modera, не знаю, может чем-то поможет, но тут в \бин\ лежит вроде бы чуть другая версия 4a script debugger (и утилита для работы со звуком еще со времен HoverAce).
Расковыривать этот архив желания не имею, т.к. не знаю, какие либы, кроме u****.dll нужны. Сообщение отредактировал Ubunter - 09.11.2021, 01:16 -------------------- Если я усну и проснусь через сто лет и меня спросят, что сейчас происходит на гомерудотнет, я отвечу:
Цитата В данный момент обсуждение политических и военных российско-украинских событий запрещено во избежание разжигания межнациональной розни. В тех же целях запрещаются аватары и подписи с государственными символиками. К пользователям, игнорирующим этот запрет, будут применены санкции. |
 
|
|
09.11.2021, 08:21
Сообщение
#827
|
|
. Репутация: 750 Куратор темы Сообщений: 7072 Регистрация: 30.07.2010 |
Ubunter, врядли пригодится, т.к. в релизе луа скриптов уже не осталось. Но всё ровно спасибо.
|
 
|
|
10.11.2021, 20:40
Сообщение
#828
|
|
Опытный Игрок Репутация: 3 Группа: Участник Сообщений: 67 Регистрация: 06.02.2016 |
Modera, не знаю, может чем-то поможет, но тут в \бин\ лежит вроде бы чуть другая версия 4a script debugger (и утилита для работы со звуком еще со времен HoverAce). Расковыривать этот архив желания не имею, т.к. не знаю, какие либы, кроме u****.dll нужны. Кому интересно, залил отдельно, чтобы не качать гигабайт. В архиве так-же есть pdb'шки от uai.dll и uscript.dll. Странно, что эта версия дебагера, собрана почти на 2 месяца раньше, номер сборки больше на 6 единиц, а функционала больше, чем в версии из слитого билда. В целом, все эти файлы имеют лишь историческую ценность. |
 
|
|
18.11.2021, 18:32
Сообщение
#829
|
|
. Репутация: 750 Куратор темы Сообщений: 7072 Регистрация: 30.07.2010 |
Выпустил новую версию. Самое большое отличие от предыдущей это полная загрузка уровней от арктики.1, впрочем я на 95% уверен что никто арктику моддить не будет и это новшество никакой пользы не принесёт. Зато теперь точно известно что следующей будет поддержка исхода, т.к. больше ничего не осталось.
Только примитивная система undo которая делает полный бекап сцены при каждом изменении себя не очень хорошо показала с уровнями арктики. Срабатывает довольно медленно (до 0,2 секунды задержка) и память жрёт как не в себя. В общем, для таких тяжёлых уровней надо это улучшать и сохранять только изменения. Но это довольно сложно, поэтому я пока сделал просто возможность отключать undo напрочь. Полный список изменений:
|
 
|
|
30.11.2021, 01:07
Сообщение
#830
|
|
Продвинутый геймер Репутация: 48 Группа: Участник Сообщений: 275 Награды: 3 Регистрация: 30.11.2010 |
Только примитивная система undo которая делает полный бекап сцены при каждом изменении себя не очень хорошо показала с уровнями арктики. Срабатывает довольно медленно (до 0,2 секунды задержка) и память жрёт как не в себя. В общем, для таких тяжёлых уровней надо это улучшать и сохранять только изменения. Но это довольно сложно, поэтому я пока сделал просто возможность отключать undo напрочь. может в таком случае интегрировать git? |
 
|
|
30.11.2021, 01:14
Сообщение
#831
|
|
. Репутация: 750 Куратор темы Сообщений: 7072 Регистрация: 30.07.2010 |
|
 
|
|
30.11.2021, 09:32
Сообщение
#832
|
|
Продвинутый геймер Репутация: 48 Группа: Участник Сообщений: 275 Награды: 3 Регистрация: 30.11.2010 |
|
 
|
|
30.11.2021, 16:42
Сообщение
#833
|
|
. Репутация: 750 Куратор темы Сообщений: 7072 Регистрация: 30.07.2010 |
На открытый файл локации создавать локальный репозиторий, коммитить каждое изменение файла локации. В коммент к коммиту добавлять название действия. Так это ведь придётся сохранять файл на диск целиком, что даст ещё большие задержки. Или есть возможность обойтись без этого? |
 
|
|
30.11.2021, 16:59
Сообщение
#834
|
|
Продвинутый геймер Репутация: 48 Группа: Участник Сообщений: 275 Награды: 3 Регистрация: 30.11.2010 |
На открытый файл локации создавать локальный репозиторий, коммитить каждое изменение файла локации. В коммент к коммиту добавлять название действия. Так это ведь придётся сохранять файл на диск целиком, что даст ещё большие задержки. Или есть возможность обойтись без этого? я могу ошибаться, но в коммите не весь файл вроде, а только часть, которая изменилась. |
 
|
|
30.11.2021, 17:23
Сообщение
#835
|
|
. Репутация: 750 Куратор темы Сообщений: 7072 Регистрация: 30.07.2010 |
Rolan96, я тоже сильно не вникал как работает гит, просто если для того чтобы закоммитить файл нужно его полностью сохранять, то для ускорения это точно нецелесообразно.
Если можно коммитить только изменения то может что-то и можно сделать. Но так я уже не уверен что будет проще чем сохранять изменения вручную. |
 
|
|
03.12.2021, 22:06
Сообщение
#836
|
|
. Репутация: 750 Куратор темы Сообщений: 7072 Регистрация: 30.07.2010 |
Всё-таки занялся поддержкой уровней исхода. Места не хватает, для того чтобы скачать исход пришлось удалить распак арктики.1 и war thunder
Но наверно надо всё-таки доделать то что я начинал ещё в 2019-м. В этот раз решил начать не с самого лёгкого уровня как обычно, а с самого тяжёлого, и вчера доделал распаковку level.bin от DLC Владивостока. Немного цифр: На уровне содержится 62144 объектов, 2942 инлайновых скриптов, 250477 скриптовых блоков и 546392 связей между блоками. Для сравнения на самом большом уровне из оригинального 2033 было всего 6682 объекта, 208 скриптов с 6148 блоками и 10357 связями. Распакованный level.bin в текстовом формате весит 211 мегабайт и содержит 6903451 строку. Декомпиляция этого дела вместе с сохранением занимает что-то около минуты (10 секунд непосредственно декомпиляция + 40 секунд запись в текстовый файл). Компиляция изначально была около 5 минут, но я уже оптимизировал до 30 секунд, т.к. львиную долю времени отнимало составление словаря. Скрипт для декомпиляции скриптов получился самый жирный - аж 71 килобайт. Загружает что-то около 400 классов блоков, которые встречаются на уровне владивостока. И это ещё не всё, наверняка на других уровнях есть и другие классы блоков. Все эти 400+ классов нужно отловить и исследовать в дебагере. Время утраченное на отладку увеличивается и увеличивается, сука. |
 
|
|
05.12.2021, 19:30
Сообщение
#837
|
|
. Репутация: 750 Куратор темы Сообщений: 7072 Регистрация: 30.07.2010 |
Сегодня раздолбал ещё один уровень, на этот раз пустыню. Объектов там чуть меньше, 61408 штук, а вот скриптов аж 4150, с 371955 блоками и 826631 связями, из за чего уровень получается даже более тяжёлым чем владивосток, в распакованном виде файл весит 259 мегабайт и содержит 8531653 строчки.
Чёто я всё больше и больше сомневаюсь что редактор справится с такими уровнями Вообще интересно что думают о таком количестве скриптов пользователи unreal engine которые утверждают что блюпринты медленные, надо всё делать на с++ и всё такое. |
 
|
|
05.12.2021, 22:06
Сообщение
#838
|
|
Опытный Игрок Репутация: 3 Группа: Участник Сообщений: 67 Регистрация: 06.02.2016 |
Сегодня раздолбал ещё один уровень, на этот раз пустыню. Объектов там чуть меньше, 61408 штук, а вот скриптов аж 4150, с 371955 блоками и 826631 связями, из за чего уровень получается даже более тяжёлым чем владивосток, в распакованном виде файл весит 259 мегабайт и содержит 8531653 строчки. Чёто я всё больше и больше сомневаюсь что редактор справится с такими уровнями Вообще интересно что думают о таком количестве скриптов пользователи unreal engine которые утверждают что блюпринты медленные, надо всё делать на с++ и всё такое. Почему-бы не редактировать .bin файлы напрямую, без декомпиляции в текстовый формат? |
 
|
|
05.12.2021, 22:28
Сообщение
#839
|
|
. Репутация: 750 Куратор темы Сообщений: 7072 Регистрация: 30.07.2010 |
Почему-бы не редактировать .bin файлы напрямую, без декомпиляции в текстовый формат? Потому что это сложно, без преобразования в таблицу пришлось бы создать большую такую кучу структур копирующих объекты 4A Engine с сохранением наследования, плюс потом пришлось бы писать не только код загрузки, но ещё и код сохранения, и ещё составление списка свойств, и это для всех пяти игр. Я за такую работу бы точно не взялся. Но памяти бы жрало меньше намного, это да. |
 
|
|
07.12.2021, 13:15
Сообщение
#840
|
|
. Репутация: 750 Куратор темы Сообщений: 7072 Регистрация: 30.07.2010 |
Доделал поддержку всех уровней еходуса сегодня, вот билд binunp с ней (+сорцы):
Редактор как-нить попозже, там ещё надо доделывать улучшение undo, и анимация 2033 в LE поломалась из за сортировки, и вообще надо проверить хотябы открывает он уровни исхода или нет. Я пока только сами левел.бин'ы распаковывал, к редактору при разборе даже не прикасался. Делал разбор я на основе обычного еходуса с длц, не знаю подойдёт ли к enchaned edition. К старой версии без длц не подойдёт точно, т.к. там другая версия спауна. Но это врядли кого-то сильно волнует, так что как-нибудь потом. Кстати отжор памяти распакованными конфигами получилось оптимизировать больше чем в два раза ! Примерно по тому же методу как работает str_shared в движке. То есть вместо того чтобы на каждый параметр хранить копии строк названия и типа(они очень часто повторяются) я завёл список и ссылаюсь всегда на него. Так при загрузке левелбина от длц два полковника стало жрать вместо 1234 мегабайт всего 702. Но это не предел. Так как теперь есть список строк хранить два тяжеленных 64-битных указателя стало не обязательно, можно хранить индексы меньшего размера. Я запихнул индексы имени и типа в один Longint (8 бит для типа, 24 бит для имени) и потребление памяти упало ещё больше, до 558 мегабайт. Всё-ровно много конечно, но всё же. Правда скорость загрузки конфигов упала в два раза (с 10 до 20 секунд например) из за того что теперь при добавлении каждого параметра ищутся строки в списке, но это попробовать оптимизировать если искать по CRC вместо полноценного сравнивания строк (кстати в выложенном билде именно так и сделано), но я не уверен не случится ли где коллизии. Надо нормальную хеш-таблицу сделать. Зато скорость создания копии конфига выросла из за того что копируется индекс а не две строки, не сильно правда, где-то на четверть. Сообщение отредактировал Modera - 07.12.2021, 13:28 |
 
|
|
09.12.2021, 21:54
Сообщение
#841
|
|
Ветеран Репутация: 10 Группа: Участник Сообщений: 99 Регистрация: 28.11.2018 |
Доделал поддержку всех уровней еходуса сегодня, вот билд binunp с ней (+сорцы): При декомпиляции 06_bridge или 06_spring: Код D:\Binunps\binunp_exodus>binunp -l -d level.bin level.txt 16 [JS] Error: size-pos < count Loaded 'level.bin' in 1.0193401000s Saving to level.txt Saving time: 0.8104687000s D:\Binunps\binunp_exodus>pause Для продолжения нажмите любую клавишу . . . При декомпиляции же dlc_2_vladivostok никаких ошибок нет. -------------------- |
 
|
|
Текстовая версия | Сейчас: 29.03.2024, 11:47 |