Создание своих уровней достаточно сложная работа и требует не мало опыта. В данном разделе я не собираюсь описывать подробно каждый шаг. Вместо этого я опишу базовые понятия (чтобы было от чего оттолкнуться), а также проблемы, с которыми сам столкнулся в процессе обучения
Редакторов уровней существует несколько.
Одним из лучших считается Qoole. Им мы и будем пользоваться. Я привык к Qoole v2.07. Хотя на самом деле они все (я имею в виду версии) мало, чем отличаются. Долгое время я пользовался
Qoole. Хотя он и содержит большое количество
глюков, я все же при описании буду ссылаться на него.
Что понимается под уровнем? На самом деле, уровень строится немного не так, как мы его видим в готовом виде. Уровень состоит из брашей, к которым могут быть применены некоторые функции и объектов. Под брашем понимает выпуклый многогранник с натянутой на него текстурой (текстурами); при этом текстуры натянуты на внешнюю сторону многогранника. Т.е. для создания простой квадратной комнаты с полом и потолком нам потребуется шесть брашей: пол, потолок и по одному на каждую стену. В конечном же варианте, когда уровень будет собран, останутся только те грани, которые могут быть реально видны из этой комнаты. Остальные будут отсечены компилятором.
Для сборки уровня предназначены три программы:
qbsp.exe, light.exe и vis.exe.
QBSP.EXE: на вход программе подается файл проекта с расширением
map. Создается bsp-дерево и помещается в файл с расширением
bsp. Туда же помещается информация об объектах. В отчете могут быть возвращены ошибки.
LIGHT.EXE производит расчет освещения на уровне. На вход подается только имя
.bsp файла. Просчет освещения бывает обычный и улучшенный. В последнем случае нужно в командной строке добавить ключ
-extra.
VIS.EXE производит расчет
PVS-структуры. При построении
BSP-дерева, карта разбивается на секторы, и вся отрисовка производится секторами.
PVS это такая структура, которая для каждого сектора определяет список потенциально видимых из него секторов. Это позволяет намного быстрее отрисовывать сцену, отбрасывая секторы, которые не находятся в
PVS-списке сектора наблюдателя, а также оптимизирует вывод сущностей, ускоряет функцию проверки видимости предметов (например, проверить видит ли монстр игрока). Еще одной функцией
PVS-структуры является правильный расчет слышимости звуков. К примеру, в текущем секторе будет слышан звук ветра в том случае, если текущий сектор содержит одну из граней с текстурой неба, либо такая грань имеется в секторе, находящемся в
PVS-списке секторов для текущего сектора.
Первый этап компиляция. Здесь строится bsp-дерево уровня, а также в файле сохраняется информация об объектах. О том, что такое
bsp поговорим
отдельно. Компиляция. Для начала нужно знать, что такое MAP-файл. Данный файл содержит описание уровня ввиде специальных структур. Сам
Qoole работает с собственным форматом файлов (
qle). При компиляции уровня файл
.qle конвертируется в
.map и компилируется именно последний. После компиляции мы получаем файл с расширением
.bsp. Оставшиеся две утилиты работают непосредственно с последним файлом, просто изменяя его содержимое. Конечно,
Qoole может работать и с
map файлами, но они не удобны, хотя бы потому, что не имеют возможности группировать объекты.