Главная
Новости
Статьи
Ссылки
Гостевая книга
Форум
Почта:
Прочее
Общая информация
Предыстория
Оружие
Кадры из игры
Концепт-арт
Скачать
Инструменты
Авторы проекта
Указатель объектов
Юмор в картинках

Статьи о картостроении
Valve Hammer: Делаем entity
(или "Помогите сделать дверь")

27.03.2003 г. с дополнениями до 2021 г.

Часть 1

Ну, здрасте всем, типа. Это опять тов. Руфмен со свеженькой статейкой. Сегодня я подробно расскажу вам о вальвовском Хаммере (бывшем раньше "Ворлдкрафтом" :-), а еще, можно вспомнить Кварк или Jackhammer). Последние версии 3.4 и 3.5 для Half-Life 1 редактора Valve Hammer здесь, кстати. Расскажу, что за фигня такая — ентить и зафик он нужен. Конечно, все энтити я перебрать не смогу — вон их сколько в оригинальном Полураспаде, но основные и большую часть особенных разберу.

Итак, начнём.
Сразу скажу, что entity один из самых главных объектов в Хаммере (для меня, даже важней, чем браш). Энтить даёт жизнь вашему уровню. Энтити — это монстры, двери, переключатели, свет. Они позволяют добиться некой интерактивности происходящего, экшЫна. Создание энтитя отличается от создания браша. Чтоб поставить свет, не нужно растягивать рамку под кубик и жать ВК или Enter, вальвовский Хаммер сам предоставляет все удобства по созданию entity'ей, достаточно выбрать из списка нужный энтить, указать его координаты, передвигая направляющие, и нажать тот самый Enter. Не нужно, также, самому прописывать параметры — у Хаммера всё есть готовое (за исключением некоторых ентитей — о них позже). Впрочем подробно параметры объектам заданы в подключённых к редактору fgd-файлах (game definition file есть как к Half-Life half-life.fgd, так создаются и к модам, для Red Alert — ra.fgd). Вначале будет написано название параметра из fgd, после слеша жирным шрифтом будет оригинальное название параметра без fgd, а в скобках будет указан тип поля (целое, символьное или какое ещё).

Всего существует два типа энтитей — точечные (point-based) и брашевые (brush-based) или по-простому блоковые. Как вы, наверное, догадались — последний основывается непосредственно на блоке, допустим, на ящике, чтобы сделать его ломающимся (func_breakable), на кнопке (func_button), чтобы сделать её нажимающейся, и так далее. Т. е. брашевые энтити видны в игре, как обыкновенные браши (стены, ящики, двери, унитазы). А point-entity интерферируется... э-э-э... не то чего-то ввернул, выглядят и действуют совсем по-другому. В редакторе они представляют собой метки (параллелепипедики и кубики) разного цвета и размера. Некоторые из них после компиляции карт видны в Халфе как монстры, дым, освещение. Другие точечные энтити отвечают за работу, за интерактивность. Они "заставляют" воспроизводится сценарий событий, отвечают за время воспроизведения этого сценария, за различные его параметры и т. п.

Ну вот, что такое entity я, вроде, оповествовал. Теперь раскатаю тему об отдельных энтитях движка Half-Life. А то ведь ещё есть, например, и ОпФорс и They Hunger — а у них энтити дополнены своими.


1. оружие и патроны: weapon_*, ammo_*, item_*

У этих энтитей похожие параметры. Все они являются ни чем иным, как оружиями, патронами и различными вещами в Халве. Параметры:

  • Name/targetname имя оружия или вещи. По имени объект можно удалить при наступлении какого-нибудь события, а просто при вызове, например, взрывчатка или граната подорвётся.
  • Kill Target/killtarget (string) удаляет цель, имя которой сюда вписано, когда игрок подбирает данную вещь,
  • Target (string) имя вызываемой энтити, когда игрок подбирает данный предмет (сработает, если костюм HEV на игроке надет); а параметр
  • Delay before trigger/delay отвечает, через сколько секунд будет вызвана цель, имя которой обозначено в поле target, после того, как предмет подобран (по умолчанию сразу, т.е. =0).
  • Pitch Yaw Roll (Y Z X)/angles (string) углы наклона, направления и крена, обычно важен угол направления (по умолчанию =0 0 0)
Флаг:
  • 2048 = Not in Deathmatch — не появится в многопользовательском режиме Deathmatch.


2. Триггеры (trigger_*)

Триггеры обрабатывают различные параметры и часто что-нибудь вызывают, в зависимости от того, чем является данный триггер (во как). В игре они невидимы и проходимы насквозь, потому объёмные триггеры затекстурить можно любой текстурой, но если текстура будет светящейся, то в игре вокруг всё подстветится. Советую всё же для триггеров служебную текстуру aaatrigger для однообразия:aaatrigger.
Параметры различных триггеров схожи, основной из которых — имя вызываемой цели Target, некоторые имеют новые поля, которые как раз и определяют "наружность", пардон, функции триггера. Вот некоторые основные триггеры, которые используются в Халве:

