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

monster_generic — монстр с задаваемой моделью персонажа на карте Half-Life и его модов

Обновлено 17.07.2011

monster_generic предусмотрен для вставки наземного персонажа с моделью, которая задаётся пользователем. Объект monster_generic нужен как раз тогда, когда вы сделали или достали для вашего сюжета модель человека (или кого-то человекоподобного) в формате .mdl и хотите, чтобы этот персонаж мог что-нибудь произносить посредством scripted_sentence и мог куда-то шагать или бежать с помощью scripted_sequence.

Ставите на карту monster_generic и вписываете в поле model файл модели и путь к нему. Это дружественный игроку монстр, которого атакуют как военные, так и ксеновские монстры. Он будет непроходим насквозь, как нормальный монстр, и имеет такие же габариты, как у игрока и других людей.

Просчёт столкновений: параллелепипед столкновений имеет размеры по 32 единицы в ширину и толщину и 72 единицы в высоту. Поэтому если поставить какую-нибудь гигантскую модель значительно больше человека, то лучше держать игрока подальше от столкновений с небольшим невидимым параллелепипедом габаритов этого объекта (как это сделано с шагающим роботом-погрузчиком на начальных картах в Half-Life 1), а то возникнет недоразумение; но это можно исправить в Spirit of Half-Life настройкой параметра Size (X Y Z). И просчёт столкновений можно отключить флажком, причём капли крови тоже перестанут появляться при повреждениях.

Реакция на повреждения: при стрельбе по одному из параллелепипедов попаданий у модели (hitbox-ов, которые создаются при компиляции файла модели и не зависят от программного кода) объект monster_generic теряет часть здоровья и
в Half-Life в Half-Life Red Alert Exp.
разбрасывается каплями красной крови. Правда кровь появляется при попадании в нижнюю половину тела. После чего персонаж начинает агонизировать, идя на месте, а спустя пол минуты погибает. При этом если установлен флажок 512 = Fade Corpse, то изображение модели исчезнет вместе с параллелепипедом габаритов, а без флажка параллелепипед габаритов исчезнет, а модель просто застынет на месте. Объект monster_generic нетрудно убить ещё и потому, что здоровья у него мало — 8 единиц. поворачивается к источнику повреждений, а затем станет преследовать и вхолостую атаковать ближайшего враждебного игроку противника, не зависимо от того, кто его подбил — враги или сам игрок, если в заданной нами модели прописаны соответствующие движения атаки с активностью ACT_RANGE_ATTACK1. Причём атаковать станет не только явно враждебных монстров, но и нейтральных пришельцев вроде monster_bloater, если тот окажется рядом.
monster_generic не оставляет следов крови. У нас в моде здоровье на 3 порядка больше, чтобы случайно не убили — 8000 единиц.
Задать масштаб модели можно параметром scale, что отмасштабирует сразу и размер hitbox-ов, но не изменяет размер параллелепипеда столкновений.
monster_generic с моделями большего, чем человек, размера с верно смоделированной геометрией hitbox-ов адекватно воспринимает попадания пуль, лучей и ударной волны, но очевидно, что физически объекты с моделями (гранаты, ракеты, взрывчатка и т.п.) будут взаимодействовать только с параллелепипедом столкновений. Расположение хитбоксов можно проверить консольной командой r_drawentities 4 и вернуть назад, набрав r_drawentities 1. Совсем отключить просчёт повреждений можно, если выставить флажок 4 = Not solid. А используя Spirit of Half-Life, можно задать количество здоровья в параметре Initial Health.

Этот монстр периодически проигрывает движения, помеченные в модели активностью типа ACT_IDLE (см. консольную команду impulse 103 и документацию к qc файлам моделей), т.е. движения, которые выполняют монстры стоя в ожидании — переминаются с ноги на ногу, отряхиваются и т.п.

Ещё нужно добавить про вызов объектом scripted_sequence, что у модели для monster_generic во время проигрывания любого движения и передвижения используется алгоритм, сглаживающий изображения в промежутках между кадрами. А у объекта monster_furniture при вызове scripted_sequence изображение модели прыгает по кадрам, и прорисовка движения выглядит рвано.

