Давайте поглядим на всем известную и всеми любимую курицу на Cs_Italy :-)
Примечание: мы рассмотрим «устройство» курицы как есть, то есть так, как она сделана на Cs_Italy. Этот метод имеет некоторые недостатки, о которых мы расскажем в конце материала.
1. Создание курицы (как на Cs_Italy)
Курица на Cs_Italy — это модель (файл *.mdl). Модели в уровень вставляются с помощью энтити-объекта cycler. Раньше, когда не было этого энтити-объекта, модели вставлялись через энтити-объект cycler_sprite,
который вобщем-то предназначен для вставки спрайтов. Мы решили
создавать курицу «как есть», поэтому воспользуемся энтити-объектом cycler_sprite.
Трудность с курицей заключается в её убийстве :-) При отправлении
птички в мир иной, она должна исчезнуть, издать предсмертный звук и
выпустить пару пёрышек — всего этого модель делать не умеет. Модель
просто вставлена в уровне, она не может быть застрелена, она не умеет
выпускать пёрышки и издавать какие-либо звуки.
Вот, как устроено убийство курицы
В действительности игрок не убивает курицу (привет, GreenPeace :-). Он стреляет в прозрачный разбиваемый энтити-объект func_breakable. Этот энтити-объект находится в том же месте, где и птичка.
От разрушения прозрачного func_breakable запускаются сразу три энтити-объекта, так как все они имеют одинаковое название.
Запускается env_render, который делает курицу-модель полностью прозрачной
Запускается env_shooter, который выбрасывает перья (тоже модели)
Запускается ambient_generic (то есть раздается предсмертный крик птицы)
Рождение курицы заново
С началом каждого нового раунда птица не становится вновь видимой! Ее нужно сделать видмой при помощи другого объекта env_render. На Cs_Italy данный 2-ой env_render
запускается триггером, расположенным на базе контр-террористов. При
рождении в начале раунда контр-террористы проходят через триггер, и
птичка вновь оживает, то есть становится видимой.
Расположение объектов
На картинке ниже видно расположение энтити-объектов.
Чёрный выделенный желтой рамкой кубик — это наша птица. Внутри птицы
расположен разбиваемый прозрачный в игре объект (func_breakable).
Сверху птицы расположен env_shooter. Данный точечный
энтити-объект выбрасывает перья, когда в курицу стреляют. Справа внизу
расположен звук (ambient_generic), который проигрывается при попадании в
птицу.
Слева от птицы расположены два точечных энтити-объекта env_render. Один из них делает курицу прозрачной, другой — в начале раунда, наоборот, видимой.
На нашем тестовом уровне также, как и на Cs_Italy, есть еще один объект — это trigger_multiple. Этот триггер, будучи активированным игроками, включает 2-ой env_render, который делает птицу вновь видимой.
Параметры энтити-объектов:
1. Cycler_sprite (вставляет на карту модель птицы)
Name: chicken1 (название курицы) Angle: угол, который используется для поворота птицы в требуемом направлении Sprite: models/chick.mdl (путь к файлу с моделью птицы) Frames per second: 1 (скорость проигрывания анимации, то есть одно движение в секунду) Render mode: Solid FX Amount: 255 (при значении 0 — модель будет полностью прозрачной)
2. Func_breakable (прозрачный разбиваемый объект, находящийся на месте птицы)
Target on break: chicken1kill (названия 3 энтити-объектов, запускаемых при разрушении данного func_breakable) Strenght: 1 (прочность, хватит 1-ого выстрела) Material type: flesh (тип материала, куски мяса) Gibs Direction: Relative to attack (куски мяса летят в направлении атаки) Render mode: Texture FX Amount: 0 (делает данный энтити-объект прозрачным)
3.1 Env_render (делает птицу прозрачной после выстрела по ней)
3.2 Env_render (делает птицу вновь видимой в начале каждого раунда)
Name: chicken1respawn (название объекта) Target: chicken1 Render mode: Solid FX Amount: 255 (делает птицу вновь видимой)
4. Env_shooter (выбрасывает перья из «убитой» птицы)
Name: chicken1kill (название объекта) Number of gibs: 15 (количество выбрасываемых моделей, то есть перьев) Gib velocity: 100 (скорость падения перьев) Cource variance: 5 (параметр указывает на сколько вылетающие перья будут отклоняться от прямой траектории) Gib life: 4 (время «жизни» перьев в секундах, затем они исчезают) Model: models/feather.mdl (путь к файлу с моделью перьев)
Флаги:
Repeatable — позволяет запускать env_shooter многократно
Medium Radius — средний радиус распространения звука Not Toggled — играет один раз (затем его нужно запускать повторно)
6. Trigger_multiple (запускает env_render, который делает птицу вновь видимой)
Target: chicken1respawn Delay before reset: 180 (в следующий раз сработает только через 180 секунд)
2. Недостатки метода
При некоторых условиях курица может не «воскреснуть» в начале раунда, или же она может стать неубиваемой!
Вся проблема в триггере trigger_multiple, у которого указано время обнуления в 180 сек. Автор уровня расчитывал на то, что в среднем раунд длится три минуты или 180 секунд. Но нам-то известно, что раунд может быть и 30-секундным, а может длиться и более трёх минут.
Если вы расстреляете птицу и раунд закончится быстрее трёх минут, то в
следующем раунде курицы не будет! А всё потому что триггер не успеет
обнулиться (не истекли 180 секунд).
Если же вы убъете птицу, затем пройдет три минуты, и вы еще раз
пробежите через триггер на базе контр-террористов, то курица станет
бессмертной!
Игрок расстреливает птицу
Проходит три минуты, триггер снова может вызывать появление птицы
Игрок пробегает через триггер, птица вновь становится видимой
Но так как брашевый энтити-объект func_breakable уже был один раз разбит, то птица становится бессмертной до конца раунда!