trigger_auto — этот точечный триггер вместе с началом уровня автоматически вызывает активацию своих целей под именем, которые указаны в поле

  • Target (string).
  • Trigger State/triggerstate задаёт целям конкретный статус 0=OFF — выкл., 1=ON — вкл. или 2=TOGGLE — переключить.
  • Global State to Read/globalstate (string) — если вписать имя глобальной переменной, то её статус будет разрешать или запрещать запуститься триггеру, а если переменную создать забыли, то запустится.
Например, на самых первых уровнях Халвы вы наверное замечали титры, появляющиеся на экране. Кстати, на одной карте можно установить больше одного trigger_auto, запустятся все.

trigger_autosave — автоматически сохраняет прогресс продвижения игрока в раздел autosave

trigger_cdaudio — этот триггер часто можно заметить на различных картах. Он переключает дорожку на компакт-диске (линцензионная поставка Халфы имеет ещё около 30 музыкальных дорожек на CD) в зависимости от сложившейся в игре ситуации. За номер трека отвечает параметр

  • Track #/health — -1 = стоп, с 1 по 30 проиграть с компакта заданную дорожку.

trigger_changelevel — объёмный триггер, который используется, когда нужно перейти с одной карты на другую (можете посмотреть статью "Смена карт"). Ключевые значения триггера:

  • Name/targetname (string) — имя триггера,
  • New map name/map (string) — имя карты, которую нужно загрузить следующей,
  • Landmark name/landmark (string) — имя точечной энтити-ориентира info_landmark-а, относительно которой игрок остаётся при переходе между картами, причём на обоих картах должно быть по одному info_landmark с одинаковыми именами.
  • Change target/changetarget (string) — перенаправление цели (target),
  • Delay before change target/changedelay (string) — задержка, перед тем как изменить цель.

trigger_counter — с помощью него можно можно составить цепочку различных последовательных задач, с помощью которых вызовется главная цель. Он подсчитывает количество вызовов и срабатывает.
Ключевые параметры:

  • Target (string) цель, которая будет вызвана,
  • Name/targetname (string) — имя триггера,
  • Target Path/netname (string) — путь цели,
  • style (integer) — стиль (32),
  • Kill target/killtarget (string) — уничтожает цель с заданным именем (любую кроме звукового объекта ambient_generic),
  • Master (string) — имя энтити multisourс'а, блокирующего этот триггер (подробнее),
  • Sound style/sounds (integer) — тип (стиль) звука,
  • Delay before trigger/delay (integer) — задержка перед вызовом цели,
  • Message (set sound too)/message (string) — сообщение,
  • Count before activation/count (integer) — отсчёт перед вызовом цели (по умолчанию =2).

trigger_gravity: объёмный триггер позволяет изменяеть гравитацию на уровне. Имеет схожие параметры, что и trigger_counter, но имеет поле

  • Gravity значения в диапазоне от 0 до 1 (по умолчанию =1).

trigger_hurt: объёмный триггер, позволяющий делать зоны непосредственного влияния на физическое состояние игрока или монстров — повредить здоровью или вылечить.
Основные ключевые значения — это

  • Damage/dmg — величина здоровья, убиваемого триггером за полсекунды, если больше 0, или восстанавливаемого, если меньше 0 (по умолчанию =10)и
  • Damage Type/damagetype — тип повреждения, и можно складывать несколько типов сразу:
    • 0 — GENERIC — демолекуляризация ;) (по умолчанию),
    • 1 — CRUSH — сдавливание,
    • 2 — BULLET — огнестрельное ранение,
    • 4 — SLASH — порезы,
    • 8 — BURN — горение,
    • 16 — FREEZE — замерзание,
    • 32 — FALL — падение с высоты,
    • 64 — BLAST — поражение взрывом,
    • 128 — CLUB — ушиб, перелом, поражение от удара,
    • 256 — SHOCK — поражение током,
    • 512 — SONIC — оглушение,
    • 1024 — ENERGYBEAM — облучение,
    • 16384 — DROWN — недостаток кислорода (тонет или в открытом космосе),
    • 32768 — PARALYSE — парализация,
    • 65536 — NERVEGAS — поражение нервным газом,
    • 131072 — POISON — токсичное отравление (биологическая опасность),
    • 262144 — RADIATION — радиационное облучение,
    • 524288 — DROWNRECOVER — состояние восстановления после всплытия + может использоваться и как режим восстановления здоровья в мире Ксена,
    • 1048576 — CHEMICAL — агрессивное химическое воздействие,
    • 2097152 — SLOWBURN — ослабленное горение,
    • 4194304 — SLOWFREEZE — ослабленное замерзание.
