В этой статье мы познакомим Вас с основными терминами и понятиями из мира создания карт. Эти термины встречаются сплошь и рядом и без их знания трудно начинать строить карты. Более широкий обзор терминов Вы можете найти в статье с соответствующим названием: «Термины». Конечной целью для нас является готовая, рабочая версия карты. Форматом карт в Half-Life является BSP (Binary Space Partition). В редакторе Hammer используется свой формат RMF (Rich Map Format), также редактор позволяет сохранять карту в формате MAP, который используется компиляторами.
Компиляторы
Компиляторы — набор из четырех программ, которые преобразуют карту из формата MAP в формат BSP. Каждый из компиляторов выполняет свою стадию в преобразовании карты. Лучшими компиляторами для Half-Life и ее модов являются утилиты ZHLT (Zoner's Halflife Tools).
Объекты
Карты в Half-Life и, соответственно, в Counter-Strike состоят из объектов. Объект — это общее название любой отдельной составляющей карты. Объекты делятся на 2 типа: браши (brush) и энтити (entity).
1. Браши (мн.ч. brushes)
Браши можно сравнить со строительными плитами. Посмотрите на картинку ниже, на ней изображено 5 брашей, составляющих некую открытую комнату.
Из подобных брашей и состоят карты. Игроки бегают по земле, состоящей из брашей и между
стенами — тоже брашами. Естественно, игрок видит раскрашенные (затекстурированные) браши, а
не такие одноцветные, как на нашей картинке.
2. Энтити (мн.ч. entities)
2. Энтити (мн.ч. entities)
Энтити — объекты обладающие свойствами. Примеры энтитей: открывающаяся дверь, кнопка, источник света (лампочка), звук, машина — у всех этих объектов есть свойства (скорость, громкость и пр.). При помощи энтити-объектов мы можем сделать карту более интересной — добавить в нее звуки, сделать воду и прочие спецэффекты.
Но энтити это не только спецэффекты, но и объекты, управляющие событиями на карте. Например, чтобы сделать карту с бомбой, нужно вставить на нее энтити-объект одного типа, а если с заложниками, то другого. К слову сказать, ни одна карта в Counter-Strike не обходится без использования хотя бы нескольких энтити-объектов, поэтому их изучение не менее важная часть, чем усвоение техники создания карт, которая описывается в Учебнике.
Энтити интересны тем, что они могут иметь форму брашей, а могут быть абсолютно незаметны в игре (не иметь формы). Отсюда идет разделение энтитей на две группы: брашевые (brush-based) и точечные (point-based). Например, дверь — это брашевый энтити-объект, его игроки видят в игре; а вот источник света или источник звука — точечные энтити-объекты.
Текстуры
Текстуры — картинки, которыми раскрашивается карта. Текстуры наносятся на землю, стены, ящики, машины и все остальные объекты на карте.
Текстуры для Half-Life хранятся в файлах с расширением WAD. В таких «библиотеках текстур», как их еще называют, может храниться от 1 текстуры до нескольких тысяч. Вы можете найти много текстурных WAD-файлов в директориях: valve и cstrike, а также в директориях других модов. Можно создавать свои собственные коллекции текстур (в этом Вам поможет программа Wally). Можно извлекать текстуры из ресурсов других игр (на вскидку: DeusEx, Max Payne, MOHAA, NOLF2, SF, SOF2) и переводить их в формат WAD.
Текстуры в Half-Life делятся на несколько типов (обычные текстуры, специальные текстуры, текстуры воды, текстуры с прозрачными частями, анимированные текстуры и др.). Главное, что нужно всегда помнить о текстурах это то, что некоторые из них не сочетаются, т.е. не могут находиться вместе на одном объекте (например: текстура воды не может находиться с никакой другой текстурой — моментально появляется ошибка при компиляции); также нужно знать, что тип текстуры определяется по нескольким первым символам ее названия.
Все типы текстур Half-Life (их названия, информация о совместимости и применении) подробнейшим образом описаны в статье «Типы текстур в Half-Life и CS».
Декали
Декали — это следы от взрывов гранат, дырки от пуль на стенах и прочие подобные вещи. Это тоже текстуры, однако их можно накладывать поверх обычных текстур. В отличии о большого разнообразия текстурных файлов, файл с декалями мы можем использовать только один. И лежит он в: valve/decals.wad. Ну, вот не дали нам разработчики использовать свои декали, придется брать, что есть.
Полигон
На первой картинке мы видим простой ящик, это браш, каждая сторона которого покрыта текстурой, т.е. рисунком. Видимых сторон у ящика — 3. На каждой стороне по 1 текстуре. Следовательно, на рисунке изображено 3 полигона (не считая полигонов на земле).
Таким образом, полигон — это затекстурированная сторона ящика или любого другого объекта в игре.
А вот другой пример: на стене слева текстуры нанесены с масштабом 4х1 (полигонов всего 6), а справа — 1х1 (полигонов в 16 раз больше!).
Следовательно, количество полигонов зависит не только от количества сторон, но и от масштаба текстур. Чем меньше масштаб текстуры, тем больше полигонов. А чем больше полигонов, тем больше наша карта тормозит. Следовательно, необходимо делать карты с как можно меньшим количеством полигонов.
Префаб (prefab)
Префаб — заготовка, которая хранится в специальном *.ol файле. Примерами префабов являются столы, стулья, шкафы, мусорки, прожекторы, машины и т.п. Префабы используются для быстрой вставки объектов на карту. Вы можете изготовить свои префабы, а затем многократно использовать их на своих картах, таким образом, отпадает необходимость создавать заново часто используемые объекты. Достаточно изготовить их один раз и сохранить в *.ol файл.
Триггер (trigger)
Триггер — объект (энтити-объект), управляющий событиями на карте. Всего существует 11 различных типов триггеров. Триггеры в игре не видимы. Главная задача триггеров — активировать какие-либо другие объекты (т.е. включать или выключать их).
Триггеры срабатывают самостоятельно или при помощи игрока (например, когда игрок проходит через них). Брашевые триггеры окрашиваются специальной текстурой AAAtrigger. Точечные триггеры в закрашивании, естественно, не нуждаются. Данный класс объектов применяется на картах очень часто.
Приведем пример использования триггеров. Вспомним гром на карте de_aztec. На этой карте в разных местах расположено четыре брашевых триггера одного типа. Когда игрок проходит через триггер, то активируется звук грома, который раздается через несколько секунд. Вот это, пожалуй, один из самых распространенных способов применения триггеров — для активации звука.
Юнит
Юнит — единица измерения длины / ширины / высоты в Half-Life. Соответственно, в редакторе карт Hammer также все объекты измеряются в юнитах. Чтобы правильно строить карты, необходимо знать стандартные размеры объектов (двери, окна, лестницы), чтобы виртуальный мир был «впору», а не казался чрезмерно большим или наоборот маленьким. Подробнее о размерах и о том, как правильно выбрать масштаб объектов, Вы можете прочитать в статье «Размеры и масштабы».
R_speeds
R_speeds — очень важный параметр, показывающий количество полигонов, видимых игроком на карте. Параметр используется при тестировании карты. Если видимых полигонов слишком много (т.е. слишком большой r_speeds) — карта будет тормозить. В этом случае необходимо оптимизировать карту с целью уменьшения количества видимых полигонов. Оптимизации карты посвящена отдельная глава Учебника.
Спрайт
Спрайт — графическая картинка (часто анимированная) в формате SPR. Спрайты используются довольно часто (самый распространенный случай: огонь или свечение вокруг лампочек). Спрайты хранятся в папке cstrike/sprites и вставляются на карту при помощи энтити-объектов.
Имя объекта
Большинству энтити-объектов можно дать имя (параметр «Name» в свойствах объекта). Имя необязательно давать каждому энтити-объекту на карте. Имя необходимо только, если объект будут активировать (см. ниже). Имя должно быть написано английскими буквами без пробелов (используйте подчеркивание).
Активация
Активацией называется включение или выключение какого-то объекта, имеющего имя. Объекты могут быть активированы игроком или другими объектами. Например, у нас есть кнопка, открывающая дверь. Игрок нажимает кнопку (активирует ее), а кнопка активирует дверь.
Чтобы произошла активация, необходимо активируемому объекту (например, двери) присвоить имя , а другому объекту (например, кнопке) в параметр «Target» вписать это имя.