Параметры:
  • Name/Имя/targetname (string) — имя монстра для обращения к нему других объектов,
  • Model/Модель (string) — файл модели с путём к нему из папки мода, например models/holo.mdl,
  • Body/Подмодель № (integer) — номер подмодели (bodygroup) по умолчанию =0,
  • Scale/Масштаб (string) — масштаб модели (по умолчанию =1) добавлено только в HLRA и SoHL,
  • Target (string) — ?,
  • Render FX/renderfx — параметр отображения, которым можно задать разные пульсации, мерцания и искажения. Режимы:
    • 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 — параметр отображения,
  • FX Amount (1 - 255)/renderamt — параметр отображения,
  • FX Color (R G B)/rendercolor — параметр отображения,
  • Pitch Yaw Roll (Y Z X)/angles (string) — углы наклона вперёд-назад, поворота и крена в градусах (по умолчанию =0 0 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 — при встрече с игроком вне боя,
Основные флаги:
  • 1 = WaitTillSeen — ИИ не работает, пока монстр не попадет в зону видимости игроком (причём видимости движком игры, а не прямой видимости),
  • 2 = Gag — флажок бесполезен (обычно для того, чтобы монстр говорил только когда к нему обращается игрок),
  • 4 = Not solid — будет проходим для игрока (например, если делаете голограмму), а также отключает кровь при его повреждении,
  • 16 = Prisoner — на монстра не обращают внимания ни враги, ни он сам ни на кого,
  • 128 = WaitForScript — монстр бездействует и ждёт своего вызова от scripted_sequence или т. п.,
  • 256 = Pre-disaster — малосущественен, это поведение персонажа до телепортационной катастрофы (поведение учёных и охранников перед катастрофой отличается от поведения в остальной игре),
  • 512 = Fade Corpse — модель резко пропадает после гибели. Правда движения падения не проиграются, и модель застынет перед исчезновением,
  • 2048 = Недокументированный флаг. Замечен на тренировочных картах H-L у голографической помощницы. Не проверялось, но вероятно он удаляет данный объект из режима Deathmatch.

Основной код в файле genericmonster.cpp
Как уже было написано, габариты = 32x32x72

Текст для файла fgd:

@PointClass base(Monster, RenderFields, Sequence) size(-16 -16 -36, 16 16 36) studio() = monster_generic : "Generic Script Monster"
[
        model(studio) : "model"
        body(Integer) : "Body" : 0
        spawnflags(Flags) =
        [
                4 : "Not solid" : 0
        ]
]


А для русифицированного fgd monster_generic будет таким (в кодировке Win-1251):

@PointClass base(Monster, RenderFields, Sequence) size(-16 -16 -36, 16 16 36) studio() = monster_generic : "Настраиваемый сюжетный монстр"
[
        model(studio) : "Модель"
        body(Integer) : "Подмодель №" : 0
        spawnflags(Flags) =
        [
                4 : "Проходимый" : 0
        ]
]

Если вы используете мод Spirit of Half-Life, то получаете в своё распоряжение дополнительные настройки параметров типа величины здоровья, смены цвета крови при ранении, моделей кусков мяса при гибели от взрыва, задания габаритов и др.

24 сентября 2004 Martin опубликовал на странице про monster_generic сайта http://collective.valve-erc.com важный совет для моделей, в которых есть события с вызовом звуков:

Я написал об этом не так давно на форумах, и тут пригодилось бы тоже:
Хай! Не уверен, подходящее ли здесь место для моего замечания, но мне с трудом удалось разобраться, так что думаю, я бы поделился этим с остальными.

Меня замучило то, что каждый раз, когда я задействовал шагающего робота-погрузчика на своей карте (со стандартной моделью loader.mdl — наше прим.), не воспроизводилось ни одного звука, а в консоли начинали бежать сообщения вроде ошибок sv_startsound.

Я понимал, что так как робот-погрузчик не имел отдельно созданного объекта monster_, то у него не было программного кода, в котором бы автоматически загружались в память все необходимые ресурсы. История была долгой, а короче на карту я добавил пару ambient_generic — один со звуковым файлом "ambience/loader_hydra1.wav", а другой с "ambience/loader_step1.wav" — так быстро!

Поскольку движок игры должен был загрузить звуки вместе с картой (даже не смотря на то, что звуки никогда не проигрывались из ambient_generic-ов, они уже были в памяти игрового движка), и робот-погрузчик смог вызвать их в нужные моменты, заданные в кадрах его передвижения.

Речь идёт о событиях, которые прописываются в файле сценария для компиляции модели .qc в строках, задающих анимацию типа { event XXXX №кадра "путь к звуковому WAV-файлу" }, где XXXX — код события. Например, для создания модели вортигона aslave.mdl в файле aslave.qc есть движение "jibber":

$sequence "jibber" "jibber" fps 30 loop { event 1008 19 "aslave/slv_word5.wav" } { event 1008 52 "aslave/slv_word7.wav" }

Здесь на 19-м кадре вызывается воспроизведение звука "aslave/slv_word5.wav", а на 52-м будет звучать фраза пришельца из файла "aslave/slv_word7.wav", т.е. находящаяся в подкаталоге /Sound/aslave/ папки вашего мода.
Хотя обычно потребность добавить звук возникает при озвучке, сопровождающей передвижение монстра, стрельбу или какое-то другое воздействие. Вот 4 события в одном движении на примере того самого робота-погрузчика в просмотрщике моделей Jed's Half-Life Model Viewer:

И на последок пример имитации 4 нажатий кнопок подряд из модели охранников:
$sequence "intropush" "intropush" fps 16 {
  { event 1004 15 "*buttons/blip1.wav" }
  { event 1004 24 "*buttons/blip1.wav" }
  { event 1004 34 "*buttons/blip1.wav" }
  { event 1004 44 "*buttons/blip1.wav" }
 }
Подробнее о параметрах в файлах .qc сценариев компиляции можно найти в статье "СИСТЕМНОЕ ПРОГРАММИРОВАНИЕ НА QC ;)".


Half-life Red Alert Expantion
Presented by HLRA team
  Counter.CO.KZ -     !
Hosted by uCoz