Флаги:
  • 1 = Target Once — если у trigger_hurt в поле target задана цель, то обычно он её вызывает каждый раз, когда начинает срабатывать; а этот флажок только в начале первого срабатывания заставит вызвать цель,
  • 2 = Start Off — вначале отключён; чтобы включить, вызываете его из другого объекта,
  • 8 = No clients — когда установлен, trigger_hurt не воздействует на игроков (которые считаются в движке клиентами),
  • 16 = FireClientOnly — триггер будет воздействовать на любого, кто его коснётся, но вызов цели триггера произойдёт только тогда, когда он действительно повредит игроку (т.е. клиенту в движке),
  • 32 = TouchClientOnly — если установлен, то этим триггером может быть покоцан только клиент (игрок).

trigger_monsterjump — достаточно интересный объёмный триггер, который позволяет монстрам по команде триггера запрыгивать на различные поверхности. Точнее это выглядит не как запрыгивание, а так, как будто их подталкивает какая-то сила.
Ключевые значения:

  • Jump Speed/speed (integer) — скорость прыжка (по умолчанию =40),
  • Jump Height/height (integer) — высота прыжка (по умолчанию =128),
  • Target (string) — после срабатывания триггера вызовется энтитя с указанным в этом поле именем,
  • delay (integer) — задержка,
  • Kill Target/killtarget (string) — какой объект удалить до конца игры с заданным именем (кроме звукового объекта ambient_generic),
  • Target Path/netname (string) — путь цели,
  • style (integer) — стиль
  • Master (string) — имя ентити multisourс'а, блокирующего триггер. Подробнее.
  • sounds (integer) — стиль звука
  • message (string) — сообщение ("Мочи зелёного!...")
  • Pitch Yaw Roll (Y Z X)/angles (целое целое целое) — Наклон вперёд, Поворот и Крен в градусах, т. е. направление прыжков (по умолчанию =0 0 0)

trigger_once: основной объёмный триггер, вызывающий активацию цели (другие триггеры, ентити функций и др.) игроком или монстром, но только один раз. Параметры те же самые (читай — такие же). Флаги:

  • Monsters — сработает на любом монстре, который входит в зону,
  • No clients — не сработает от пересечения игроком (клиенты в движке — это игроки),
  • Pushables — сработает, когда его границу пересечёт любой брашевый объект func_pushable,

trigger_multiple то же самое, что и trigger_once, только может срабатывать бесконечное количество раз, поэтому есть дополнительный параметр

  • Delay before reset/wait (integer) — через какое время после срабатывания он снова будет взведён. Принцип сливного бачка, время наполнения которого вы можете задать (если провести аналогию слива полного бачка со срабатыванием триггера).

trigger_push: "толкает" игрока или монстра, если он находится, скажем, в аэродинамической трубе. Как заметил Rumit_Gronovsky, особенности движка первого Half-Life таковы, что чтобы триггер заработал и появился эффект тяги, на этот триггер подопытный должен упасть хотя бы с единичной высоты. С параметрами у этого объекта такая же лажа, как и с другими триггерами (читай — такие же), разве что

  • Pitch Yaw Roll (Y Z X)/angles (string) чтобы толкало вверх, вбейте угол наклона 90°, т.е. 90 0 0
  • Speed of push/speed (integer) — скорость толкания (по умолчанию =40).
Флаги:
  • Once only — срабатывает однократно,
  • Start off — выключен при первой загрузке карты,
  • Pushables — уносит толкабельные func_pushable. Например, под Blast Pit бочки, плывущие в зелёной отраве, за дальним углом поднимались наверх, чтобы через минуту снова шлёпнуться с водопада перед нашим взглядом.

trigger_relay: точечный триггер-реле является почти тем же самым, что и multimanager — у него можно задать цель или ликвидацию целевого объекта и задержку, но возиться с реле придётся больше. Параметр

  • Trigger State/triggerstate (integer) — отвечает за состояние, которое он однозначно задаёт вызванной цели в параметре target: 0 = off — выключить, 1 = on — включить, 2 = toggle — переключить.
Вообще можно для редактора исправить отключение по умолчанию на включение. Для этого найдите в вашем .fgd после объявления trigger_relay строчку к нему типа
        triggerstate(choices) : "Trigger State" : 0 =
и исправьте этот 0 на 1, чтобы не сталкиваться с проблемой невключающихся объектов, когда забываешь задать состояние. Но скорее всего вам и без этой настройки будет удобно настраивать триггер-реле.

trigger_teleport: если нужно сделать телепорт, то ставьте этот триггер. Конечную точку прибытия (точнее имя ентитя info_teleport_destination) нужно прописывать в поле target.

trigger_transition: действует вместе с trigger_changelevel'ом. Ипользуется для переправки энтитей (монстров там, коробок...) в другой уровень. Подробнее в статье Смена карт.


