Как вы наверное знаете, для ТЧ, эту операцию можно проделать с помощью
конвертера от товарища Бардака, используемую также для распаковки игровых ресурсов, или с помощью программы
DB Packer 1.0. А вот для ЧН и ЗП, как оказалось, по данному вопросу в сети информации нет, или я плохо искал. Но, вспомнив про
map_compressor, который идет в составе
SDK, и немного поэксперементировав, я написал данный урок. Постарался описать все как можно подробнее, если возникнут вопросы, обращайтесь в личку.
Итак, мы делаем мод, следовательно в директории игры у нас есть папка
gamedata, со всеми нашими правленными файлами.
Кидаем в корень игры, рядом с папкой
gamedata файлы
map_compressor'а (
BugTrap.dll, build_map.ltx, compress_map.cmd, xrCompress.exe, xrCore.dll).
Откроем файл
build_map.ltx. Что нам в нем необходимо подправить:
Секция:
options. Параметр
exclude_exts - это расширения файлов которые игнорируются при упаковке. Например, если у вас в
gamedata'е есть txt-файлы, с вашими заметками, то при упаковке они не попадут в архив (так сказать в чужие руки). Так же это очень удобно для разделения по нескольким архивам файлов одного типа.
Следующие секции:
include_folders и
exclude_folders. Это перечень всех папок, которые будут включенны в состав архива, и проигнорированны соответственно.
Например, запишем в первой из них
textures = true, во второй
textures\act = true. И в нашем архиве окажутся все текстуры из папки
textures, кроме подпапки
act, расположенной в ней.
Секция-загололовок:
header - содержит служебную инфомацию.
Параметр
entry_point желательно не изменять.
* Параметр
auto_load, должен равняться
true, иначе архив не будет читаться движком.
В ходе экпериментов оказалось, что файлы, расположенные непосредственно в папке
gamedata (например
particles.xr, shaders.xr и др.), незапаковываются. Решение таково - создадим в
build_map.ltx, между секциями
exclude_folders и
header новую секцию
include_files, и по аналогии пропишем в неё наши файлы:
Код
[include_files] particles.xr = true
shaders.xr = true
Теперь откроем файл
compress_map.cmd и так же немного изменим его. Поменяем название папки
for_levels на
gamedata.
С приготовлениями все. Запускаем
compress_map.cmd и ждем окончания процесса упаковки. Посмотреть результаты работы упаковщика можно в файле
engine.log. Файлы компрессора нам более не нужны, и их можно удалить. Переименовываем полученный архив (он появится здесь же в корне игры), как нам понравится, например в
mod.db, и... А куда же его лучше положить?
В результате экпериментов, я узнал что, чтение архивов происходит в том порядке, в каком это указанно в файле
fsgame.ltx:
Код
$arch_dir_levels$ = false| false| $fs_root$| levels\ $arch_dir_resources$ = false| false| $fs_root$| resources\
$arch_dir_localization$ = false| false| $fs_root$| localization\
$arch_dir_patches$ = false| true| $fs_root$| patches\
Поэтому, если мы в этот файл добавим еще одну строку, то создадим все условия для правильного порядка загрузки файлов мода. Вот эта строка:
Код
$arch_dir_mods$ = false| true| $fs_root$| mods\
Теперь осталось создать в корне игры папку
mods, и поместить туда наш архив.
Вот собственно и все, можно запускать игру.
P.S. Все эксперименты делались на ЗП. Экспериментальный мод содержал: дополнительную локацию, новые текстуры, скрипты, модели, файлы анимации камеры,
all.spawn, правленный
gamemtl.xr. Ни каких проблемм обнаруженно не было.
Распаковка с помощью конвертера от Бардака показала полную идентичность исходной, подготовленной к упаковке
gamedata'ы и распакованной.
Так же проведенна проверка на ЧН.