Конвертирование уровня в формат Метро 2033 — S.T.A.L.K.E.R. Inside Wiki

Конвертирование уровня в формат Метро 2033

Материал из S.T.A.L.K.E.R. Inside Wiki

Перейти к: навигация, поиск

Подготовка

Нам понадобится:

  • Какой-нибудь уровень от сталкера
  • Текстуры от этого уровня
  • Распакованный уровень 000 из Metro 2033
  • Конвертер моделей в формат 4A Engine
  • Запаковщик ресурсов

Скачать конвертер можно тут.
Скачать запаковщик можно тут.

Конвертирование геометрии и запуск

В этом туториале мы будем заменять уже имеющийся уровень 000, то есть уровень меню, который загружается сразу при запуске игры. Как добавить уровень не заменяя уже имеющиеся я напишу ниже.

И так, для того чтобы сконвертировать геометрию нужно папку с уровнем от сталкера переместить в папку с конвертером моделей model.exe, там же нужно создать папку в которую сохранится сконвертированный уровень. Так как мы будем заменять уровень 000 папку назовём так-же, 000. Когда всё скопировано и создано можно запускать конвертер из батника или командной строки:

model.exe -level2level xray_level 000

Где xray_level - имя папки уровня от сталкера. В случае запуска батником я рекомендую добавить второй строчкой pause, т.к. в будущем понадобится информация которую конвертер выводит в консоль. Ещё можно добавить ключ -nomu, в таком случае конвертер удалит с уровня все MU-модели. Это такие объекты как машины, деревья, мумии дохлых сталкиров.

model.exe -nomu -level2level xray_level 000

Если всё прошло хорошо, конвертер напишет размеры вершинного и индексного буферов. Например такие:

vertex buffer size: 22304928
index buffer size: 3093594

Теперь можно приступать к созданию игрового архива. Для начала нужно в папке content запаковщика создать папку maps и скопировать туда папку с оригинальным уровнем 000, после чего заменить там файлы level, level.geom_pc и level.nxcform_pc на те что выдал конвертер. Следующим шагом нужно записать размеры вершинного и индексного буфера в файл level.pf. Открыв этот файл текстовым редактором в первой строчке можно увидеть что-то такое:

*32,16785696,16785736,2360094
Attention.gif Внимание
Если вы вместо подобной строчки видите кракозябру распаковщик ресурсов следует сменить на другой.

Число 32 трогать не нужно, второе число нужно заменить на размер вершинного буфера, третье число заменить на размер вершинного буфера плюс сорок, четвёртое число заменить на размер индексного буфера. Если этого не делать вместо уровня в игре будет каша из треугольников.

Всё, теперь можно копировать текстуры и создавать архив. Текстуры преобразовывать в файлы .512, .1024, .2048 не нужно, без настроек в textures.bin движок будет читать их из .dds. Когда текстуры скопированы в content\textures можно запускать make_upk.bat и, дождавшись окончания его работы, копировать файл content.upk9 в папку с игрой. Если всё было сделано правильно то теперь вместо привычной комнаты меню будет то что мы наконвертировали с висящими в воздухе человеками, дверью и прочим хламом. Чтобы была возможность ходить по уровню нужно отредактировать файл level.bin, об этом следующий раздел.

Редактирование level.bin

Я не буду подробно описывать как редактировать level.bin, вместо этого приведу пример такого файла где заспаунен только игрок в нулевой точке с некоторым снаряжением.
Скачать пример.

Может возникнуть вопрос как изменить позицию игрока. Для этого находим в файле playeronly.txt секцию player_0004 и ищем там параметр с пустым именем и типом pose, matrix, он находится прямо перед параметром name : name. Это матрица трансформации, состоит из 16 чисел, с её помощью можно указывать позицию, поворот, масштаб, и даже другие трансформации. Про матрицы инфы в интернете полно, я лишь скажу что последние 4 числа являются позицией, то есть X, Y, Z, 1. Последнее должно быть единицей, на него по идее делятся остальные, но это не точно.

Скомпилировать playeronly.txt в level.bin можно с помощью утилиты binunp, вот так:

binunp.exe -l -c playeronly.txt level.bin

Как добавить новый уровень не заменяя уже имеющиеся

Для того чтобы добавить новый уровень нужно добавить его конфиг в scripts.bin, иначе игра не запустится. Scripts.bin представляет собой множество отдельных файлов, склеенных в один. Разбить scripts.bin на отдельные файлы можно при помощи утилиты split.exe, просто запустив программу из папки в которой находится файл scripts.bin. В случае успеха должна появится папка scripts с большим количеством .bin файлов. В этой папке можно обнаружить такие файлы как 000.bin, l00_intro.bin и т.д. Это и есть конфиги уровней, в них указывается какая картинка отображается во время загрузки уровня, какие подсказки показываются и всё такое. Изменить всё эти параметры можно при помощи binunp. Если изменение не требуется достаточно просто скопировать файл и переименовать его в имя_нового_уровня.bin, например mylevel.bin.

После всех манипуляций можно собрать scripts.bin из отдельных файлов запустив split.exe с ключом -с:

split.exe -c

Теперь папку с уровнем можно переименовать в mylevel, и после запаковки игрового архива запустить таким батником:

metro2033.exe -server -map mylevel

Назначение шейдеров и материалов

По умолчанию все поверхности на уровне являются непрозрачными и имеют деревянный материал. Это не очень хорошо. Назначить шейдеры и материалы можно в файлах shadersbytextures.txt и materialsbytextures.txt. Как понятно из названия, назначение происходит по имени текстуры. Например если в shadersbytextures.txt добавить строчку mtl\mtl_fence1=geometry\default_aref то все поверхности с текстурой mtl\mtl_fence1 станут поддерживать прозрачность. Так же можно удалить некоторые поверхности указав вместо шейдера или материала <none>. В случае указания вместо шейдера поверхность будет удалена вообще, а в случае указания вместо материала будет удалена только из коллизии, такие поверхности будут видимы но сквозь них можно будет свободно проходить. Узнать список доступных шейдеров и материалов можно из конфигов в scripts.bin. Имена шейдеров есть в render_subst_all.bin, а имена материалов в game_materials.bin. Первый можно распаковать и прочитать, второй распаковать нельзя и придётся в нём искать строки начинающиеся с material\. Искать можно хекс-редактором или лучше утилитой Search&Replace.

Список статических материалов
Другие места
LANGUAGE