Добавлен , опубликован

Работа с VHE для CS 1.6 и HL

Содержание:
Ну, вот с основами разобрались. Теперь продолжим. Начнём с обустройства нашей комнаты.

1. Стёкла и разбиваемые предметы

Я считаю, что дырки в стенах без стекла, не очень реально, да и не красиво. Попробуем это исправить. Для начала при помощи Carve делаем вырез в стене, потом делаем тонкий браш с текстурой стекла (текстуру стекла можно найти в Half-Life.wad). Потом выбираем наше стекло и нажимаем To Entity.
Далее есть 3 варианта. Если мы хотим сделать стекло не разбиваемое, то выбираем func_wall. Настраиваем его следующим образом:
Name - поле для использования в триггерах. Несколько разных объектов могут иметь одно
и тоже имя, тогда они будут вызываться одним событием. Для начала имя нам не надо, поэтому оставляем поле пустым.
Render FX - параметры отображения. Это нам пока не надо - оставляем без изменений.
Render Mode – то же параметры отображения. Но тут мы меняем параметры на Texture. (Texture - означает, что браш в игре, при параметрах прозрачности будет отображаться с покрытием текстуры, которые мы выберем в VHE. Color – то же самое, только вместо текстуры браш будет покрыт цветом, выбраным в поле FX Color).
FX Ammount - степень прозрачности. 0 - полностью прозрачный, 255 – полностью непрозрачный. Для начала поставим 100.
Light Flags и Minimum Light Level - не трогаем. Скажу только, что данные параметры
отвечают за отображение тени объекта. Изначально, объекты энтити не отбрасывают тени и пропускают свет насквозь.
Если мы хотим сделать стекло разбиваемое и пулями, и гранатами, то выбираем func_breakable. Настраиваем его так:
Name - не ставим.
Render FX - также как ив предидущем случае.
FX Mode - аналогично.
FX Ammount – то же самое.
Light Flags и Minimum Light Level – так же не трогаем.
Material Type – материал, из которого будет наш разбиваемый браш.
Возможные Варианты:
Glass - стекло (его и выбираем).
Wood – дерево.
Metal – метал.
Flesh – мясо.
Unbreakable Glass - стекло, которое бьётся только от попадания гранат.
Rocks – камни.
Cinder Block - каменные блоки.
Computer - платы... (электроника).
Strength - количество hp после, которых объект разобьется. Ставим 100. Стекло будет разбиваться после 3-4 пуль с глока.
Target on break - имя объекта, который будет срабатывать, после того как данный объект
сломается. Используется в триггерах. Поле оставим пустым.
Delay before fire - задержка, перед тем как сработает триггер. Относится к предыдущему
пункту. Оставляем 0.
Gib Model - модель осколка при разбивании объекта. По дефолту стоит модель, соответствующая модели осколка выбранного материала.
Gib Direction - направление осколков. Оставляем по дефолту.
Random - случайное.
Relative to Attack - направленное на атаку.
Explode Magnitude - мощность взрыва при разбивании объекта. Чтобы не было взрыва, ставим 0.
Перед тем как закончим со стёклами, скажу пару слов о флагах:
Only Trigger - объект будет ломаться только от триггера.
Touch - объект ломается от прикосновения.
Pressure - объект ломается от давления на него, например, если на него встанут.
Со стёклами покончено.

2. Небо и Солнце

Практически нет карт, в которых не было бы открытых пространств, поэтому перейдём к небу.
Чтобы сделать небо, делаем браш куб с текстурой Sky из Half-life.wad, таких размеров,
чтобы в этот куб могли поместиться все конструкции на Вашей карте. Выбираем наш куб и кликаем Tools-> Make Hollow (Ctrl+H). В появившемся окне выбираем 16. (Make Hollow
делает объект полым изнутри, а число в окошке - толщина стенок в юнитах.) Выбираем
коробку и делаем ungroup. Стены нашей коробки можно покрыть другими текстурами. Под "потолком" делаем точечный энтити light_enveronment - солнце. Такого солнца на карте вполне хватит одного. Однако время компиляции сильно увеличится. Для уменьшения времени делаем следующее. Делаем точно такую же коробку, но не покрытую текстурой sky. Удаляем у второй коробки пол и потолок. Совмещаем обе коробки так, чтобы потолок первой коробки (с текстурой sky) был полом второй коробки. Обобщу - компилятор просто не обсчитывает свет в пространстве с обратной стороны "потолка".
Наверняка Вы заметили, на разных картах разное небо. Чтобы выбрать нужное нам небо заходим в папку ...cstrike\gfx\env\ там смотрим, какое небо нам нравится. Если выбрали, смотрим его название и запоминаем, мысленно убирая 2 последние буквы. Потом в VHE жмём map->map properties и в поле environment map (cl_skyname) вводим название выбранного нами неба, и.. вуаля - небо готово.

