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

Статьи

Недокументированные особенности игры Half-Life

Dzug@ru     2003 г. (с небольшими дополнениями от 2012-2018)

Мало кто знает, что движок Халвы, построенный на базе Квейка 2 при переработке получил ряд недокументированных возможностей.
Поскольку компьютеры в 1998 году в плане графических изысков не представляли из себя ничего приличного, все эти "секретные навороты" были пущены под стол. В результате мы до сих пор играем в Халфу без динамических теней (а ведь были на изображениях из демы Half-Life), объёмного освещения, тумана, дождя, других погодных эффектов и внутреннеигровой физики уровня 3 Дума (обработка кинетики некоторых персонажей начата в недокументированных объектах monster_cine_barney, monster_cine3_barney, monster_cine_panther, monster_cine_scientist, monster_cine2_scientist, monster_cine3_scientist, monster_cine2_hvyweapons, monster_cine2_slave). Несколько иллюстраций из альфы и беты Half-Life:

объёмное освещение в бете Half-Life 1 солдаты с тенями из бетаверсии Half-Life 1 булсквиды с тенями из бета-версии Half-Life
Работает техника Теневых объёмов или техника "Shadow volume"
тени в игре Half-life 1 beta ксеновская пантера в бете Half-life тень от вентилятора в бете Half-life тени на flyer_flock в бете Half-life 1

Тени

Проще всего с тенями.
Прежде всего с помощью редактора PaKScape открываем из архива \Half-Life\valve\pak0.pak файл HL.cfg и добавляем строчку DynamicLight_Enabled 1. Сохраняем .cfg в папку \Half-Life\valve\.
Открываем файл HL.fgd — тот, что использует ваш Hammer (свежие редакторы здесь), и добавляем в самый конец стро́ки типа

@PointClass base(Targetname, RenderFxChoices, Angles) size(-16 -16 -16, 16 16 16) = dynamic_light : "Dynamic Light Effect"
[
LightName(target_source) : "Name of Light"
framestart(integer) : "Starting Frame" : 0
spawnflags(flags) =
[
1 : "Start On" : 0
32: "Toggle" : 0
]
]

Теперь запускаем редактор, добавляем тот самый dynamic_light. Теперь самое простое — поле Lightname — имя источника света, который и будет отбрасывать динамические тени. Для начала можно установить флаг "Start On". Приготовьтесь, техника эта не оптимизирована и может серьёзно тормозить.

Дополнение от Buzer и ObaGlaza: сам динамический свет можно сделать проще — белый динамический свет включается при задании недокументированного параметра effects = 4 или effects = 8 в точечной или брашевой энтите. Например, он будет двигаться вместе с центром координат движущегося невидимого func_train с параметром effects = 4. Вот испытания движущегося динамического освещения на карте Presidium.bsp нашего мода H-L Red Alert — эффект программно не изменён, он такой же, как и в обычном Half-Life:
effects = 4

Видно, что возникает сразу несколько светильников вокруг брашевого короба, в котором катается невидимый func_train. Должно быть светильников 6-7 или 14-15, и они расположены крестообразно вокруг центра брашевого поезда. И действительно движок теперь стал слегка подтормаживать, пока находишся рядом. В самом Half-Life Вы тоже наверняка вспомните карту с запуском ракеты, когда вокруг обдавало ярким белым светом. На иллюстрации испытания можно отметить ещё пару вещей, что всё-таки не заметно теней, и что эти светильники освещают окружение ромбовидно. И наконец, пусть не смущает, что в верхнем левом углу движок оранжевым пишет предупреждения — это относится не к световому эффекту, а к сценариям у персонажей за кадром. Не хотелось переделывать сцену ещё раз или вырезать тот текст вручную.
Освещение со спрайтом пламени из ракеты effects = 64


Объёмное освещение
Начало то же самое. Пишем в ваш файл .fgd:

@PointClass base(Targetname, RenderFxChoices, Angles) size(-16 -16 -16, 16 16 16) = volume_light : "Volume Light Effect"
[
LightName(target_source) : "Name of Light"
TargetName(target_name) : "Name of Target"
conesize(integer) : "Size of cone" : 30
Fx_amount(integer) : "Opaque" : 255
Render_mode(fRender_mode) : "Render Mode"
spawnflags(flags) =
[
1 : "Start On" : 0
32 : "Not Solid" : 0
64: "Toggle" : 0
]
]

