Zdoom Mapping, иммитация многоэтажности без порталлов. Часть вторая — трансформация высот.

Добрый вечер друзья! Продолжаем нашу серию уроков и сегодня мы с вами поговорим про такую фишку, как трансформация высот.
Но перед этим немного предыстории. Давным давно, когда 3д полов ещё не было и о такой вещи как вода в секторе только мечтали, появился специфичный бум-экшен в маппинге — Transfer_Heights. Первоначально он задумывался чисто для иммитации воды, но позже его расширили параметрами и теперь с его помощью можно делать довольно много разных интересных вещей. Что он из себя представляет? В каких то случаях он позволяет проверять «уровень глаз» у игрока, в каких то позволяет сделать кусок затопленного сектора. Везде он использует схожий с 3д-полами принцип — есть технический сектор, из которого игра берёт информацию что и как отрендерить. Наш случай как раз будет использовать проверку «глаз» у игрока. Замечу, что данный способ позволяет сделать и затопленные сектора наподобие тех, что в Duke3d.
Теперь давайте определимся с вами вот по каким вещам:
— Наши сектора «друг над другом», на разной высоте
— Нужно больше деталей в секторах и не хочется мудрить с 3д полами
— Нужно перемещаться плавно с этажа на этаж и нам не обязательно видеть этажи, как в случае с порталлами

И так приступим! Давайте нарисуем с вами два сектора на разной высоте «друг над другом» и создадим внутри этих секторов, например…., трубу. Сделаем эдакое подобие канализации под землёй. Например вот так:

Обратите внимание на самый главный нюанс — высота «трубы», в которую будет прыгать игрок, одинаковая в обоих секторах. Следующий наш шаг — нам нужно создать телепорты-якоря, для того, чтобы игрока можно было телепортировать из трубы в трубу. Принципы используются те же, что и в предыдущем уроке — сектора «трубы» одинаковые и телепорты ставятся строго в одинаковую позицию в этих секторах. Так же не забываем пронумеровать наши телепорты уникальными тегами. А вот сектору внутри трубы в обоих местах надо дать одинаковый тэг. Например вот так:

«Ну и что дальше?», а нужно дальше нам сделать «технический» сектор, для тэга Transfer_Heights. В техническом секторе на одну из линий сектора вешаем экшен 209. Ставим тэг сектора тот, что используем для «трубы» внутри(у меня под номером 3), а в параметрах экшена выставляем 16 — Do not draw(не рендерить данные из технического сектора) Делаем вот так:

Почему не рендерить данные из тех. сектора? Ну в этом нет никакого смысла, т.к. это не порталл всё равно, а лишь «условие для глаз». Позже вы поймёте смысл этой фразы.
Давайте теперь с вами проведём кое какие расчёты. Высота пола в первом «верхнем» секторе = 0, а высота пола «в нижнем» = (-128). Значит высота пола в техническом секторе должна быть где то по середине этих значений. Нужно подбирать значения так, чтобы в глаза не бросались ни верх ни низ. Опытным путём я установил, что для меня подойдёт высота пола у тех сектора в (-56) единиц. Пока что давайте на этом остановимся и теперь проставим спец. предметы Zdoom — «глаза», которые будут следить не сколько игрок выше поднялся именно этой отметки в -56 единиц.
Конкретно нас интересуют таких 2: «Eyes Bellow Fake Floor»(глаза ПОД фальшивым полом) и «Eyes above fake floor»(глаза НАД фальшивым полом). «Eyes Bellow Fake Floor» — расположим в «верхнем секторе» в трубе, а «Eyes above fake floor» в нижнем секторе, так же в трубе(это важно!). Допустим вот так:

Для телепортации будем использовать экшн 77 — Teleport_Group. Выделяем «Eyes Bellow Fake Floor» предмет и заходим во вкладку Actions. Ставим экшн 77, вспоминаем, что у телепорта «верхнего» сектора номер 1, а у телепорта «нижнего» сектора номер 2. Проставляем 2 и 3 параметры(номер телепорта, где находится объект в данный момент, и номер телепорта куда телепортировать). Для наглядности скриншот:

Для глаз «Eyes above fake floor» делаем тоже самое, только в параметрах меняем местами номера телепортов(дабы из трубы можно было вылететь наружу). Наглядный скриншот для понимания:

И так, у нас всё готово! Но! Надо бы прояснить всё таки, как оно работает. При старте игры движок поместит «фальшивый» пол из технического сектора на ту высоту, которую мы у него выставили в сектор в тэгом 3(на высоту -56 единиц). Т.к. стоит параметр «Do not Draw» — рендерить движок такой пол не будет, но будет «знать» что пол в секторах в тэгом 3 есть и вполне существует. Спец предметы «Eyes Bellow Fake Floor» и «Eyes above fake floor» смотрят позицию глаз игрока относительно фальшивого пола из технического сектора и как только они становятся либо выше, либо ниже(в зависимости от предмета и сектора) происходит мгновенная телепортация из сектора в сектор по заданным параметрам(экш 77). Надеюсь всё понятно. Ну и для наглядной демонстрации, как и в прошлом уроке, выкладываю короткое видео:

И так, послесловие… Где можно использовать? Как в нашем примере — для иммитации колодцев, частично и этажей(если использовать древние визуальные порталлы), вент-каналы и самое главное — затопленные сектора, как в Duke3d. Но про затопленные сектора наверное в следующем уроке. Тренируйтесь, пробуйте и самое главное — не стесняйтесь задавать вопросы в комментариях. Ну вот и всё на сегодня, удачи в изучении!)

avatar