monster_scientist — дружественный учёный или врач
на карте Half-Life и его модов
Обновлено 27.07.2011
monster_scientist — всем известный персонаж, можно почти ничего не писать, тем не менее на всякий случай:
А) Это учёный, которого игрок может позвать за собой, подойдя и нажав кнопку Использовать, и тот пошагает или побежит вслед,
пока не заметит появления враждебных монстров или слишком большой перепад высот, т.к. не прыгает и не лазит
по вертикальным лестницам func_ladder. Готовность ходить за игроком отключается 256 флажком.
Б) Если его неоднократно ранить, то он зачислит игрока во враги и перестанет за ним идти.
В) Оказываясь с игроком один на один, он поворачивается к нему лицом. Более того, он может немного подлечить пострадавшего игрока.
Г) Он поддерживает неспешный малосущественный разговор в компании таких же как он учёных и охранников.
Имеются в виду те персонажи, которые входят в группу монстров, говорящих самостоятельно (см. код в talkmonster.cpp).
При игроке он тоже иногда высказывается (это отключается 2 флажком).
Движения управляются с помощью scripted_sequence, как у большинства монстров.
И как и у большинства человекоподобных монстров речь задаётся вызовом
scripted_sentence, причём рот учёного будет открываться в зависимости от
амплитудной огибающей проигрываемого звука.
Реакция на повреждения: начинает паниковать, крича и хаотично бегая.
При гибели его заменяет объект monster_scientist_dead c 8 ед. здоровья, который тоже может быть разбит.
Параметры:
- Name/Имя/targetname (string) — имя монстра для обращения к нему других объектов,
- Body/Подмодель головы (integer) — номер подмодели,
- -1 = Random/Случайная — случайно выбирается из существующих, ставится по умолчанию,
- 0 = Glasses/В очках — пожилая голова в очках,
- 1 = Einstein/Эйнштейноподобная — голова, похожая на Энштейна,
- 2 = Luther/Лютероподобная — голова негра с поседевшими висками,
- 3 = Slick/Прилизанная — голова нестарого учёного с прилизанной причёской.
- Scale/Масштаб (string) — масштаб модели (по умолчанию =1) добавлено только в
HLRA и SoHL,
- Target (string) — ?,
- Render FX/renderfx — параметр отображения,
- 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 — при встрече с игроком вне боя,
- Use Sentence/UseSentence (string) — эту фразу он произнесёт при попытке
позвать его за собой. Названия фраз с названиями звуковых файлов связаны в файле \sound\sentences.txt.
Этот файл в оригинальной Half-Life находится внутри архива pak0.pak.
Пример: на тренировочной карте t0a0d.bsp у учёного, которого ведёшь за собой, задано
UseSentence = SC_HAZ_OK,
- Un-Use Sentence/UnUseSentence (string) — это он сказанёт, когда игрок
откажется вести персонажа за собой (сказанное про названия фраз в предыдущем параметре здесь тоже справедливо).
В отличие от задания параметра в объекте scripted_sentence значение тут вписывается без приставки из
восклицательного знака.
Пример: карте t0a0d.bsp у учёного задано UnUseSentence = SC_HAZ_WAIT.
Основные флаги:
- 1 = WaitTillSeen — ИИ не работает,
пока монстр не попадёт в область видимости игроком (причём видимости движком игры, а не прямой видимости),
- 2 = Gag — чтобы учёный говорил только тогда, когда к нему обращается игрок,
- 4 = MonsterClip — блоки func_monsterclip станут непроходимы,
- 16 = Prisoner — на учёного не обращают внимания ни враги, ни он сам ни на кого,
- 128 = WaitForScript — учёный бездействует и ждёт своего вызова от
scripted_sequence или т. п.,
- 256 = Pre-disaster — включает поведение персонажа до телепортационной катастрофы
— он приветствует игрока и произносит некоторые речи, которые не встречаются в остальной игре,
а также отказывается следовать за игроком,
- 512 = Fade Corpse — модель плавно исчезает после гибели.
Основной код в файле scientist.cpp
Модель \models\scientist.mdl, в первоначальном Half-Life также были дополнительные scientist01.mdl — scientist07.mdl
и scientistt.mdl, но потом их стали объединять в одну, т.к. мощности компьютеров возросли и дробить ресурсы стало не обязательно.
Здоровье = 25 ед., а в HLRA задаётся в текстовом файле \Ralert\skill.cfg
Габариты = 32x32x72.
Текст для файла fgd:
@PointClass base(Monster, TalkMonster) size(-16 -16 0, 16 16 72) studio("models/scientist.mdl") = monster_scientist : "Scared Scientist"
[
body(Choices) : "Body" : -1 =
[
-1 : "Random"
0 : "Glasses"
1 : "Einstein"
2 : "Luther"
3 : "Slick"
]
]
А для русифицированного fgd monster_scientist будет таким (в кодировке Win-1251):
@PointClass base(Monster, TalkMonster) size(-16 -16 0, 16 16 72) studio("models/scientist.mdl") = monster_scientist : "Учёный"
[
body(Choices) : "Подмодель головы" : -1 =
[
-1 : "Случайная"
0 : "В очках"
1 : "Энштейноподобная"
2 : "Лютероподобная"
3 : "Прилизанная"
]
]
Если вы используете мод Spirit of Half-Life, то получаете в своё распоряжение дополнительные
настройки параметров — величину здоровья,
возможность сменить цвет крови при ранении и модели кусков мяса при гибели от взрыва, задания габаритов, смены фракции и т.п.
|