3. Лесницы

Лестницы нужны, безусловно. Делаются они просто.
Рассмотрим 2 случая.
  1. Если нужна лестница, которая стоит вплотную к стене
Делаем тонкий браш около стены с текстурой лестницы. Текстуры есть в Half-Life.wad
с названиями ladder и т.п. Наверно Вы обратили внимание на то, что в текстуре лестницы
есть места синего цвета - это места, которые мы впослествии сделаем прозрачными. Кстати прием, который я опишу, подходит для любых текстур с прозрачными местами. Вернёмся к нашему брашу. Ставим func_illusionary. Render Mode - Solid. FX Ammount - 255. Однако, если мы так всё и оставим, то по нашей лестнице не только не сможем взбираться, но через неё можно будет ходить... Непорядок. Делаем вплотную к лестничному брашу браш с текстурой AAATRIGGER. Браш должен немного выступать из видимой лестницы. Теперь о текстуре AATRIGGER - текстура особая, она реагирует
на движение игрока в пределах браша с данной текстурой. При этом AAATRIGGER
делает браш невидимым и нематериальным. Так вот у браша с текстурой ааатриггер делаем func_ladder. Если хотите, чтобы сбоку за лестницу нельзя было зацепится, то надо сделать ещё пару обычных брашей по-бокам лестницы.
  1. Если нужна двухсторонняя лестница
Делаем всё также как с односторонней, но браши c func_ladder делаем с обоих сторон.

4. Двери

Есть 2 типа дверей.
Двери отъезжающие - делаются просто. Во-первых, вырезаем отверстие. Делаем тонкий браш дверь. Текстуру можно найти любую. Делаем эту дверь func_door и настраиваем.
Новые параметры:
Speed - скорость отъезжания двери.
Move/Stop sound - звуки при отъезжании/остановке двери.
Target - имя объекта цели (для триггера)
Damage inflicted when Blocked - урон игроку, если он помешает открытию/закрытию двери.
Locked/Unlocked Sound - звук запертой/открытой двери.
Locked/Unlocked Sentence - сообщение при запертой/открытой двери
Delay before close - время, которое дверь стоит, перед тем как закроется (-1 - остаётся стоять открытой. Не используется, если стоит флаг Toggle).
Kill Target - имя объекта, который будет уничтожен после открытия двери.
Флаги:
Starts Open - дверь вначале раунда открыта.
Passable - дверь будет нематериальной.
Toggle - дверь при открытии будет оставаться открытой, пока её не закроют.
Use Only - дверь открывается только от юса.
Да ещё, дверь будет отъезжать в сторону, указанную указателем angle. Кроме градусов, можно выбрать вверх, вниз.
Двери вращающиеся
Тут сложнее.. Однако приступим. Чтобы дверь вращалась, ей нужна ось вращения. Ось вращения в игре делается брашем с текстурой origin из half-Life.wad, то есть ось вращения будет проходить через центр браша c текстурой origin. Сам браш с текстурой origin в игре не виден. Делаем с той стороны, где будут "петли" двери, браш с текстурой origin.
Потом выбираем браш дверь ВМЕСТЕ с кубиком и делаем из них func_door_rotating.
Новые свойства:
Distance (deg) - угол на который будет открываться дверь.
Флаги:
Reverse Dir - при открытии двери дверь будет открываться в сторону, с которой её открывают.
One-Way - дверь открывается только с одной стороны.
X Axis, Y Axis - дверь будет, вращаться по оси X или соответственно Y.
Примечание:
Если Вы указали имя, а также допустим кнопку, от которой эта дверь открывается, то дверь будет открываться только от триггера.

5. Вода

Во-первых, чтобы сделать воду - нужен "сосуд" куда её можно "налить". Делаем углубление.
Внутри делаем браш с текстурой воды (начинается на !). Браш отправляем To Entity. func_water (Wave Height - высота волн, на поверхности. Content - просто вода, либо лава, либо кислота).
Не забудьте сделать воду полупрозрачной.

6. Звук