Использование не намного сложнее. Lightname — источник света. В данном случае можно использовать info_target.
Targetname — точка, куда будет проецироваться объёмный луч света.
Conesize — угол расхождения лучей.


Туман

Первым делом, создайте в редакторе Wally или TSynth красивую чёрно-белую мутную текстуру, имитирующую клубистую поверхность тумана. Главное условие — её имя должно начинаться с "~" или "-". Создаём Solid — блок func_illusionary и затекстуриваем его этой текстурой. В поле content устанавливаем вместо solid значение fog (?). Объёмный туман готов. Но это ещё не всё. Нужно настроить параметры тумана на карте. Для этого используются map_environment и game_environment. Вас должны интересовать следующие поля:

  • falloff (затухание),
  • Fx_color (цвет тумана),
  • Fx_amount (прозрачность тумана),
  • fog_density (его плотность)


Физика

Пожалуй, единственный момент, когда применялся динамический просчёт столкновений — это в игре Blue shift — момент с двумя катящимися катушками с кабелем на платформе:

катушки в игре Blue Shift

Реализовать подобную физику достаточно сложно, но всё-таки можно. Перво-наперво расставьте на карте достаточно info_target — лучше в углах сетки и присвойте им какое-нибудь одинаковое имя. Затем расставьте на полу ровной плоскостью 10-12 info_node с теми же именами. Теперь поставьте какую-нибудь полку и на ней коробки (сделайте их энтитями func_pushable), в поле target которых следует указать имя узлов. Следующий шаг — FGD файл, куда следует дописать уже

@PointClass base(Targetname, RenderFxChoices, Angles) size(-16 -16 -16, 16 16 16) = dynamic : "Dynamic physic controller"
[
spawnflags(flags) =
[
1 : "Enabled" : 0
]
]

Добавляем на карту этот самый dynamic и устанавливаем флажок.
Теперь, запустив игру, вы сможете увидеть, как коробки от удара взлетают и смешно отскакивают друг от друга и от пола. Скринка прилагается.


Осадки

Самое простое. Ставим env_beam и 2 info_target — сверху (с неба) и снизу (на уровне земли). Указываем их как обычный луч, но в поле "sprite name" пишем либо env_clRain или env_clSnow или env_clCloud (то же, что и туман, но по всей карте). Полный список можно взять на http://www.Valve_ERC.com
[между прочим, более красивый вариант можно сделать с помощью HL SDK из статьи "Программирование дождя и снега" — прим. ОбаГлаза].

Линзовые эффекты>

Нет, тут речь пойдёт не о преломлении, а о бликах на стекле, как это бывает на линзах объектива видеокамеры. В старом PhotoShop'е многие на свои картинки не раз накладывали подобный эффект.

Статья ещё не закончена (to be continued)



Комментировать статью:

Александр Пасяда
· 22 марта 2014
Я интересовался недокументированными возможностями Half-Life 1. В статье пишут, будто бы в архиве \valve\pak0.pak был файл HL.cfg, но в Half-Life версии 1.1.1.0 уже такого нет. Пожалуйста, если у кого есть бета или ранняя версия 1.0.0.0, проверьте наличие HL.cfg и напишите, что там за текст!

Максим Краско
· 22 марта 2014
Beam должен был идти от тестовой камеры, а потом туман после провала эксперимента.

Макс Рокосовский
· 23 марта 2014
1. Были Stencil Shadows - Расплющенные тени от моделек.
2. Динамичные свет, как от фонарика (SP/MP) в параметрах FGD: effects = 4 или effects = 8. Так от них начинаются двигаться тени.
3. Туман был в HL, но реализован не конца на OpenGL режиме.
4. Физика в HL1, не было все это маппинг.
5. Линзовые эффекты были в бетках, только полностью реализованы в Decay.

Владимир Сирик
· 23 марта 2014
Линзовые эффекты ?
Мыло 90ых ?
Хотелось бы скриншот и из беты и с Декея)





Как вам наша демка?

Результаты Архив

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