Учебник по созданию карт
Глава XVI. Камеры.

§ 16.3 Разбиваемые камеры

Из данной статьи Вы узнаете как можно создать разбиваемую камеру, которая становится неработоспособной после ее уничтожения игроком. Для реализации данной идеи нам понадобятся следующие энтити-объекты:

Статья довольно сложная, по крайней мере, новичку будет непросто. Поверьте написать ее было тоже не так-то просто :) Если мы Вас еще не испугали, то можем начинать. Сейчас мы изготовим довольно эффектную фичу.

Главное, что Вы должны понять после прочтения статьи, что объекты в Half-Life не являются какими-то определенными предметами, например, объект func_door необязательно должен быть именно дверью. Необходимо понять, что объекты просто имеют определенные свойства, которые мы можем использовать для достижения различных целей.


Что будем делать:

Создадим где-нибудь на карте монитор (это будет объект func_button, т.е. обычная кнопка), нажав на который, игрок увидит изображение с камеры (объекта trigger_camera).

Так как сама камера (trigger_camera) является точечным объектом, то в игре она будет невидимой. Нам же необходимо сделать разбиваемую камеру, т.е. видимый объект, поэтому рядом с настоящей, но невидимой камерой мы создадим объект func_breakable, который будет, так сказать, олицетворять нашу камеру (материализировать).

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

Когда игрок разобъет видимую камеру (func_breakable), необходимо прекратить работу невидимой камеры (trigger_camera). Мы это сделаем переводом цели кнопки-монитора с камеры trigger_camera на какой-нибудь другой объект. Больше при нажатии на монитор изображение выводиться не будет, т.к. монитор уже не активирует камеру. Данную функцию можно реализовать при помощи точечного энтити-объекта trigger_changetarget, который может поменять парматр любому объекту.

Ну, и последнее. Необходимо, чтобы в начале каждого раунда функции кнопки-монитора восстанавливались, т.е. кнопка опять была бы <направлена> на объект trigger_camera и активировала бы его. Это опять же реализуется при помощи объекта trigger_changetarget, только теперь мы вернем монитору изначальное значение параметра .


Схема работы разбиваемой камеры

Чтобы Вам было немного полегче все это понять, мы составили схему работы разбиваемой камеры (см. рис. ниже). В схему входят 7 энтити-объектов. Сейчас мы попытаемся еще раз повторить сказанное выше, но уже с использованием схемы.

Итак, главным на этой схеме является игрок. Его мы изобразили оранжевым кругом.

Схема работы разбиваемой камеры из 7 энтити-объектов


Рассмотрим среднюю линию схемы, состоящую из 3-х энтити-объектов (func_button, trigger_camera, info_target).
  • Игрок подходит к стене и нажимает на кнопку-монитор (func_button);
  • Кнопка-монитор активирует камеру (trigger_camera);
  • Камера показывает игроку какой-то участок карты. <Взгляд> камеры направлен в сторону объекта info_target
Теперь рассмотрим верхнюю линию схемы с двумя объектами (func_breakable и trigger_changetarget).

  • Игрок разбивает предмет, изображающий камеру, т.е. func_breakable;
  • Func_breakable активирует объект trigger_changetarget, который <переводит> кнопку-монитор с trigger_camera на func_door (синяя стрелка уходит вниз-вправо)
Т.к. кнопка больше не активирует камеру, то игрок, нажимая на нее, ничего не видит (камера разбита). Теперь при нажатии на кнопку будет открываться невидимая дверь, но это нам и нужно и совершенно никак не мешает.

Нижняя линия схемы (объекты func_door и trigger_changetarget).

Как мы уже говорили, из статьи Вы должны понять, что объекты можно использовать не по назначению. В данном случае мы используем дверь не по своему прямому назначению. Наша дверь не будет стоять в каком-то проеме, мало того она будет полностью прозрачной, через нее можно будет проходить (двери как бы и нет), и она будет выполнять функцию триггера (активировать объект).

В свойствах двери мы выставим следующий параметр delay before close: -1, таким образом дверь будет открываться один раз за раунд. Дальше мы воспользуемся тем, что любая открытая дверь в начале следующего раунда автоматически закрывается.

При закрытии (т.е. в самом начале каждого раунда) дверь будет активировать еще один (второй) объект trigger_changetarget, который обратно <переведет> кнопку-монитор на камеру (trigger_camera), и игрок вновь, если захочет, сможет увидеть изображение с камеры.

/*   Если до сих пор Вам все понятно - наши поздравления! Вы сделали очень большой шаг на пути к профессиональному мапперству! Понять все это сразу сможет не любой новичек. Но зато когда он поймет, то почувствует, как у него развязываюся руки и он может крутить-вертеть свойствами объектов как хочет, добиваясь требуемой цели.   */


