Глава XVII. Машины, лифты, платформы.

Движущиеся объекты: машины, лифты и платформы.

17.1

Создание машины

В этой статье мы расскажем, как создаются машины. Нам понадобятся следующие энтити-объекты: Машины в CS появились не так давно, тогда в официальный мэппэк была добавлена карта de_jeepathon2k, которая быстренько оттуда исчезла в связи с многочисленными глюками, связанными с машинами. Так что не удивляйтесь, если Ваша машина провалится сквозь землю или наоборот зависнет на высоте 5 м.
На картинке ниже Вы можете увидеть, как будут выглядеть машины на нашей тестовой карте:
Так будут выглядеть машины на тестовой карте
Сама машина — это брашевый энтити-объект func_vehicle, в состав которого обязательно должен входить ORIGIN-браш (т.к. машина — объект вращающийся). Сначала мы определяем несколькими брашами форму машины, затем создаем ORIGIN-браш и превращаем все это в func_vehicle. Конечно, не обязательно придавать машине форму машины. Можно заставить ездить и доску, и ящик, и бочку.
После этого необходимо создать зону, из которой игрок будет управлять машиной. Эта зона определяется брашевым энтити-объектом func_vehiclecontrols, который необходимо со всех сторон закрасить текстурой AAAtrigger. Зона управления не должна входить в состав машины, она просто размещается вокруг ее кабины.
Объектом func_vehiclecontrols определяем зону управления автомобилем
Ну, и последнее, необходимо сделать два точечных энтити-объекта path_track, которые определяют начальное направление машины (т.е. в какую сторону она будет развернута).
Создаем 2 точечных объекта path_track (один под машиной, другой немного в сторонке)
ВАЖНО: при создании машины, ее необходимо ориентировать на виде сверху кабиной налево (так задумано разработчиками), чтобы игра могла определить, где у машины перед.
В игре машина появится на первом объекте path_track и будет направлена на второй объект path_track. Таким образом, совсем необязательно размещать машину именно в том месте, где она должна появиться в игре. Машина появится на первом объекте path_track.

Про ORIGIN-браш в машинах