3. Монстры (monster_*)

Про них я думаю, всем понятно — это энтити монстров. Основные поля:

  • Name/targetname (string) — имя монстра для обращения к нему других объектов,
  • Body — у некоторых моделей можно выбрать номер подмодели (бодигруппы). Несколько альтернативных бодигрупп в игре как разнообразят монстров/персонажей так и показывают, что учёный достал/спрятал шприц, или мёртвый персонаж выпустил оружие из рук. А по умолчанию используется подмодель № 0,
  • Skin — у некоторых моделей можно выбрать номер сменной текстурной группы (скингруппы). Иногда они сменяются как для разнообразия, так и для имитации моргания глазами у большеглазых монстров (по умолчанию берётся текстурная группа № 0),
  • TriggerTarget (string) — цель, которая будет вызвана, если сработает условие в Trigger Condition,
  • Trigger Condition/TriggerCondition (integer) — можно выбрать одно из условий, при которых сработает TriggerTarget:
    • 0 — No Trigger — без условий (по умолчанию),
    • 1 — See Player, Mad at Player — при встрече с игроком, раздражаясь на него
    • 2 — Take Damage — при получении какого-либо урона,
    • 3 — 50% Health Remaining — при потере половины здоровья,
    • 4 — Death — при гибели,
    • 7 — Hear World — услышав что-либо,
    • 8 — Hear Player — услышав игрока,
    • 9 — Hear Combat — услышав звуки борьбы или боя
    • 10 — See Player Unconditional — при встрече с игроком,
    • 11 — See Player, Not In Combat — при встрече с игроком вне боя.
  • Squad Name/netname (string) — имя группы, в которую войдёт монстр/персонаж, и его действия будут в ней координироваться (не у всех типов монстров),
  • Weapons — у солдат и некоторых других монстров можно выбрать вооружение,
  • Pitch Yaw Roll (Y Z X)/angles (string) — угловое положение: наклон вперёд-назад, направление и крен (по умолчанию =0 0 0)
  • Use Sentence/UseSentence (string) — эту фразу произнесёт персонаж при попытке позвать его за собой. Названия фраз задаются в файле sentences.txt. Пример на тренировочной карте t0a0d.bsp: у учёного, которого ведёшь за собой, задано UseSentence = SC_HAZ_OK
  • Un-Use Sentence/UnUseSentence (string) — это он сказанёт, когда игрок откажется вести персонажа за собой. Например, для охранника можно задать UnUseSentence = BA_HAZ_WAIT (как и в scripted_sentence группа звуков пишется без приставки из восклицательного знака, а конкретная речь должна быть с ним: !BA_HAZ_WAIT0)
  • Render FX/renderfx,
  • Render Mode/rendermode,
  • FX Amount (1 - 255)/renderamt,
  • FX Color (R G B)/rendercolor.
  Правда встречаются ещё кое-какие параметры:
  • Scale (дробное) — масштаб модели, но это в Спирите и у нас в ХЛРА тоже, в Half-Life нет (масштаб по умолчанию =1,0),
  • Orientation — ориентация у стационарных стрелюк бывает 0 = половая или 1 = потолковая,
  • Pose — можно выбрать позу для трупов monster_*_dead.
Основные флаги монстров:
  • 1 = WaitTillSeen — ИИ не работает, пока монстр не попадет в зону видимости игроком (причём видимости движком игры, а не прямой видимости) или
  • 1 = Instant On — у monster_tripmine означает, что эта лазерная мина сразу взведена,
  • 2 = Gag — монстр говорит только тогда, когда к нему обращается игрок,
  • 4 = MonsterClip — для монстра блок func_monsterclip будет непроходим,
  • 8 = NoWreckage — у вертолёта monster_apach не будет обломков (установите, если он по сюжету не взлетает),
  • 16 = Prisoner — на монстра не обращают внимания ни враги, ни он сам ни на кого,
  • 32 = Squad Leader — назначить монстра координатором группы, название которой в поле Squad Name (подробнее здесь) или
  • 32 = Autostart — автозапуск техники,
  • 64 = IgnorePlayer — очевидно, что монстр игнорирует игрока или
  • 64 = Start Inactive — техника выключена, но можно включить,
  • 128 = WaitForScript — монстр бездействует и ждёт своего вызова от scripted_sequence, scripted_sentence или т. п.
  • 256 = Pre-disaster — режим поведения учёных, охранников и других персонажей перед катастрофой в начале игры, там предложения другие, а если позвать их за собой — откажутся,
  • 512 = Fade Corpse — труп монстра после гибели постепенно исчезает; полезно тогда, когда трупы могут что-либо заблокировать.
  • 2048 = Not in Deathmatch — не появится в многопользовательском режиме Deathmatch.

