В связи с происходящими событиями верным фанатам серии S.T.A.L.K.E.R. не остается ничего, кроме как ждать у моря погоды и надеяться на нормализацию геополитической обстановки.
А ведь может случиться, что мы никогда не увидим Heart of Chornobyl. Учитывая времена, в которые возвращается наш Мир, предлагаю вооружиться инструментарием для модификации Doom 2 и создать свой собственный S.T.A.L.K.E.R., с маслинами и монолитовцами.
Сразу скажу, что я не буду подробно останавливаться на процессе создания уровней или работе со Slade3, так как это уже сделали за меня.
Нам потребуется:
- Ultimate Doom Builder;
- Slade3;
- Blender;
- X-Ray SDK (Инструкция по установке на Windows 10).
В этой статье я расскажу о том, с какими трудностями столкнулся уже спустя десять минут после начала процесса, и объясню, как добавлять в Doom новые объекты.
X-Ray SDK
Eсли с моддингом Doom я давно знаком, то с моддингом S.T.A.L.K.E.R. сталкивался только в качестве потребителя контента. Первым делом я решил распаковать все необходимые данные из архивов S.T.A.L.K.E.R. Shadow of Chernobyl, то есть текстуры, модели и звуки.
Программу для распаковки архивов я нашел довольно быстро. Называется она Unpacker for Steam by E1nher1. Как видно из названия, работает эта программа только со Steam версией игры.
Все архивы лежат в корневой папке S.T.A.L.K.E.R. Shadow of Chernobyl с расширениями от db0 до dbd. В этих архивах хранятся текстуры, звуки, музыка, модели, скрипты, файлы конфигурации и данные уровней. Я распаковал их в одну папку. Это потребуется в будущем для работы с X-Ray SDK.
Нам нужны следующие разделы:
- textures (все текстуры хранятся в формате dds. Для преобразования этих файлов в png я использовал программу XnView);
- meshes (модели в формате ogf. О них чуть позже);
- levels (для работы с уровнями нужно настроить X-Ray SDK);
- sounds (звуки и музыка в формате ogg).
После этого начался длительный и мучительный поиск рабочей версии X-Ray SDK. Я облазил десятки форумов, руководств в Steam и просмотрел несколько YouTube-роликов, прежде чем мне помогли. В этом ролике парень подробно объясняет, как установить и настроить X-Ray SDK, а также, как преобразовать игровые уровни в понятный редактору формат. Дело в том, что официальная версия X-Ray SDK была выложена GSC аж в 2007 году. Соответственно, на современных системах она работать отказывается.
Для распаковки уровня потребуется утилита converter. В дополнение к сказанному в видео скажу, что в BAT-файле необходимо прописать наименование исходного уровня и его название при распаковке. А в файле converter.ini прописать абсолютные пути к папкам levels и gamedata. Подробная информация лежит здесь.
Уровень распакован и лежит в папке maps. Открываем его в редакторе уровней.
Управление в редакторе нестандартное. В обычном режиме перемещение камеры по X и Y осуществляется с помощью SHIFT + LMB, по Z — SHIFT+RMB, а поворот камеры — SHIFT+LMB+RMB. Для дальнейших действий это не очень полезная информация, но если хочется изучить карту и использовать ее в качестве референса — это хороший вариант.
Кроме того, редактор уровней позволяет найти на карте нужный объект и посмотреть его имя. Об этом ниже.
Blender
Если с текстурами для геометрии уровня все просто: конвертируем dds из папки textures в png, предварительно просмотрев больше тысячи файлов и отделив нужные, то что же делать со спрайтами оружия и окружения?
GZDoom поддерживает три варианта:
- Плоские спрайты в формате png;
- Воксельные модели;
- Полигональные модели.
Изначально я пошел по первому пути, для чего потребовался Blender. Я решил, что буду рендерить модели из S.T.A.L.K.E.R. покадрово с разных сторон.
Чтобы экспортировать модели из S.T.A.L.K.E.R. в Blender, можно воспользоваться плагином blender-xray. Процесс установки описан в readme.
В S.T.A.L.K.E.R. cуществует два вида моделей:
- Модели, которые используют физический движок, в формате ogf. Они находятся в папке meshes. Это и персонажи, и коробки с патронами, и оружие, и разнообразные модели окружения (лампы, ящики, бочки), и даже вырезанный из игры транспорт;
- Модели, из которых состоит уровень (aka лоды), в формате object. К ним относятся здания, сломанный транспорт, мосты, поезда и прочее. Эти модели лежат в папке rawdata/objects. Ради этих моделей мы и конвертировали уровень.
В первом случае все просто. Открываем Blender, импортируем объект из папки meshes в формате ogf, и вот он наш Камаз.
С моделями на уровне все немного сложнее. Сперва надо найти название нужного объекта в редакторе уровней S.T.A.L.K.E.R. Для этого подлетаем к нему, правой кнопкой мыши открываем параметры и смотрим на поле name. В данном случае этот автобус называется l01_escape_lod0060
Возвращаемся в Blender, импортируем объект в формате object из папки rawdata\levels\l01_escape и любуемся ржавым автобусом в нормальном редакторе.
В принципе, на этом можно и закончить. Конвертируем автобус в формат obj и засовываем его в Doom. Более подробно я расскажу об этом в соответствующем разделе. Но мы ведь не ищем легких путей, верно?
Создание спрайтов автобуса
Все спрайтовые объекты в Doom могут быть плоскими (например, взрывающиеся бочки) или иметь 8 или 16 ракурсов (например, монстры). Этот автобус мы отрендерим с 16 позиций. Это можно сделать вручную, перемещая камеру по координатам, а можно поступить более хитро. Сразу скажу, что я мало что понимаю в 3D моделировании, поэтому могу ошибаться в своих решениях.
Выставляем камеру на нужную позицию, туда же добавляем источник света и направляем его на модель. После этого создаем Bezier Circle и делаем его родителем камеры и источника света с параметром Path Following (Ctrl + P). В настройках Bezier Circle нужно включить Path Animation и установить 16 фреймов анимации.
После этого в настройках рендера включаем прозрачность и нажимаем Render Animation (Ctrl + F12). Получится 16 изображений. Их надо обрезать, чтобы занимали чуть меньше места.
Сразу скажу, что такой способ лучше использовать для маленьких или симметричных моделей (лампы, бочки, патроны и т.д.), потому что вот такой автобус будет выглядеть очень нелепо при переносе в Doom. Для примера, конечно, сойдет. Как я и говорил, его лучше импортировать в Doom в виде обычной 3D модели, чем мы вскоре и займемся.
Перенос автобуса в Doom в виде спрайтов
Открываем Slade3 и создаем новый архив формата pk3. Дело в том, что такой архив позволит хранить файлы упорядоченно. Классический wad файл этого не позволяет. Подробно о хранении ресурсов в архиве pk3 можно прочитать здесь.
Прежде чем переносить файлы в архив, нужно их переименовать. Наименования спрайтов в Doom состоят из 6 символов в формате AAAA X N, где AAAA — название спрайта, X — название анимационного фрейма (от A до Z и /), N — номер спрайта при смене ракурса, при этом N меняется от 1 до 8 при восьми ракурсах и от 1 до G при 16 ракурсах (ноль — если объект плоский и не меняет спрайты при смене ракурса). Более подробная информация.
Получается следующее:
Переносим эти спрайты в архив и приступаем к созданию объекта. Первым делом нужно идентифицировать параметры спрайтов. Для этого выбираем все спрайты и правой кнопкой добавляем в файл (или ламп) textures. В корне архива будет создан новый файл с параметрами текстур.
После этого открываем редактор текстур и меняем тип каждого изображения на Sprite, а потом уменьшаем изображения в размерах. Придется поэкспериментировать, чтобы объект не выглядел огромным или слишком маленьким. Помимо этого нужно расположить каждый спрайт над уровнем «земли», то есть настроить offsets.
Код новых объектов находится в лампе decorate. По сути своей это набор классов, которые называются Actors. При этом можно наследовать новые классы от уже имеющихся в Doom. Decorate должен находиться в корне архива. Создаем Actor нового автобуса.