Односторонний запуск (маппинг под CS 1.6)


1. Предисловие:

Допустим, понадобилось Вам реализовать такую схему на карте:

Нажать для просмотра
Рис.1

Проходя из области «один» в область «два» через триггер, игрок включает некоторое событие на карте (мне нужен был звук). А, проходя обратно, из области «два» в область «один», игрок это событие не включает. О том, как это можно сделать, речь и пойдет. Заранее предупреждаю, что никаких откровений не будет. Всё очень банально и буднично.

2. С чего у меня все началось (вполне конкретный пример)

Нажать для просмотра
Рис. 2

Задумка была такая: Игрок подходит к стене, подпрыгивает, его подталкивает на стену и раздается звук. Реализация такого механизма очень хорошо и подробно описана у Дмитрича (cs-mapper.by.ru), схема выглядит так:

Нажать для просмотра
Рис. 3

1. Игрок попадает в зону «trigger_multiple»
2. С задержкой 0 сек (без задержки то есть) этот триггер активирует сразу три энтити с одинаковым именем «sound_kat» (и через 2 сек. снова готов сработать)
3. Имя «sound_kat» имеют:
- ambient_generic – это мой звук
- trigger_relay – энтитя, которая с задержкой в 0 сек. включает trigger_push
- trigger_relay – энтитя, которая с задержкой в 1.5 сек. выключает trigger_push
4. И в течение этих 1.5 секунд игрока толкает куда надо под звук катапульты.

Вот по этой схеме я и слепил своё «устройство». Но возникла одна неприятность: игрок со стенки мог спрыгнуть обратно вниз, и «устройство» снова срабатывало. Причем у энтити «trigger_push» значение «speed of push» было всего «500», это значило, что толчка обратно на стену не было (вот такой вот в CS1.6 дурацкий «trigger_push», работает только при подпрыгивании), а звук был. Надо было как-то отключить эту катапульту при спрыгивании на нее – идее карты это не мешало.

3. Решение

Вот такая схема пускового механизма мне помогла решить эту проблему:

Нажать для просмотра
Рис. 4

В редакторе Хаммер это выглядело так:

Нажать для просмотра
Рис. 5

Спусковым крючком механизма являлся game_trigger «kat», который срабатывал, когда количество его активаций равнялось «2».
1. Игрок, проходя через кабинку trigger_multiple «finish», сбрасывал количество активаций спускового крючка (game_trigger «kat») на «0». [trigger_multiple «finish» -> game_trigger_set «off» -> game_trigger «kat»]
2. Наступая на trigger_multiple «start», игрок устанавливал новое значение активаций спускового крючка «1». [trigger_multiple «start»-> game_trigger_set «on» -> game_trigger «kat»]
3. подпрыгивая, игрок задевал trigger_multiple «botton_kat», который увеличивал количество активаций спускового крючка на единицу, если это значение равнялось двум, то спусковой крючок срабатывал и включалась катапульта. [trigger_multiple « botton_kat» -> game_trigger «kat»]
4. если же игрок прыгал сверху, то сначала ему приходилось пролетать trigger_multiple «finish» (активации крючка сбрасывались на ноль), потом trigger_multiple «botton_kat» (к активациям крючка прибавлялась единица 0+1=1) и приземляться на trigger_multiple «start» (активации крючка принудительно равнялись1).

4. Результат

Если игрок задевал сразу два trigger_multiple, то катапульта не срабатывала. Помучавшись с размерами этих trigger_multiple, я подобрал оптимальные (рост игрока - 74 юнита, толщина - 32 юнита), и катапульта заработала как часики.
==========================================
скачать пример (zip=bsp+map, 67K)

=========================================
Всего доброго.

=========================================
22.07.2008
Роман
rotoz@gorodok.net
=========================================
на главную
===============
cs-mapper