Но среди монстров есть исключение — monstermaker — он позволяет генерировать монстров из ничего (при его вызове или автоматически, если установлен первый флажок).
Параметры monstermaker'а:

  • Name/targetname (string) — имечко,
  • Childrens' Name/netname (string) — имя дочернего монстра,
  • Target On Release/Target (string) — имя цели, вызываемой после "выброса" монстра (только не вызывайте его непосредственно отсюда с помощью scripted_sequence, он не успеет полностью создасться, и событие пропадёт)
  • Monster Type/monstertype (string) — тип монстра (по образцу monster_*: подставишь monster_cockroach — создашь тараканов, а как заметил Jaturkensirhiv, с помощью monstermaker можно создать rpg_rocket, которая сама полетит),
  • Number of Monsters/monstercount (integer) — количество выпускаемых монстров (-1 = бесконечно),
  • Frequency/delay (integer) — задержка перед выпуском монстра (по умолчанию =5),
  • Max live children/m_imaxlivechildren (integer) — максимум живуших монстров, -1 = бесконечно,
Флаги monstermaker'а:
  • 1 = Start ON — начать работать вместе с запуском карты,
  • 4 = Cyclic — повторять генерацию монстра через время, указанное в поле Frequency,
  • 8 = MonsterClip — выставляет созданным монстрам флаги MonsterClip, чтобы объекты func_monsterclip для монстров были преградой.


4. Info entities (info_*)

Инфо энтити являются точечными и включают в себя различную информацию о координатах места действия. Обычно они служат, как направляющие для различных функциональных энтитей.

info_intermission: точечный объект для многопользовательского режима. Если игрок подох и пройдёт 6 секунд, такие ентити пошлют команду, и камера переместится в место, где находится один из info_intermission с видом на заданный info_target в поле цели Target.

info_landmark: обязателен для перехода с одного уровня на другой. В поле

  • Name/targetname (string) указывается его переходное имя, например в HL между картами c1a0a и c1a0b targetname = c1a0atoc1a0b.

info_node: если кто играл в Контру с ботами, то по-любому он знает, что такое вейпоинты (waypoints) — это ключевые точки пути, которые пробегает ИИ песронажа. Так вот — info_node, это почти то же самое. Расставляете эти ентити по вашему халфовскому уровню, и ваши десантники забегают с умом. Вообще info_node помогают ориентироваться, обходить препятствия или проходить лестницы и склоны большинству наземных монстров. Но у нода есть и дополнительные параметры. Если отжать кнопку "SmartEdit" в свойствах энтитя, то откроется текстовое поле, в которое можно добавить (кнопка "add") дополнительные параметры, такие как hinttype и activity:

параметры hinttype и activity у объекта info_node
Параметры:
  • hinttype = 0 — впереди ничего - действует на любых персонажей и монстров (обычно вообще не указывается этот параметр, но у info_node для ниндзь этот 0 проставлен в игре "Half-Life 1" принудительно, впрочем это всё равно, что не поставлен),
                      1 — перед дверью (может чтоб не задумывался, а однозначно открывал дверь, но успешного срабатывания на практике не встречал),
                      2 — перед окном — подтверждают на странице valvesoftware.com. Пример из Opposing Force:
          
          
                      3 — перед кнопкой,
                      4 — перед механизмом для монстра monster_houndeye, который делает в этом месте занятное движение заинтересованности лапой, если ничем не занят (подробнее в видео Houndeye Curiosity на youtube.com),
                      5 — перед краем перепада высот (большого пространства вниз или наоборот идущей вверх стены, а по ней передвигается интересующий нашего персонажа монстр или игрок, в таком случае не помешает выставить Activity = 46),
                      6 — перед источником света,
                      7 — перед источником тепла,
                      8 — перед мигающим светильником для монстра monster_houndeye, который начинает вглядываться в него (подробнее в видео Houndeye Curiosity на youtube.com),
                      9 — перед яркими цветами,
                      10 — перед человеческой кровью для монстров monster_bullchiken (он же bullsquid) и monster_houndeye. Например, на карте C2A4D.bsp есть два таких места как с кровью, так и без. Так что есть ли декаль крови или нет — не важно (можно сказать — условность), там houndeye эпизодически подпрыгивает в любом случае:
    Может потому houndeye так подскакивает при виде человеческой крови, что изначально был задуман как дружественный или нейтральный к игроку монстр;
                      11 — перед инопланетной кровью для монстра monster_houndeye (декалью с жёлтой кровью?),
                      300 — насест на потолке у монстра Stukabat или сокращённо Stuka (требуется дописать код для monster_stukabat),
                      301 — пятно для приземления монстра Stukabat (требуется дописать код для monster_stukabat),
    А эти 4 тысячных значения упомянуты на сайте ValveSoftware, но не встретились в коде SDK игры (может они добавлены в какой-то особенной версии Half-Life?), так что их можно пропустить:
                      1000 — перед механизмом для монстра monster_houndeye, который воспроизводит в этом месте занятное движение заинтересованности, если ничем не занят — утверждают на странице valvesoftware.com, но на самом деле в версии HL 1.1.1.0 для этого ещё пока используется значение 4, а не 1000,
                      1001 — перед мигающим светом для монстра monster_houndeye, который воспроизводит в этом месте занятное движение, если ничем не занят — утверждают на valvesoftware.com, но на самом деле в версии HL 1.1.1.0 для этого ещё пока используется значение 8, а не 1001,
                      1002 — перед кровью — подтверждают на странице valvesoftware.com (и предлагают дописать код),
                      1003 — перед инопланетной кровью — подтверждают на valvesoftware.com (и предлагают дописать код).


  • Activity = 0 — сброс любой активности (и переключение в состояние 1),
                  1 — холостое поведение (обычный режим персонажа или монстра),
                  35 — жевать (движение повторяется),
                  45 — осматривать горизонтальную поверхность (внимание на тех, кто ходит по полу),
                  46 — осматривать стену (внимание на тех, кто находится выше на стенах или ниже в яме).
                  59 — для некоторых случаев, вызывающих возбуждение. Например, когда монстр видит кое-что вкусное (bullsquid заметил хедкраба) или что-то такое ещё (учёный или monster_prof_suit встречается с врагом).

    Этого для начала достаточно. Есть и много других значений параметра Activity, которые можно посмотреть в файле activity.h из кода SDK игры, например, из начальных:
                  2 — охранять,
                  3 — идти,
                  4 — бежать,
                  5 — лететь (например, режим полёта у солдат, которые висят на тросе, правда не понятно, как это можно использовать у наземного info_node),
                  6 — плыть,
                  7 — подпрыгнуть вверх (для monster_human_assasin, monster_bullchiken или monster_houndeye)
    и прочие варианты активности.

