Глава XX. Продвинутый маппинг. | |||
§ 20.1 Авиаудар на карте de_torn | |||
В этой статье мы расскажем о том, как устроен
авиаудар на карте de_torn. Вы разве не знаете, что на de_torn есть
авиаудар? Тогда поспешите прочитать о нем в разделе «Секреты». Для
создания подобного авиаудара нам понадобятся следующие энтити-объекты: Вот как будет выглядеть авиаудар: Схема действия авиаудара будет следующей:
1. Trigger_multipleИтак, начинаем с создания объекта trigger_multiple. Его мы разместим на середине моста (см. рис. ниже). Когда игрок пройдет через этот триггер, будет активирован multi_manager, расположенный чуть выше. | |||
| |||
2. Multi_managerMulti_manager, как видно из схемы, представленной выше, активирует 4 объекта: сначала звук самолета, затем запускает сам самолет, после этого «запускает» встряску земли и, в конце концов, «подрывает» разрушаемые ящики.Свойства multi_manager'а выглядят так: «Targetname» при отжатой кнопке «Smart Edit» означает имя объекта multi_manager, т.е. jet_multi. Ниже имени мы видим активацию звука jet_sound через 0.1 сек, активацию самолета jet через 1.0 сек, активацию встряски jet_shake через 1.0 сек и активацию взрыва ящиков jet_crate через 1.9 сек. Время активации всех этих объектов рассчитано с учетом скорости передвижения самолета (ведь необходимо взорвать ящики, когда самолет будет пролетать над ними). 3. Звук самолета Ambient_generic Самым первым объектом активируемым через 0.1 секунды является звук самолета. Естественно, это будет объект ambient_generic. Вот как выглядят его свойства и флаги: | |||
| |||
4. Запуск самолета Func_doorДля опытного маппера энтити-объекты не более, чем просто объекты, облажающие определенным набором свойств. Действительно, не стоит думать, что объект func_door может быть только дверью, исходя из его названия. Если мы раскрасим дверь подходящими текстурами и расположим горизонтально, то вполне можем получить платформу или простенький лифт.Так и в нашем случае дверь будет выполнять отличную от ее прямого назначения функцию — она будет самолетом :) В нашей тестовой карте мы использовали текстуры самолета из карты de_torn. На картинке ниже видно, что самолет у нас будет плоским прямоуголным брашем (а впоследствии объектом func_door), повернутым на угол 45° в направлении своего движения. Окрасив браш текстурой самолета, разверните его на виде сверху (2D-top). Рекомендуем использовать ровные значения: 30°, 45°, 60° и т.д. Превратите браш в объект func_door и выставьте в параметре «Angle» точно такой же угол, на который развернули самолет. В нашем случае самолет развернут на угол 45°, поэтому и в параметре «Angle» мы указали 45°. Важно также установить параметр Delay before close: -1, чтобы самолет мог пролететь только 1 раз за раунд, т.е. долетев до конечной точки, он останется там до конца раунда. Чтобы синие части текстуры стали в игре прозрачными, необходимо поставить следующие режимы: Render Mode: Solid, FX Amount: 255. Следующим важным параметром самолета (func_door) является «Lip», определяющий расстояние, на которое переместится самолет. По умолчанию самолет переместится на расстояние, равное своей длине (ширине). Расстояние при использовании параметра «Lip» высчитывается так: расстояние = длина самолета - Lip. Расстояние определяем на 2D-виде сверху. Так как угол, под которым летит наш самолет, равен 45°, то расстояние легко высчитать по диагонали координатной сетки. Если у нас сетка разбита на квадраты 128х128 юнитов, то по теореме Пифагора (Вы же ее помните? :) длина диагонали получается равной ~180 юнитов. Как Вы конечно же понимаете, теорема Пифагора применима к любому прямоугольному треугольнику, независимо от того, одинаковы катеты A и B или нет. Считаем количество квадратов с размером 128х128 юнитов от начального до конечного положения самолета. У нас получилось 9 квадратов, а значит расстояние равно ~1600 юнитов. Именно поэтому в параметр «Lip» мы записали значение «-1600» («минус», т.к. отрицательное значение увеличивает расстояние полета. Действительно, в формуле: расстояние = длина самолета - Lip перед параметром «Lip» стоит минус, а минус на минус дает плюс). | |||
| |||
5. Встряска Env_shakeДанный спецэффект отсутствует на карте de_torn, но мы решили немного усилить восприятие низко летящего реактивного самолета, поэтому добавили небольшое землетрясение при помощи объекта env_shake. | |||
| |||
6. Взрыв ящиков Func_breakableРядом с конечной точкой полета самолета создадим несколько ящиков и превратим их в func_breakable. На de_torn вместо ящиков используется крыша одного из домов. Самолет пролетает над крышей — раздается взрыв, и часть крыши разрушается.Время активации ящиков func_breakable рассчитано с учетом скорости самолета и расстояния, на котором он находится от ящиков в начале раунда. Да, кстати, если Вы не знаете, то объекты func_breakable при активации разрушаются, а установив значение «Explode magnitude» мы добавляем к простому разрушению еще и взрыв определенной силы. Внешне все выглядит, как будто самолет сбросил бомбы на ящики. | |||
| |||
ЗаключениеПри создании самолета желательно разместить его так, чтобы он не был виден с земли, иначе может получиться, что самолет будет неподвижно висеть над каким-нибудь домом и ждать, когда его «вызовут» :) На нашей карте самолет находится очень низко над горами, поэтому с земли незаметен. Игрок думает, что самолет вылетает из-за гор.Также необходимо учитывать следующую особенность объекта func_door (самолета): в начале следующего раунда func_door всегда возвращается в исходное положение, т.е. Вы можете увидеть, как самолет задом летит в начальное положение. Зная эту особенность, не размещайте места рождения игроков под траекторией полета самолета, если Вы не хотите, чтобы они увидели этот довольно странный маневр :) torn_airplane.zip [193Кб] — в архиве карта-пример в форматах BSP и RMF. |