Дальше мы приводим свойства всех используемых объектов.

1. Кнопка-монитор, висящая на стене. При активации ее игроком, она активирует камеру trigger_camera.

Кнопка-монитор, активирующая камеру trigger_camera


Name: monitor_button
Targetted object: camera1 (изначально кнопка активирует камеру)
Delay before reset: 0 (кнопку можно нажимать как угодно часто, без задержек)
Delay before trigger: 0 (кнопка активирует камеру мгновенно, без задержки)

Флаги:

Don't move: кнопка-монитор не вдавливается в стену при нажатии (так удобнее и реалистичнее)


2. Камера (trigger_camera). Камера направлена на объект info_target и передает изображение игроку.

Камера (trigger_camera) и материализующий ее в игре объект func_breakable


Name: camera1
Target: target1
Hold time: 10 (время, в течении которого камера передает изображение)


3. Визуальная часть камеры (объект func_breakable). Разбивая func_breakable (см. рис. выше), мы переключаем кнопку-монитор с камеры на скрытую дверь, выполняющую функцию триггера.

Target on break: change_door (имя первого объекта trigger_changetarget)
Strength: 75 (прочность камеры, порядка 3 выстрелов из винтовки)
Material type: metal (тип материала, в данном случае металл)


4. Мишень для камеры (объект info_target). В сторону этого объекта будет направлен <взгляд> камеры.

Name: target1

В сторону этого объекта будет направлен "взгляд" камеры



5. Объекты, управляющие кнопкой-монитором (trigger_changetarget). Эти объекты <перенаправляют> кнопку-монитор с камеры на скрытую дверь (когда игрок разбивает камеру) и наоборот с двери на камеру в начале каждого раунда.

Секретная невидимая в игре дверь (func_door) и два объекта trigger_changetarget, управляющие параметром Target кнопки-монитора


5.1 Первый trigger_changetarget. Переводит кнопку с камеры на дверь.

Name: change_door
Target: monitor_button (здесь мы указываем имя кнопки-монитора, т.к. именно ей мы меняем параметр Target)
New target: secret_door (сюда вписываем название новой цели для кнопки-монитора)

5.2 Второй trigger_changetarget. Переводит кнопку с двери обратно на камеру в начале каждого раунда.

Name: change_camera
Target: monitor_button (здесь мы указываем имя кнопки-монитора, т.к. именно ей мы меняем параметр Target)
New target: camera1 (сюда вписываем название изначальной цели для кнопки-монитора)


6. Секретная дверь (func_door). Невидимая дверь является у нас объектом, на который переводится действие кнопки-монитора, после разрушения камеры, а также дверь при своем закрытии в начале каждого раунда, активирует второй trigger_changetarget.

Размеры, раположение и текстура для закрашивания не важны! Дверь в данном случае не является собственно дверью.

Name: secret_door
Render mode: texture (этот режим совместно со следующим fx amount: 0 делает дверь абсолютно прозрачной)
FX Amount: 0 (этот режим совместно с предыдущим делает дверь абсолютно прозрачной независимо от текстуры на двери)
Delay before close: -1 (необходимо, чтобы дверь не закрывалась до начала следующего раунда, когда она автоматически закроется и активирует второй trigger_changetarget)
Fire on Close: change_camera (данный объект trigger_changetarget будет активирован при закрытии двери, в нашем случае в начале каждого раунда)

Флаги:

Passable: необходимо отметить, чтобы игроки не сталкивались с прозрачной дверью.

  --

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

Ну, и прежде, чем Вы перейдете к изучению дальнейшего материала, хочется сказать еще несколько слов.

Подобная камера была реализована на карте DE_ASCHE. Тогда было использовано 10 объектов. Отличие заключалось в том, что дверь не использовалась, как триггер. Вместо этого было два объекта trigger_multiple, размещенных на базах обеих команд. Задачей этих триггеров была активация, кстати посредством еще одной (второй уже) скрытой двери, объекта trigger_changetarget.

Как видите, та же самая идея сегодня реализована уже без trigger_multiple с помощью уже всего 7 объектов вместо десяти. Не исключено, что есть и еще более простое решение, надо лишь немного подумать, вспомнить какие еще есть объекты и попробовать использовать их свойства более эффективно. Здесь, как и в программировании, есть множество вариантов решения одной и той же задачи.


Ссылки

breakable_camera.zip [40Кб] — в архиве карта-пример в форматах BSP и RMF.


Глава XVI. Камеры.


К оглавлению Учебника

© http://cs-mapper.by.ru/
CMT (CS Mapping Tutorials) - © 2006-2011+. Created by VM
[ Script Execution time: 0.0076 ]