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 ;)".
|