Меню сайта




[DS]: Half-Life Server
[DS]: Half-Life Server


[DS]: CS:S GunGame v34 Server
[DS]: CS:S GunGame v34 Server


[DS]: CS:S v34 Server
[DS]: CS:S v34 Server


Поиск

add_newДобавить новость
Последние добавленные
Название игры: S.I.P: Out Life
Жанр: FPS, с элементами RPG
Язык: с++, скрипты lua
G API: DirectX 9
Сайт: sip-game.su
Группа Vk: vk....
Читать далее

<JAM>
m1-palinka


HL-HEV
hl-hev

DS-Servers
Статьи
Туториалы
Маппинг
Goldsrc
Создание карт
Камеры

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



Разбиваемые камеры
Добавил: root
2013-01-07 14:28:41
24 просмотра

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

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

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


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

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

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

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

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

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


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

Чтобы Вам было немного полегче все это понять, мы составили схему работы разбиваемой камеры (см. рис. ниже). В схему входят 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.

§ 16.1 Обычные камеры
§ 16.2 Двигающиеся камеры
§ 16.3 Разбиваемые камеры

Поделиться:
Тэги:

DS-Servers.com
Copyright © 2012-2016. All Rights Reserved.
При копировании материала ссылка на источник обязательна
За материалы, размещенные пользователями, администрация сайта ответственности НЕ несет