ORIGIN-браш необходимо размещать в центре машины, вокруг него машина будет вращаться. Размер ORIGIN-браша значения не имеет, более важно положение его центра, т.к. от него зависит расположение машины по вертикальной оси относительно дороги. Возможно, получится так, что машина появится на уровне висящей в воздухе или вкопаной в землю. В этом случае необходимо поправить параметр "Height above track" (т.е. высоту над землей).
Чтобы правильно определить значение параметра "Height above track", нужно в редакторе на 2D-виде сбоку посчитать расстояние от центра ORIGIN-браша до верхней стороны объекта path_track (см. рис. ниже).
t19auto4 Это расстояние необходимо записать в параметр "Height above track" машины func_vehicle.
Ну, и напоследок, перед тем, как мы приведем свойства всех задействованных объектов, необходимо добавить, что в состав машины (объекта func_vehicle) можно включать CLIP-браши для блокирования передвижений игрока. Например, Вы не хотите, чтобы игроки могли залазить в кузов машины — создаете там CLIP-браш и затем вместе с ним создаете func_vehicle.
Если у Вас что-то не получается с машинами, скачайте карту-пример и разберитесь самостоятельно.
Func_vehicle (машина)
Name: car1 (имя машины, обязательно)
First stop target: path1 (имя первого объекта path_track)
Sound: 2 (звук, издаваемый при движении машины)
Length of the vehicle: 150 (длина машины в юнитах, рекомендуем поставить значение меньшее на 8-16 юнитов для удобства управления)
Width of the vehicle: 90 (ширина машины в юнитах, также лучше уменьшить на 8-16 юнитов)
Height above track: 8 (высота машины над дорогой, определяется, как написано выше)
Initial speed: 0 (начальная скорость машины, при значении > 0, машина сама поедет в начале раунда)
Speed: 550 (максимальная скорость машины, юнитов в секунду)
Damage on crush: 0 (количество отнимаемых у игрока процентов жизни при попадании под машину
Volume (10 = Loudest): 7 (громкость звука, значения от 0 до 10, где 10 — максимальная громкость)
Bank angle on turns:0 (угол наклона машины в поворотах)
Флаги:
No Pitch (X-rot) — если отмечено, то машина будет поворачиваться только вокруг вертикальной оси Z
No User Control — если отмечено, то игрок не сможет управлять машиной
Passable — если отмечено, то машина будет нематериальной, т.е. через нее можно будет проходить
Func_vehiclecontrols (зона управления машиной)
Vehicle name: car1 (имя машины, которой будет управлять игрок)
Path_track (определяет начальное положение машины)
Name: path1
Next stop target: path2 (впишите сюда имя второго объекта path_track)
Остальные параметры выстявлять не нужно.
Path_track (определяет начальное направление машины)
Name: path2
Next stop target: path1 (впишите сюда имя первого объекта path_track)
Остальные параметры выстявлять не нужно.
func_vehicle.zip [110Кб] — в архиве карта-пример в форматах BSP и RMF.
17.2

Простой лифт

В этой статье мы расскажем о том, как можно сделать лифт, который будет ездить между двумя этажами и вызываться кнопками. Подобный лифт есть на карте CS_SIEGE. Для создания лифта нам понадобятся следующие энтити-объекты: Определяем форму лифта. Превращаем его в func_door. Чтобы лифт ездил вверх-вниз в параметре "Angle" необходимо выставить значение "Up". Также важно выставить параметр "Delay before close: -1", чтобы лифт оставался на новом этаже и автоматически не возвращался в исходное положение.
Также необходимо создать на каждом из двух этажей по кнопке (func_button), которая будет приводить лифт в движение через несколько секунд.
Устройство лифта
Func_door (лифт)
Angle: Up (направление движения, вверх-вниз)
Name: elevator (имя для лифта)
Speed: 120 (скорость лифта, юнитов в секунду)
Move sound: large rollers (звук движения)
Stop sound: ratchet stop (звук остановки)
Delay before close: -1 (при таком значении лифт будет ждать на новом этаже до следующего вызова)
Lip: -180 (дополнительное расстояние, на которое будет перемещается лифт, см. ниже)
Флаги:
Don't link
Toggle: лифт будет ждать следующей активации и не будет автоматически возвращаться назад
Одним из самых важных параметров лифта является "Lip", который используется для изменения расстояния перемещения лифта.
Дело в том, что по умолчанию лифт поднимается на расстояние своей высоты. Например, у нас высота лифта составляет 120 юнитов. По умолчанию он поднимется именно на такое расстояние. Расстояние же между двумя этажами у нас 300 юнитов. Это означает, что лифт не доедет до второго этажа и "застрянет" между этажами. В связи с этим расстояние, на которое перемещается лифт, необходимо увеличить. Это как раз и позволяет сделать параметр "Lip". Причем отрицательное значение параметра "Lip" увеличивает расстояние, а положительное — сокращает.
На схеме ниже лифт показан в нижней позиции (на первом этаже).
Менее контрастными цветами показано его положение при значении "Lip=0".
Пунктиром показано положение лифта в конечной позиции (на втором этаже).
t24elevator2 Размерными линиями показано, какое расстояние считается за "Lip". У нас это расстояние составило 180 юнитов, следовательно, в параметр "Lip" мы должны записать значение -180.
Как уже говорилось выше, на каждом из этажей необходимо создать по одной кнопке func_button, которые будут запускать лифт. Свойства этих кнопок выглядят так:
Func_button (кнопка, запускающая лифт)
Target: elevator (сюда мы записали имя лифта)
Delay before trigger: 2 (время до активации лифта)
Delay before reset: 1 (время, в течении которого кнопка не может быть активирована повторно)
Флаги:
Don't move: кнопка не вдавливается в стену при нажатии
elevator.zip [25Кб] — в архиве карта-пример в форматах BSP и RMF.
17.3

Платформы

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

1. Простая платформа

Все, что нужно знать для создания простой поднимающейся платформы, это то, что размещать ее следует в верхней позиции, т.е. там, куда платформа должна приехать. Это несколько неудобно, но что поделаешь — таково условие.
Посмотрите на рисунок ниже, там платформы размещены в их конечном положении. В это место они привезут игрока и остановятся.
Платформы следует размещать в верхней позиции (конечной точке пути)
В игре платформы, как и положено, будут находится внизу. Возможно, Вы спросите: почему же не все платформы находятся на земле, а только платформа #4?
Ответ очень прост. Все дело в свойствах (см. ниже).
В игре платформы будут, как и положено, снизу (в начальной точке пути)
Свойства:
Travel altitude (can be negative) — расстояние в юнитах, на которое поднимается платформа
Speed — скорость движения платформы, юнитов в секунду
Флаги:
Toggle — если отмечено и платформа активируется кнопкой или триггером, то поднявшись, она не станет опускаться автоматически. Чтобы опустить платформу, ее необходимо будет активировать повторно
Главный параметр в свойствах — это Travel altitude, который определяет расстояние, на которое поднимется платформа. Заметьте, что расстояние может быть и отрицательным, тогда платформа будет двигаться в противоположном направлении.
К сожалению, иногда при указании отрицательного расстояния, карта не запускается и выводится ошибка: "backwards mins/maxs" — тут уж как повезет.
Что касается нашей тестовой карты, на ней мы создали 4 платформы с абсолютно одинаковыми свойствами (одинаковая скорость и одинаковое расстояние подъема). Сначала игрок с земли прыгает на платформу под номером 4, она довозит его до уровня платвормы #3, затем игрок прыгает на #3, она поднимается до уровня платформы #2 и т.д.

2. Вращающаяся платформа

Вращающаяся платформа у нас будет иметь следующий вид:
Создаем вращающуюся платформу, не забывая про ORIGIN-браш в ее центре
Внизу платформы, как видите, мы создали оранжевый столб, на котором она якобы поднимается, а также в центре мы разместили ORIGIN-браш, т.к. платформа вращающаяся.
После того, как платформа создана, выделяем ее вместе с ORIGIN-брашем и превращаем в func_platrot.
Центр ORIGIN-браша совпадает с центром платформы
Платформу мы разместили в конечной (верхней) точке маршрута. Игрок встанет на платформу на земле, и она начнет подниматься и одновременно вращаться.
Свойства:
Speed of rotation — скорость вращения вокруг оси (градусов в секунду)
Spin amount — угол поворота в градусах (например, 1440° — это 4 оборота вокруг оси)
Travel altitude (can be negative) — расстояние в юнитах, на которое поднимается платформа
Флаги:
Toggle — как и в предыдущем случае
X Axis или Y Axis — выбор оси вращения
В нашем случае платформа вращается вокруг вертикальной оси Z, поэтому флаги X Axis или Y Axis выставлять не следует. Однако, если нам необходимо вращение вокруг осей X или Y, то мы должны будем отметить соответствующий флаг.
func_plat.zip [29Кб] — в архиве карта-пример в форматах BSP и RMF.