Учебник по Worldcraft
Вступление
Worldcraft - это 3D редактор уровней для Half-life и для его
модов, в том числе и Counter-Strike. Но так как всё (кроме Контра) полный
отстой, то я буду рассматривать создание карт именно для него.
Общие понятия
Прежде чем начать работу в Worldcraft, неоходимо ознакомиться с
некоторыми понятиями, такими как Браш, Entity, Текстура,
Декаль.
Брашем называестя любой простой объект в Worldcraft
(стены, пол, ящики...), если к нему не применены особые свойства.
Entity - это все действующие объекты (оружие, точки
старта игроков, подъёмники, источники света и т. п.). Все Entity делятся
на solid-based и point-based. К первым относятся двери, лифты, вода , т. е. всё
то, размеры чего определяются создателем карты. Создаются такие Entity из
брашей. Ко вторым относятся оружие, источники света и звука и кое-что еще. Все
они расположены в отдельной библиотеке.
Текстура - это изображение, которое наносится на браш
или solid-based entity и будет видно в игре. Находятся текстуры в файлах с
расширением *.WAD
Декали - это специальные текстуры, кторые наносятся
поверх других текстур (место для бомбы, пятна крови). Расположены в файле
decals.wad
Компиляция - это процесс преобразования всего, что вы
наворотили в редакторе в один нормальный файл с расширением *.BSP Производят
компиляцию четыре небольшие программки: qcsg.exe, qbsp2.exe, qrad.exe и vis.exe,
расположенные в папке Worldcraft. При csg компиляции создаётся общее
расположение брашей. BSP компилятор подключает entity и текстуры. RAD компилятор
обрабатывает свет в уровне. А vis компилятор используется на последних этапах
компиляции, оптимизирует и ускоряет работу уровня, устроняет всевозможные глюки.
Без vis компиляции уровень будет сильно тормозить, а большой уровень может даже
не запуститься. VIS компилятор не будет работать, если в уровне есть дырки в
окружающее пространство. Ищутся дырки при помощи команды pointfile в самой игре.
После ввода команды в консоль, дырки будут отмечены пунктиром.
Настройка
редактора
Сначала редактор надо настроить: указать расположение игры,
вспомогательных программ, служебных и конечных папок и т. п. Надеюсь, что
Worldcraft вы уже у себя установили (желательно устанавливать его на тот-же
диск, где и Half-life). Так
что запускайте редактор и заходите в Tools/Options в главном меню
программы (File, Edit, Map...). Там открывайте вкладку Game
Configuration.
Здесь нажимаем кнопку Edit и в открывшемся окне нажимаем
Add и вводим название конфигурации (я назвал counter-strike). Нажимаем
OK и Close. Дальше возле следующего окна нажимаем Add и
находим в папке cstrike файл halflife-cs.fgd. Дальше следующие
четыре списка настраиваются автоматически. А в последних четырёх надо указать
папки как у меня, только где у вас установлена игра.
Теперь переходим на вкладку Build Programs.
Здесь вы должны указать:
1) EXE-шник игры
2) Компилятор csg
3) Компилятор bsp
4) Компилятор vis
5) Компилятор rad
6) Папку, куда будет сбрасываться готовая карта
Теперь переходим на вкладку Textures и с помощью кнопки
Add WAD выбираем необходимые текстуры.
Я советую указать из папки cstrike текстуры
de_aztec.wad, cs_dust.wad, cstrike.wad и decals.wad,
а из папки valve текстуры halflife.wad
В принципе, на этом можно и закончить. Но я должен сказать, что
по неизвестным мне причинам у меня (в WindowsMe) Worldcraft не хочет
компилировать карты, пока я не восстановлю реестр с помощью программы WinRetRu.
Потом всё начинает прекрасно работать, хотя в WindowsXP этого глюка нет.
Ну вот и всё. Можно приступать к созданию вашей первой карты
для Counter-Strike! Учебник по Worldcraft
Создание первого
уровня
Итак, приступим к созданию нашего первого уровня. Для простоты
это будет killzone на двоих.
Для начала нажимаем File/New (создаём новый проэкт) и
переключаем вид на Дальше нажимаем на кнопку , этой кнопкой в Worldcraft
создаются браши. Теперь в любом месте рабочей области щёлкаем мышью: появляется
заготовка браша с размерами, равными нулю.
Теперь надо задать его размеры. Для этого наведём мышь на один
из квадратиков, окружающих заготовку, до появления двухсторонней стрелки.
Зажимаем левую кнопку мыши и растягиваем объект до нужных размеров. Примерно
так:
Настраиваем размеры во всех трёх видах (сверху, сбоку, сзади).
Прежде, чем закончить создание браша, с помощью кнопки Browse выберем подходящюю
текстуру. Пусть она будет такая:
Теперь нажимаем правой кнопкой на заготовке:
Нажмите на Create Object.
У вас должно получится что-то, наподобие этого:
Top: , front: , side:
Это будет пол.
Можно просмотреть предварительный результат, для этого надо
выбрать 3D Textured вид, нажать на кнопку и ,управляя как в Контре,
посмотреть общий вид браша.
Теперь приступим к стенам. Смените текстуру на и создайте браш,
примерно так, как у меня
Top: , front: , side:
Вот первая стена и готова. Теперь нажимайте на и левой кнопкой нажимайте
на вашу стену. Теперь нажмите на ней правой кнопкой и в появившемся меню
выбирайте Copy. Теперь на свободном месте нажимаем левой кнопкой, а потом правой
и выбираем Paste. Теперь во всех трёх видах перетаскиваем её так, как у меня.
Top: , front: , side:
Точно так-же создадим остальные две стены. Должно получится
так:
Top: , front: , side:
Теперь меняем текстуру на и создайте браш для
потолка:
Top: , front: , side:
Вот наша комната и готова! Теперь надо её осветить. Для этого
нажимаем и
справа выбираем light:
Теперь на карте нажимаем мышкой и перемещаем пересечение прямых
как здесь:
Top: , front: , side: Теперь нажимаем Enter.
Теперь, изменив light на info_player_start, ставите точку
старта контр-террориста, а, изменив на info_player_deathmatch, точку старта
террориста. Поставте одну точку CT и одну T:
Top: , front: , side:
Какая из точек будет для контров (левая или правая), а какая
для теров, не имеет значения. Красная точка посредине - это лампочка (источник
света).
Вот, в принципе, карта и готова. Только ,если всё так и
оставить, то у одного игрока будет преимущество (один будет рождаться лицом к
врагу, а другой - к стене). Поэтому переходим в Top, выделяем левой и нажимаем
правой кнопкой на правую точку старта. Выбираем Properties и в появившемся окне
меняем Angle на 180:
Теперь сохраняйте карту и жмите F9. Если появится
то лучше перейдите на Expert
здесь нажмите последнюю строчку во втором поле и в четвёртом
поле после $game_exe добавте -game cstrike, нажмите Go! и
подождите, пока откомпилируется карта и загрузится игра. Всё, можете рубится в
своей первой карте!!!
Конечно, она очень простая и (если использовать мои размеры)
очень маленькая. Вашим "домашним заданием" будет увеличить размер комнаты и
добавить игроков. Учебник по Worldcraft
Усложняем наш уровень
Этот урок я начну с объяснения "домашнего задания"
Для начала надо было растянуть пол и потолок. Для этого надо
было перейти в 3D Textered вид и выделить их с помощью , удерживая клавишу Ctrl.
Потом надо было перейти в Top и растянуть их примерно так:
Теперь надо растянуть стены. Выделяем две противоположные стены
(зажимая Ctrl) и растягиваем так:
А теперь снимаем выделение кликом на свободном месте и
перетаскиваем одну стену к краю пола и потолка:
Остальные две стены изменяем точно также. Вот комнату мы и
увеличили. Теперь надо добавить игроков. Для этого просто создаём новые точки
старта (см. Урок №1). Но это ещё не всё. Уровень может получиться слишком
тёмным, поэтому добавьте ещё 2 - 3 лампочки. Вы, конечно, можете ещё
увеличить высоту потолка, но я это объяснять не буду потому, что высота
увеличивается также само как и ширина.
Теперь перейду к конкретно второму уроку. На этом уроке мы
добавим на карту вторую комнату и соеденим их коридором, а потом я расскажу, как
сделать красивое небо.
Для начала создадим вторую комнату недалеко от первой. Примерно
так:
Top
или
3D Textured
Теперь создадим коридор:
А сейчас надо соединить проходами коридор и комнаты. Для этого
выделяем стену одной из комнат, которая перекрывает проход, и уменьшаем её
размер так, чтоб она перестала мешать:
Точно также делаем проход в другую комнату. Теперь убираем
из первой комнаты все info_player_start (точки старта контров) и создаём их во
второй комнате (можно просто перетащить).
Дальше изменяем Angle для контров - 270, а для теров - 180.
(см. Урок №1) Теперь добавляем лампочек:
Вот, собственно и всё. Компилируем карту, и в ней можно будет
играть.
А сейчас я расскажу, как создать красивое небо.
Для начала находим текстуру Sky (где-то в halflife.wad),
она очень маленькая 16x16:
Теперь надо создать браш, поглощающий в себя всю карту:
Top
и
Side
Теперь нажимаем на нем правой кнопкой мыши и выбираем Hollow. В
появившемся окне нажимаем OK
Теперь везде удаляем потолки с помощью клавиши
Delete. После всего этого надо указать название неба. Открываем Map -
Map properties, в появившемся окне выбираем environment map (cl_skyname) (надо
включить кнопку Smart Edit) и вписуем в поле справа название неба. Пусть это
будет doom1, как в de_aztec. Список всех небес можно посмотреть в папке
cstrike\gfx\env, отбрасывая от названий файлов последние две буквы
(название + bk, ft, lt, rt, up, dn).
Желательно все лампочки поднять почти под самое небо, чтоб
освещение было ровномерней:
Side
Вот, вобщем-то и всё.
Учебник по Worldcraft
Ящики, кустики и т.п.
На этом уроке я расскажу, как расставлять ящики, кустики,
создавать воду, раскидывать оружие...
Ящики
Для начала уменьшим шаг сетки с помощью кнопки на панеле инструментов.
Создадим квадратный браш (кубик) с текстурой , примерно здесь:
Теперь переходим в 3D Textured и, с помощью кнопки , выставляем все текстуры, чтоб они
соответствовали границам ящика. Сперва уменьшаем размер текстур в 2 раза (Scale
выставляем по 0.50):
Если бы наш ящик был больше, мы б не уменьшали текстуру, но это
самый стандартный размер. Теперь закрываем окно и смотрим на ящик. Если
получается, что на каких-то сторонах ящика текстура лежит не правильно, то, не
выделяя ящик, заходим в свойства текстур, и нажимаем на неправильную
текстуру:
Теперь передвиним текстуру, как нам удобно:
Точно также исправляем все неправильные текстуры. Теперь
включаем Texture Lock и копирум этот
ящик куда хотим. Если мы хотим поставить ящик боком, то надо 2 раза нажать на
наго левой кнопкой мыши, навести указатель на кружочек в углу и повернуть ящик
вокруг своей оси:
Кустики
Для создания кустика надо создать две взаимноперпендикулярные
плоские пластины. Для этого меняем текстуру на , уменьшаем шаг сетки до предела и создаём максимально плоский
браш:
Теперь создаём второй такой-же браш, накрест с первым.
Выставляем на них текстуры. Выделяем оба браша и нажимаем на них правой кнопкой.
Выбираем Tie to Entity. В появившемся окне в выпадающем списке выбираем
func_illusionary (чтоб синее стало прозрачным, теперь в Render Mode ставим
Solid, а в FX Amount ставим 225.
Результат должен выглядеть примерно так:
Теперь его можно копировать куда хочеш и сколько хочеш (только
нодо включить Texture Lock).
Вода
Допустим мы хотим создать бассейн. Сначала растянем небо вниз.
Потом создадим третью комнату, в которой пол будет намного ниже, чем в
других:
Сменим неправильные текстуры в комнате на текстуры стен с
помощью кнопки Browse...
Теперь выберем любую текстуру воды, начинающуюся на "!" и
создадим браш, заполняющий весь "низ" этой комнаты.
Теперь нажимаем правой кнопкой на этом браше и выбираем Tie to
Entity. Там выбираем func_water, Render Mode ставим Texture, а FX Amount где-то
100 (это мутность воды).
Оружие
Оружие раскладывается так-же, как и точки старта игроков и
лампочки, т. к. это всё Point-based entity, только вместо light выбирается
armoury_entity. Потом нажимаем на нём правой кнопкой и выбираем тип оружия
(Item) и количество пушек в одной точке (Count)
Оружие можно просто копировать.
Лестница
Из воды надо как-то вылазить, создадим лестницу. Выберем
текстуру , уменьшим сетку и
создадим плоский браш размером с лестницу.
Повернём текстуры как надо и сделаем Tie to Entity. Выберем
func_wall и поставим Render Mode и FX Amount как у кустика.
Дальше создадим браш, чуть толще лестницы и поставим его так,
чтоб он поглощал лестницу.
Теперь делаем Tie to Entity и выбираем func_ladder. В свойствах
ничего делать не нужно, объект будет невидимый. Учебник по Worldcraft
Спрайты, зоны, камеры и т.п.
На этом уроке я продолжу рассказывать о различных
Entities.
Огонь
Допустим мы хотим сделать небольшой костёр. Для начала положим
на землю несколько брашей с "деревянной текстурой". Чтоб они были круглые, надо
справа выбрать cylinder.Это будут "дрова". Теперь заходим в Point-based
Entities и выбираем
env_sprite. Ставим его на "дрова". Заходим в его Properties и ставим Render Mode
- Additive, FX Amount - 225, Sprite Name - sprites\fire.spr. Размер спрайта
настраивается в Scale, оставим 1. Для большей реалистичности в середину огня
можно вставить лампочку.
Но огонь должен обжигать, т.е. снимать проценты здоровья.
По-этому создаём небольшой браш, делаем Tie to Entity выбираем trigger_hurt и
ставим Damage Type - SLOWBURN, этот объект будет невидимый:
Зона покупки
По умолчанию покупать оружие можно вблизи точек старта игроков.
Но если мы хотим сделать границы зоны болеечёткими или просто расширить зону, то
надо использовать func_buyzone, созданый из браша (Tie to Entity). Зона будет
невидимая, как воздух. Внутри её можно покупать оружие.
В свойстве Team надо указать команду, для которой создана зона.
По умолчанию зона действует на обе команды.
Бомба
Место для бомбы делается двумя способами: В Entities выбирается
info_bomb_target и ставится где надо. Поставим место для бомбы на контровской
базе.
У этого способа есть один недостаток. Никто точно не знает, где
заканчивается зона для бомбы. Поэтому существует второй способ: делается браш
(как для buyzone), только выбирается func_bomb_target, здесь границы чётко
обозначены границами браша. Сделаем всю базу зоной для бомбы.
Стёкла и решётки
Стёкла и решётки создаются из брашей (solid-based entity).
Сперва создаётся браш с размерами будущего стекла или решётки. Для стёкол
используются текстуры, начинающиеся с glass, а для решёток с
{. Создадим стеклянное окно с контровской базы на воду. Сначала надо
прорезать дырку в стене. Создадим браш там, где должна быть дырка (для красоты
стену можно сделать тоньше).
Теперь нажимаем на нём правой кнопкой и выбираем Carve. Теперь
уменьшаем его толщину до толщины стекла и делаем Tie to Entity. Стекло будет
разбивающимся, по-этому выбираем func_breakable. Для стёко Render Mode -
Texture, FX Amount - где-то 100 (мутность стекла), Material Type выбираем Glass
(это-же стекло), а Strength - это прочность стекла. Чем больше это число, тем
больше выстрелов оно не разобъёться. Поставьте 20. Скопируйте это стекло к
другому краю стены, чтоб получился "двойной стеклопакет" :) Теперь создадим
неразбивающуюся решётку. Создадим браш для решётки возле воды и поправим
текстуры.
Теперь сделаем Tie to Entity, выбираем func_wall, чтоб она не
разбивалась. Теперь Render Mode - Solid, FX Amount - 225.
Камеры
По умолчанию при входе в игру показывается контровская база. Но
можно сделать несколько просматриваемых мест. Для этого заходим в Entities и
выбираем trigger_camera. Ставим её в точке, откуда игрок будет смотреть. В
свойствах ставим Name - cam1 (имя камеры), Target - tar1 (имя цели), Hold time -
10 (время работы этой камеры в секундах). Теперь поставьте info_target из
Entities в точке, куда будет смотреть камера. В свойствах Name - tar1. Теперь
создадите вторую камеру (Name - cam2, Target - tar2, Hold time - 10) и вторую
цель (Name - tar2). Поставьте первую камеру на теровскую базу, а вторую на
контровскую. Камеры можно использовать и во время игры. Создадим очень
маленький браш:
Превратим его в func_button, в свойствах Targetted object
ставим cam2 и ставим эту кнопку на теровскую базу. Теперь при нажатии вблизи неё
+use на монитор выведется вид с cam2 т.е. с контровской базы.
Вместо func_button можно было использовать button_target, только она реагирует
на выстрелы. Учебник по Worldcraft
Заложники, VIP, звуки и т.д.
На этом уроке я закончу описывать различные entity.
Заложники
Придание карте тип cs_map (карта с заложниками) происходитв два
этапа. Во-первых надо поставить точки, где будут появляться заложники. А
во-вторых зону эвакуации. Точка старта заложников ставится так-же как и точки
старта игроков, только выбирается hostage_entity. Поставьте несколько заложников
к терам на базу. Теперь надо поставить зону эвакуации. Это можно сделать двумя
способами: поставить info_hostage_rescue из Point-based entities или
сделать из браша func_hostage_rescue. Лучше использовать func_hostage_rescue
из-за чёткости границ. Поставте зону для эвакуации на контровскую базу.
V.I.P.
придание карте типа as_map (карта с VIP) тоже состоит из двух
частей. Точки старта VIP и зоны эвакуации. Точка старта VIP называется
info_vip_start, а зона эвакуации func_vip_safetyzone и создаётся из браша.
Поставьте точку старта VIP к контрам, а зону эвакуации к терам.
Звук на карте
Звуки на карте ставятся с помощью ambient_generic из
Point-based entities. Поставим его в комнате с водой. В свойствах надо
указать WAV файл с необходимым звуком, укажите "ambience/crickets.wav" В
свойстве Volume можно изменять громкость звука, а в Start volume надо поставить
число, равное Volume. Поставим громкость 2.
Взрывающиеся от бомбы ящики
Что нам для этого надо? Во-первых сам ящик, во-вторых огонь от
взрыва и в-третьих место для бомбы. Поставим на контровскую базу ящик, который
надо взорвать.
Превратим его в func_breakable, переходим на вкладку Flags и
ставим флажок Only trigger, чтоб выдержал все выстрелы. Material type ставим
Metal, Name пусть будет bomb. Теперь поставим внутрь ящика взрыв - env_explosion
из Point-based entities. В его свойствах поставим Name - bomb. Теперь
переходим в свойства func_bomb_target и поставим в Target (when bomb blows) -
bomb. Вот, собственно, и всё.
Гроза
Для создания грозы нам понодобятся молния (env_laser), гром
(ambient_generic), вспышка от молнии (light_spot) и генератор события
(trigger_multiple). Поставим один env_laser по середине карты под самое небо.
Здесь будет начинаться молния. В свойствах указываем Name - moln1, Target of
Laser - moln2, Sprite Name - "sprites/lgtning.spr", Brightness - 225, Beam Color
- 225 225 225, Width of beam - 80, Amount of noise - 100, Texture scroll Rate -
1. Теперь надо поставить info_target в точке, куда молния будет бить, и назвать
его moln2. Где-то между ними надо поставить 3 light_spot, в свойствах указать
Name - light1, а на вкладке Flags поставить Initially dark. Дальше поставте
ambient_generic возле light_spot, Name - grom1, Path/filename.waw of WAV -
"ambience/thunder_clap.wav", Volume и Start volume - 10. Теперь надо поставить
два trigger_multiple: на выходе из теровской и контровской баз. В их свойствах
Target - manager, Delay before trigger - 0, Delay before reset - 5. Теперь всё
это надо собрать "до кучи". Ставим где-нибудь на карте multi_manager. В его
свойствах Name - manager, дальше выключаем SmartEdit, нажимаем add, в поле key
пишем moln1, в поле Value - 3, нажимаем OK. Дальше точно так-же key - light1#1,
в поле Value - 3.5, нажимаем OK; key - grom1, в поле Value - 3, нажимаем OK; key
- light1#1, в поле Value - 3.5, нажимаем OK; key - grom1, в поле Value - 4.3,
нажимаем OK. Закрываем свойства.
Учебник по Worldcraft
Последний урок
На этом уроке я пока закончу описывать Worldcraft.
Послесловие
Вот, вобщем-то, и всё основное, что необходимо знать для
создания карт в Worldcraft. Конечно, в Worldcraft есть ещё много функций и
возможностей, с многими из которых даже я ещё не совсем разобрался, но это
больше касается Half-life и других его модов (кроме CS).
Таблица Entities
Список Point-based entities:
cycler_sprite
|
Размещает на карте спрайт, в отличие от env_sprite через него нельзя
проходить.
|
env_beam
|
Прокручивает спрайты от одного "таргета" к другому.
|
env_beverage
|
При активации появляется банка Coca-Cola (или чего-нибуть другого)
|
env_blood
|
При активации появляется кровь
|
env_explosion
|
При активации появляется взрыв
|
env_laser
|
Луч из env_laser в "таргет"
|
env_message
|
При активации игрок получает сообщение (звук)
|
env_shake
|
Землетрясение
|
env_sound
|
Управляет аккустикой помещения (можно сделать иллюзию маленькой, большой
команаты и т.д.)
|
env_spark
|
При активации появляется вспышка
|
env_sprite
|
Спрайт, в отличие от cycler_sprite, через него можно проходить
|
infodecal
|
Создаёт декаль
|
info_player_deathmatch
|
Точка старта террористов
|
info_player_start
|
Точка старта контр-террористов
|
info_vip_start
|
Точка старта VIP
|
info_target
|
Таргет (или цель для других entities)
|
light
|
Источник света
|
light_environment
|
Источник света помощнее
|
light_spot
|
Самый мощный источник света, имеет направленость
|
trigger_camera
|
Камера
|
trigger_changetarget
|
Триггер, меняющий цель
|
ambient_generic
|
Источник звука
|
multi_manager
|
Управляет включением/выключением других entities.
|
hostage_entity
|
Точка старта заложников
|
info_hostage_rescue
|
Точка эвакуации заложников
|
info_bomb_target
|
Место для бомбы
|
armoury_entity
|
Оружие
|
info_map_parameters
|
Параметры карты
|
Теперь частоиспользуемые Solid-based entities.
button_target
|
Кнопка, реагирующая на выстрелы
|
func_button
|
Кнопка, реагирующая на +use
|
func_buyzone
|
Зона покупки
|
func_bomb_target
|
Зона для бомбы
|
func_breakable
|
Разбивающийся объект
|
func_door
|
Дверь, въезжающая в стену
|
func_door_rotating
|
Дверь, окрывающаяся поворотом (обычная)
|
func_escapezone
|
Зона эвакуации террористов
|
func_hostage_rescue
|
Зона эвакуации заложников
|
func_illusionary
|
Визуальный объект
|
func_ladder
|
Лестница (см. Урок №3)
|
func_vip_safetyzone
|
Зона эвакуации VIP
|
func_wall
|
Неразбивающийся объект
|
func_water
|
Вода |
|