Звук, достаточно важная вещь на карте. Звук на карте воспроизводится точечным объектом ambient_generic.
Опции:
Path/filename.wav of WAV - звуковой файл (вместе с путём), который будет воспроизведён.
Volume (10 = loudest) - громкость по 10 балльной шкале. (10 самое громкое).
Start Volume - громкость звука, когда он только начинает звучать.
Fade in/out time - введения/затухания звука от начальной громкости к конечной (в секундах).
Флаги:
Play Everywhere - слышно везде на карте.
Small/Medium/Large Radius - радиус звучания.
Start Silent - звук надо активировать
Is Not Looped - если установлен, то звук при активации будет воспроизводиться только 1 раз.
Также звук можно воспроизвести энтити env_sound.
Опции:
Radius - радиус звучания.
Room Type - тип комнаты, тут советую, поэкспериментировать.

7. Объекты, которые можно двигать

Наверняка все играли в cs_mansion и знают что стул (у терроров на 2 этаже) можно
двигать. Объясню, как сделать такой же, или нечто подобное. Ну, рассмотрим на примере
ящика, кубической формы. Для того чтобы ящик можно было двигать, надо сделать этот
ящик func_pushable. Рассмотрим новые опции.
Hull Size - размер объекта.
Возможные значения:
Player Duck - ящик будет иметь размер присевшего игрока.
Player Size - ящик будет иметь размер игрока.
Big Size - ящик будет иметь большой размер.
Point Size - ящик будет иметь размер браша. Собственно это нам и надо.
Friction - трение, чем больше, тем сложнее его двигать.
Buoyancy - плавучесть.
Флаги:
Breakable - если установлен, то наш объект будет ещё и ломаться, для настройки есть
такие же поля, как и func_breakable.

8. Кнопки

Кнопки широко используются в игре, так как нужны для открывания дверей и прочих
действий. Рассмотрим новые опции.
Targetted object - имя объекта, который активируется, после нажатия этой кнопки.
Health (shootable if > 0) - количество hp. Если количество меньше или равно 0, то
кнопку можно активировать, только дотронувшись либо нажав её. Если Hp >0 то, в
кнопку можно стрелять, при превышении значения hp кнопка нажмётся.
Флаги:
Don`t move - если указан, то кнопка при нажатии будет оставаться на месте, иначе
кнопка будет вдавливаться в направлении указанном в свойстве angle.
Toggle - если выбрано, то при однократном нажатии на кнопку в игре она останется нажатой, пока её не нажмут снова.
Sparks - если выбрано, то в игре из кнопки будут сыпаться искры.
Touch Activates - кнопка в игре будет активироваться от прикосновения к ней.

9. Места закупки

По дефолту места закупки располагаются вокруг мест появления, но если использован объект с функцией func_buyzone, то места закупки будут ТОЛЬКО в тех местах, где использована эта функция. Единственная опция - team - выбрать команду, которая может здесь закупаться.

10. Возможность ставить бомбу, и заложники

Если использован точечный энтити с функцией info_bomb_target - террористам автоматом
будет даваться бомба, которую они смогут ставить в месте указанным этим объектом. Таких мест может быть как одно, так и несколько.
Если на карте есть точечный энтити hostage_entity - то на месте этого энтити в игре будет стоять заложник. По дефолту заложники спасаются, когда попадают на базу CT, однако
если использован энтити info_hostage_rescue - то заложники будут спасаться ТОЛЬКО в
месте этого энтити.

11. Типы Карт

Есть три основных типа карт.
  1. CS – карты, где надо спасать заложников.
  2. DE - карты на минирование объектов.
  3. ES – карты, где покупать что-либо могут только CT, а T должны сбежать.
Также есть ещё один тип карт, на мой взгляд, его популярность сейчас растёт. Это карты типа FY (например, fy_pool_day, fy_pool_party,fy_stroyka). В этом типе карт никто не может закупаться, но в пределах уровня разбросано огромное кол-во оружия, которое можно подбирать.
Ещё есть карты - гибриды, где в одной карте несколько целей, например
можно и заминировать, и спасать заложников. Такие карты называются, например CS/De ***.

12. Оружие на карте

Оружие на карте можно сделать точечным энтити armoury_entity. Там есть только 2 параметра item - вид оружия, count - количество.

13. Параметры карты

Параметры карты настраиваются энтити info_map_parameters. Есть 2 опции:
Weapon_buying - какие команды могут покупать оружие.
Bomb Radius - радиус взрыва бомбы.

14. Место спасения террористов

Место спасения террористов - определяется func_escapezone.
Продолжение следует…

Содержание