info_node_air — такие же ориентиры для воздушных монстров monster_alien_controller, менее активно их используют monster_flyer_flock, логика подсказывает, что должно быть и monster_nihilanth, но его пока не смотрел.

info_null — цель направленного источника света light_spot.

info_player_start — место, где игрок начинает игру. Нужно на каждой карте мода в однопользовательской игре, даже не смотря на переход с предыдущих карт. Единственное стоит настроить направление игрока, т.е. вторая цифра в параметре

  • Pitch Yaw Roll (Y Z X)/angles (string) — это три угла через пробел: угол наклона вперёд-назад (т.е. дифферент), угол направления (т.е. азимут) и крен.
    По умолчанию =0 0 0, это когда на виде сверху после загрузки смотрим направо, т. е. вдоль оси X.
  • info_player_deathmatch — место, где игрок начинает игру в многопользовательском режиме deathmatch, случайно выбирается из нескольких info_player_deathmatch. Существуют ещё точки info_player_coop для кооперативного прохождения игры против компьютерных монстров, но этот режим в Half-Life недоработан, зато под HL есть хорошие кооперативные моды.

    info_target — основной целеуказатель для таких объектов, как func_train и env_beam. Единственный параметр

    • Name/targetname (string) — его имя.

    info_teleport_destination — место, в которое телепортируется игрок, когда он войдёт в trigger_teleport.


    5. Активные брашевые энтити (func_*)

        Пока напишу, как делается обычная дверь:

    func_door_rotating — поворачивающаяся дверь, которую открывают игрок, монстры или вызов от другого объекта. Если обычная дверь 1 метр в ширину и 2 метра в высоту, то в игре она — 40-42 единицы в ширину и 80-84 в высоту, толщина 1-3 единицы. Зависит от того, считаете ли Вы, что в метре 40 или 42 линейных единицы исходя из роста игрока (42 даже в чём-то реалистичнее). Последнее время в Half-Life практиковалась ширина двери в 48 единиц, и к тому же там встречается много дерей с двойной шириной. Дверь способна проходить сквозь браши и не падает, то есть будет висеть даже без дверных проёмов в пустоте, если её так спроектируешь. К вращающейся двери нужна ось вращения, которая делается с помощью блока, окрашенного со всех сторон текстурой origin. Вид сверху и общий:

    Чтобы быстро найти текстуру, введите в фильтре выбора текстур первые буквы названия orig:
    Ось поворота двери будет проходить через центр этого блока, а затекстуренный origin-ом блок в игре виден не будет. Зажимаешь Ctrl, выделяешь оба блока и потом щёлкаешь в меню Tools->To entity...
    Параметры объекта func_door_rotating:
    • Name/targetname (string) — имя, с помощью которого вызываешь её открывание или закрывание,
    • Global entity name/globalname (string) — чтобы открытое или закрытое положение двери сохранялось на разных картах, впишите общее имя для неё на каждой из карт (подробнее на примере лифта),
    • Pitch Yaw Roll (Y Z X)/angles (string) — три угла через пробел: угол наклона, угол направления в горизонтальной плоскости и крен (по умолчанию =0 0 0),
    • Kill Target/killtarget (string) — имя энтити, которую удалит открытие или закрытие двери (кроме звукового объекта ambient_generic),
    • Speed (integer) — скорость открывания-закрывания (по умолчанию =100),
    • Master — имя блокирующего объекта Multisource (подробнее),
    • Move sound/movesnd (integer) — № звука при движении двери,
    • Stop sound/stopsnd (integer) — № звука при остановке,
    • Damage inflicted when blocked/dmg (integer) — будет наносить заданный урон здоровью, если игрок/монстр будет мешать открытию или закрытию (по умолчанию =0),
    • Target (string) — имя цели, которую вызовет полное открытие или полное закрытие,
    • Delay before close/wait (integer) — сколько секунд дверь открыта, если её не закрыть, если = -1, то она откроется только один раз и больше не закроется. Если при -1 задан и флаг 1 = "Starts open", то наоборот один раз можно закрыть, и больше не откроется. А для многократного срабатывания и фиксации положения двери поставьте здесь любое натуральное значение и установите флаг 32 = Toggle. (по умолчанию wait=4),
    • Health (shoot open) (integer) — если >0, то дверь будет открываться, когда в неё пнёшь/выстрелишь и нанесёшь заданное или более сильное повреждение (по умолчанию =0),
    • Locked sound/locked_sound (integer) — № звука, издаваемого заблокированной дверью в ответ игроку, если А) в Master задано имя блокирующего объекта до тех пор, пока тот объект не включится/активируется, и Б) задано название двери в поле Name/targetname
    • Unlocked sound/unlocked_sound (integer) — № звука разблокировки двери. Такой звук звучит каждый раз (!) при открытии двери после разблокировки её "хозяином", т.е. тем объектом, имя которого прописано в поле master. В сам момент разблокировки он не звучит.
    • Locked sentence/locked_sentence (integer) — фраза от заблокированной двери — аналогично параметру Locked sound,
    • Unlocked sentence/unlocked_sentence (integer) — фраза при разблокировке двери — аналогично параметру Unlocked sound,
    • Distance (deg)/distance (integer) — угловой диапазон поворота двери в градусах (по умолчанию =90),
    • Render FX/renderfx,
    • Render Mode/rendermode,
    • FX Amount (1 - 255)/renderamt,
    • FX Color (R G B)/rendercolor.
    • Light Origin Target/light_origin (string) — устанавливает объект осью в новое местоположение для переосвещения при использовании ZHLT компиляторов. Типичное использование предполагает размещение объекта info_target в подходящее место, а затем задание имени info_target-а в качестве значения light_origin. Если объект непрозрачный, то в дополнение к освещённости, наведённой так, как если бы он там освещался, это вызовет и отбрасывание теней из того же места,
    • Invisible (if not empty)/zhlt_invisible — непустое значение этого параметра сделает дверь невидимой в игре, что означает, что та не будет вносить вклад в скорость прорисовки игры движком (по умолчанию пусто, т.е. прорисуется), и включить отрисовку с помощью env_render не удастся; а столкновения с дверью будут продолжать просчитываться, если не отключены другими флагами,
    • Non solid (if not empty)/zhlt_noclip — непустое значение параметра отключит у двери объёмную структуру столкновений на этапе компиляции карты — равнозначно действию флажка 8 = Passable (по умолчанию пусто, т.е. дверь осязаема).
    Флаги двери:
    • 1 = Starts open — при первой загрузке карты дверь открыта,
    • 2 = Reverse direction — поворот в обратную сторону, обычно используется при включённом флаге One way (тогда для вида сверху — открывается по часовой стрелке),
    • 4 = Don't link — отключает воздействие на дверь как игроков и монстров, так и её вызов из других объектов. Обычно используется:
      • для отладки, чтобы совсем отключить реакцию двери,
      • или чтобы сделать сложную повёрнутую фигуру так, чтобы не перекосились вершины на целочисленной сетке: к примеру, из блоков вы нарисовали автомобиль под углом 0°, который вы хотите установить под углом 20° — тогда создаёте ему ось и делаете дверью, ставите угол поворота distance = 20, флажок открытой двери 1 = Starts open и этот флаг 4 = Don't link.
    • 8 = Passable — сделает дверь проходимой, как func_illusionary,
    • 16 = One-way — открывается только в одну сторону (и закрывается назад в исходное положение), вокруг вертикальной оси по умолчанию против часовой стрелки, если не задан реверс,
    • 32 = Toggle — дверь останавливается в открытом положении до следующего воздействия как переключатель, в отличие от параметра Delay before close=-1, её затем можно закрывать/открывать и в дальнейшем.
    • 64 = X Axis — вращение двери по горизонтальной оси 0X, а не по вертикальной 0Z,
    • 128 = Y Axis — вращение двери по горизонтальной оси 0Y (можно и по оси 0X задать одновременно),
    • 256 = Use only — дверь станет открываться-закрываться только при вызове другими объектами (кнопками, триггерами и т. п.), а игрок или монстр не смогут прямо воздействовать на неё,
    • 512 = Monsters can't — монстры не откроют дверь,
    • 2048 = Not in Deathmatch — не появится в многопользовательском режиме Deathmatch.


    func_illusion — видимый в игре блок, который неосязаем, т.е. проходим насквозь для всех. Параметры:

    • Name/targetname (string) — имя, с помощью которого можно изменить параметры отображения, вызвав из объекта env_render,
    • Contents/skin (integer) — Включает прорисовку объёмного света, который будет имитировать эффект нахождения под водой:
      • -1 — Empty — пусто (по умолчанию),
      • -3 — Water — вода без волн,
      • -4 — Slime — жижа,
      • -5 — Lava — и без перевода ясно, что лава,
      • ? — Fog — туман,
      • -7 — Volumetric Light — объёмный свет, блок похож на воду, т.к. можно начать задыхаться,
      • -16 — make ladder — создаёт лестницу.
    • Render FX/renderfx (integer) — можно задать разные пульсации, мерцания и искажения как на неустойчивой голограмме. Режимы:
      • 0 — Normal — Нормальный,
      • 1 — Slow Pulse — Медленная пульсация,
      • 2 — Fast Pulse — Быстрая пульсация,
      • 3 — Slow Wide Pulse — Протяжённая медленная пульсация,
      • 4 — Fast Wide Pulse — Протяжённая быстрая пульсация,
      • 9 — Slow Strobe — Медленный строб (стробирующий импульс),
      • 10 — Fast Strobe — Быстрый строб,
      • 11 — Faster Strobe — Ускоренный строб,
      • 12 — Slow Flicker — Медленное мерцание,
      • 13 — Fast Flicker — Быстрое мерцание,
      • 5 — Slow Fade Away — Медленное исчезание,
      • 6 — Fast Fade Away — Быстрое (хотя и плавное) исчезание,
      • 7 — Slow Become Solid — Медленное проявление,
      • 8 — Fast Become Solid — Быстрое проявление,
      • 14 — Constant Glow — Постоянное свечение,
      • 15 — Distort — Периодические небольшие искажения,
      • 16 — Hologram (Distort + fade) — Голограмма (с искажениями и затуханиями);
    • Render Mode/rendermode (integer) — режим отображения:
      • 0) Normal — "Нормально" — выглядит без эффектов как обычно,
      • 1) Color — "Цвет" — чтобы окрасить в другой цвет, который задаётся в поле FX Color, правда в этом режиме текстура на брашевых объектах перестаёт просматриваться, все грани блока окрашиваются заданным цветом,
      • 2) Texture — чтобы сделать блок частично прозрачным, степень прозрачности задаётся в поле FX Amount (часто используется для стёкол и т.п.),
      • 3) Glow — свечение, но для брашевых, т.е. блоковых объектов вместо него включится режим Texture (с предупреждением про "Non-sprite set to glow" в режиме разработчика), а у спрайтов это режим свечения объекта, когда яркость не зависит от освещённости вокруг,
      • 4) Solid — чтобы сделать блок прозрачным в областях, где текстура окрашена в 255 (последний) индекс цвета в палитре (так в HL задаётся альфаканал), задайте полю FX Amount = 255, чтобы остальные области текстур на блоке выглядели непрозрачными,
      • 5) Additive — "Аддитивное отображение" — режим сложения цветов: яркость блока + яркость окружения за блоком — напоминает режим Texture, только своеобразно светящийся, т.е. чем ярче точка исходной текстуры, тем ярче её отображение в игре (в этом режиме, например, делают имитацию конусными блоками лучей прожекторов с текстурами fade...),
    • FX Amount (1 - 255)/renderamt (integer) — степень прозрачности в разных режимах поля Render Mode кроме режима Normal,
    • FX Color (R G B)/rendercolor (color255) — цвет для режима Render Mode = Glow или Color (по умолчанию = 0 0 0),
    • Minimum light level/_minlight (string) — минимальная освещенность объекта вне зависимости от внешнего освещения.


    func_monsterclip — невидимый в игре блок непроходим для всех монстров, которым выставлен флажок "MonsterClip".

    ОЖИДАЕТСЯ ПРОДОЛЖЕНИЕ

    Дополнено ObaGlaza с 2012 по декабрь 2021 гг.





    <<В раздел "Статьи"

    Half-life Red Alert Expantion
    Presented by Dzugaru & RoofMan
    All rights reserved
      Counter.CO.KZ -     !
    Hosted by uCoz