#1
17 января 2012 в 01:08
Итак у нас есть большое желание создавать карты для Quake III, (или для Quake 1, 2, принцип там схожий, за некотоырми исключениями) но мы не знаем как. Первым делом нужен редактор карт. Один из самых популярнейших - это GTKRadiant. Сейчас последняя стабильная версия имеет номер 1.5 и её можно скачать по этой ссылке: GtkRadiant-1.5.0.msi Также для quake 3 потребуется архив с common-шедйерами для редактора, который берется десь и распаковывается в каталог baseq3. <br /><br />Есть и другие редакторы, например устаревший Q3Radiant или Quark, но в этой статье я про них рассказывать не буду.<br /><br />Настройка<br /><br />После скачивания редактора его нужно установить. Установка обычно проходит без проблем, главное несколько раз нажать далее и один раз выбрать тип установки. Я выбрал полную установку.<br /><br />Также в директории игры желательно, чтобы текстуры, материалы и мдели находились в распакованном виде. Открываем pak0.pk3 в любой прогремме, которая может распаковать zip архив, например WinRar, и распаковываем папки textures, models и scripts в папку baseq3.<br /><br />Запускаем редактор и видим примерно такой экран:<br /><br /><br /><br />После первого запуска необходимо настроить редактор для того, чтобы он знал путь к игре и ресурсам (модели, текстуры, материалы и прочее) Заходим: Edit - Preferences - Settings - Paths<br /><br />И в поле Engine path указываем путь к игре:<br /><br /><br /><br />Также в Preferences можно настроить вид рабочего поля редактора. Я использую то, что предлагается по умолчанию. Edit - Preferences - Interface - Layout - Window Layout<br /><br />И выбираю крайнее левое значение рабочего поля. Ок. Теперь расскажу из каких частей состоит рабочее поле редактора.<br /><br />Слева находится двумерная проекция нашей карты. С помощью клавиш Ctrl + Tab можно менять вид этой проекции (условно говоря вид спереди, сбоку или сверху карты)<br /><br />Справа вверху окно просмотра 3D вида нашей карты. Здесь можно увидеть все что мы сделали в 3D не запуская игру. Для управления видом щелкаем правой кнопкой мыши на 3D окно и мышью можен посмотреть влево, вправо, вверх и вниз. Для перемещения в горизонтальной плоскости можно использовать стрелки на клавиатуре. Для движение вверх и вниз используем клавиши D и C Также для перевещения можно использовать колесо мышки. На мой взгляд, так даже удобнее перемещаться по карте.<br /><br />Справа внизу находится окно, в котором можно просматривать и выбирать текстуры для карты. Сейчас там скорее всего только те текстуры, которые используются в Quake 3, но позже можно будет добавлять свои.<br /><br />Сверху на панелях находятся разные кнопки для редактирования. О них чуть позже по ходу статьи.<br /><br />Введение<br /><br />Для создания карт нужно немного понимать как вообще устроены уровни в игре.<br /><br />В редакторе мы создаем .map файл, в котором записана информация об уровне и всех расположенных на нем объектах. После этого мы запускаем компилятор, который производит расчет bsp структуры уровня, расчет видимости и освещения. После компиляции мы получаем bsp файл, который уже можно запустить в игре.<br /><br />Уровень - это обязательно закрытая со всех сторон коробка, без дырок во внешнуюю среду. Если будут дырки, тогда уровень или совсем не заработает или будет работать с очень маленькой скоростью.<br /><br />Все уровни состоят из брашей, моделей, патчей и энтити.<br /><br />Браш - это объект с почти неограниченным числом граней. Примерами брашей могут буть куб или параллелепипед, также из брашей можно сделать что-то похожее на сферу или конус. В Quake 3, большая часть уровней состоит из брашей. То есть почти каждая стена, пол, потолок состоит из брашей.<br /><br />Патч - это то односторонный объект, который можно как угодно изгибать, крутить и так далее. Главный недостаток патчей в том, что из них нельзя делать внешние стены уровня. При компиляции патчи считаются дырявыми, поэтому чтобы не было дырки в том месте, где патч, за ним нужно расположить браш.<br /><br />Модель - Это объект с заранее наложенными текстурами, который можно расположить в любом месте уровня, но не за его пределами, те есть нельзя модель расположить в открытом пространстве за уровнем, иначе будет утечка (map is leaked).<br /><br />Энтити - Эти самые разнообразные объекты, в том числе источники света, лифты, маятники и прочее. Эти объекты тоже должны располагаться внутри уровня, чтобы не было утечек.<br /><br />Первые браши<br /><br />Для начала нужно создать просто уровень-коробку, наложить на стены и пол текстуры, установить место появления игрока и источники света. Затем скомпилировать карту и запустить её в Quake3.<br /><br />В окне двумерной проекции зажимаем левую кнопку мыши в любом месте и перемещаем мышь. Так мы создали первый браш. Мы видим его сверху и можем мышью переместить его или изменить его размеры. Для выделения браша зажимаем кнопку Shift и левой кнопкой мыши щелкаем на браше (можно в 2D окне или в 3D окне, без разницы). Его края становятся красными. Если мы не хотим больше работать с этом брашем нажимаем Esc, и он снова становится черным. Нажимаем Ctrl + Tab, теперь мы видим этот браш сбоку и можем изменить его высоту. Сначала, наверное, не совсем понятно какого размера должен быть браш и каким он будет в игре. Слева есть линейка, на которой помечены деления с юнитах (Юнит - величина, в которой измеряются все равмеры в игре). Например игрок имеет размеры 56*32*32 юнита. Для первого уровня достаточно размеров (примерно) 300*300*128 юнитов. В этой коробке поместится и игрок и несколько других объектов.<br /><br /><br /><br />Если браш нужно удалить - выделяем его и нажимает кнопку backspace. Он удалится.<br /><br />Так мы создали первый браш, но он не пустой, все его внутренней пространство заполнено. Поэтому нужно сделать его пустым. Сверху на панели есть кнопка Hollow. Выделяем браш и нажимаем эту кнопку. Браш получает пустое пространство внутри. Теперь у нас будет не один браш, а 6: 4 стены, пол и потолок. Весь наш первый уровень будет располагаться внутри этих 6 брашей.<br /><br />О пересечении брашей<br /><br />При выполнении операции Make Hollow редактор создал нам браши, которые в пространстве пересекают друг друга. В разработке карт, которые размером больше "демонстрационной-коробки" такие пересечения желательно стараться избегать, располагая грани брашей рядом друг с другом - например как показано ниже. такой результат можно получить немного изменив положение вершин (vertex) брашей. О том как этого добиться, будет рассказано в одном из следующих туториалов.<br /><br /><br /><br />Но наши 6 брашей пока не имеют текстуры на своих сторонах. Для начала наложим на все браши текстура Caulk. Выделяем все наши браши (можно по очереди, а можно все вместе, зажав Shift + LM) и нажимаем кнопку на панели Caulk Selection. Наши браши снановятся розового цвета и все иг грани покрыты текстурой caulk. Этой текстурой мы помечаем те браши или их грани, которые не должны отображаться в игре. У каждого из этих брашей 6 граней, а можем мы увидеть сейчас только 1 у каждого (те грани, которые находятся внутри комнаты). В 3D виде залетаем внутрь этой коробки.<br /><br /><br /><br />Наложение текстур<br /><br />Теперь нам нужно наложить на внутренние стороны брашей те текстуры, которые захочется увидеть в игре. Можно в 3D виде выделять одиночные грани браше с помощью Ctrl + Shift + LM. Выделяем грани на брашах, которые у нас выступают в качестве стен. Они подсвечиваются красным.<br /><br /><br /><br />Далее в том окне, которое справа внизу выбираем те текстуры, которые хотим увидеть в игре. Я выбрал base/base_wall bluemetalsupport2.tga. Щелкаем на текстуре LM. На стенах теперь наложилась эта текстура.<br /><br /><br /><br />У меня она наложилась не так как надо, поэтому её нужно сдвинуть. Не снимая выделения с этих граней, я щелкнул 2 раза RM, в 3D вид, зажал кнопку Shift и стрелками передвинул текстуру так, как нужно.<br /><br />После этого аналогично накладываем текстуры на пол и потолок.<br /><br />Объекты на карте<br /><br />На уровне обязательно должно быть указано место где появляется игрок, поэтому внутри нашей команты в 2D виде щелкаем RM и выбираем в появившемся меню: info - info_player_start<br /><br /><br /><br />После этого появится красный параллелепипед, который озозначает стартовую позицию игрока. Нужно его передвинуть так, чтобы он находился внутри комнаты и не пересекался со стенами.<br /><br />Также нам нужен источник света. Опять же RM внутри комнаты в 2D проекции. Выбираем light. Появляется маленькое меню, в котором можно ввести цифру, означающую яркость источника света. Для нашей комнаты достаточно значения 150.<br /><br /><br /><br />Компиляция<br /><br />Так мы закончили редактирование уровня. Обятельно сохраните его. У меня он называется tmp. Осталось скомпилировать его и запустить в игре. В верхней строке меню выбираем Build, вылазит меню в котором предоставляется выбор параметров компиляции. нас интересует сейчас только строка: Q3Map2: (final) BSP -meta, -vis, -light -fast -filter -super 2<br /><br /><br /><br />Нажимаем и ждем некоторое время. Повляются разные черные окошки с белыми буквами, Радиант что-то пишет в своем логе и через какое-то время все заканчивается (время зависит от сложности уровня и количества ошибок, у нас уровень простой и маленький, поэтому все закончится быстро).<br /><br />Если все сделано правильно, то компилятор из нашего .map файла создаст .bsp в папке ../baseq3/maps Если нет, то есть отдельная статья, посвященная ошибкам, которые выдает компилятор.<br /><br />После этого можно запускать игру. Первым делом пишем в консоли /sv_pure 0. Эта команда позволяет игре видеть те файлы, которые не запакованы в .pk3. Затем также в консоли пишем /map tmp, и если все удачно, уровень запустиится :)<br /><br />Поздравляю!<br /><br />Если что-то не так, возможно придется переделывать уровень.<br /><br />[right]–GT-Agressor 09:01, 10 февраля 2009 (UTC)[/right]<br /><br /><br />/// FIXME - поправить ссылку на редактор, добавить ссылку на нет-радиант.
#2
17 января 2012 в 08:04
#3
17 января 2012 в 08:36
Eugeny, а ошибки компиляции при это не может быть?
#4
17 января 2012 в 10:10
Eugeny, ну оно не то что бы недопустимо, но очень нежелательно, согласен. Немного подкорректировал текст, добавил это уточнение + часть твоего скриншота.<br /><br />G-Man, ошибок не будет (насчёт предупреждений не в курсе, т.к. давно уже браши стараюсь не пересекать друг с другом в своих картах). Но в игре возможны мелкие визуальные артефакты, особенно на месте Т-образных пересечений брашей.
#5
17 января 2012 в 12:06
#6
18 января 2012 в 12:23
вообще для ку3мэп2 критично еще и больше количество заходов "браш в браш" даже если пересечение скрывается (к примеру трубы из стены в стену или из пола в потолок в больших количествах)<br /><br />типо так<br /><br /> ||<br />==||======<br /> ||<br /> ||<br />==||======<br /> ||
#8
18 января 2012 в 12:50
Я сейчас даже вариант "тоже ничего" стараюсь не использовать - только 1 вариант + ещё так, как на скрине у Eugeny.<br /><br />Кирилл, а у Q2-шного компилера с этими пересечениями насколько критично?
#9
18 января 2012 в 12:59
Кирилл, а у Q2-шного компилера с этими пересечениями насколько критично?<br />тоже лучше не злоупотреблять.<br />но злобно ругнуться может только ку3мэп2<br /><br />
Но наши 6 брашей пока не имеют текстуры на своих сторонах. Для начала наложим на все браши текстура Caulk. Выделяем все наши браши (можно по очереди, а можно все вместе, зажав Shift + LM) и нажимаем кнопку на панели Caulk Selection. Наши браши снановятся розового цвета и все иг грани покрыты текстурой caulk. Этой текстурой мы помечаем те браши или их грани, которые не должны отображаться в игре. У каждого из этих брашей 6 граней, а можем мы увидеть сейчас только 1 у каждого (те грани, которые находятся внутри комнаты). В 3D виде залетаем внутрь этой коробки.<br />Этим мы сильно экономим еще фреймрейт карты.<br />