На главную

 

Конвейер в ситуации, приближенной к боевой
 


 




Для начала, как всегда, создадим заготовку, приблизив ее к игровой ситуации. Ну, к примеру, игроку надо попасть из одной комнаты в другую, но дверь не открывается, зато имеется конвейер где-нибудь под потолком. Пусть это будет комната размерами 704х512х256, разделенная перегородкой посередине. Вдоль одной (длинной) стены расположите выступ высотой и шириной 128 юнитов. Раскрасьте стены, пол и потолок так, как вам заблагорассудится.

 

Теперь создадим лестницу (из ступенек), ведущую на выступ. Ну, примерно такую:

 

Оптимальный размер ступенек 64х32х16. Скопируйте лестницу и во вторую комнату. Теперь создадим дверь, соединяющую комнаты (на выступе). Стандартные размеры двери - 64х96, текстуру можно применить любую, например - OUT_V1DR1.

 

Параметры двери:
Name - door1
Delay before close - stays open
Все остальные параметры проставьте по своему усмотрению. По условию, дверь должна открываться только с одной стороны. Расположите в той комнате trigger_once. В поле Target - door1. Все.
Теперь сделаем сам конвейер. Для него предусмотрены специальные текстуры - C2A4_CONV1, C2A4_CONV1, SCROLL_CONV3. Первая наносится на боковые поверхности конвейера, вторая на нижнюю часть, третья - на верхнюю (рабочую) поверхность. Никакие другие текстуры для конвейера не используются.

 

 

Эти текстуры изначально больше стандартного конвейера ровно в два раза, поэтому, когда вы будете применять текстуры, не забудьте уменьшить их в два раза по обеим координатам.
Размера самого конвейера: ширина - 32, толщина - 16. Разместим его следующим образом - в перегородке между стенами при помощи утилиты Carve проделаем отверстие размером 48х48 на уровне площадки, на которой расположена дверь; в этом отверстии проложим конвейер вот таким образом:

 

 

Теперь заставим конвейер двигаться. Отправим его toEntity, Class - func_conveyor.
Основные свойства конвейера:
Render FX - параметры отрисовки. В данном случае - неважны.
Render Mode - параметры отрисовки. В данном случае - неважны.
FX Amount - параметры отрисовки. В данном случае - неважны.
FX Color - параметры отрисовки. В данном случае - неважны.
Name - имя конвейера.
Conveyor Speed - скорость конвейера.
Minimum light level - минимальный уровень освещенности.

 

 

 

 

Возможно применение еще двух флагов: No Push - не перемещающий и Not Solid - не плотный, не удерживающий на себе ничего. Направление перемещения определяется полем Angle. Внимание! Вполне возможна ситуация, когда конвейер перемещает игрока в нужном направлении, а поверхность его крутится в обратную сторону. В этом случае, текстуру поверхности следует развернуть на 180 градусов. Присвоив конвейеру имя и дав какому-нибудь переключателю (например, кнопке) в качестве цели имя конвейера, можно заставить его в обратную сторону.
В принципе, на этом можно было бы и закончить, дорисовав браш, соединяющий выступ с конвейером, но... нет фабулы! Немного пошевелив мозгами можно организовать следующий сценарий.
Во-первых, отверстие, через которое проходит конвейер, надо забрать решеткой.
Во-вторых, у игрока не должно быть даже ломика. Пусть он будет в другой комнате.
В-третьих, на проходе, соединяющем конвейер и выступ, должен находиться небольшой ящик.
Опишем последовательность действий с точки зрения игрока: он толкает ящик, тот падает на конвейер, движется по нему, и выбивает решетку.
Но в процессе разработки все будет несколько не так. Хотя бы даже из-за того, что если просто поставить ящик на конвейер, решетку он не выбьет. Следовательно, получается такая цепочка последовательностей: ящик в данном случае - func_train. Он включается от trigger_once, расположенном на таком расстоянии от ящика, чтобы создавалось впечатление, что ящик поехал от того, что игрок толкнул его, и движется таким образом, будто едет по конвейеру. Это достигается при помощи точек пути (path_corner), расположенных над конвейером на таком расстоянии, что кажется, что ящик движется по конвейеру. Решетка (func_breakable) должна иметь отмеченный флаг only trigger - что означает, что она может быть разрушена только в том случае, если на нее воздействует некий триггер. Чтобы согласовать действия ящика и решетки, надо запускать их через multi_manager.


 

Точки, по которым движется ящик (path_corner), желательно организовать так, чтобы до того, как ящик коснется конвейера, его скорость была бы меньше, чем скорость конвейера, а в той точке, где он как бы соприкасается с конвейером, становилась равной. Для этого используется поле New train speed той точки, в которой ящик соприкасается с конвейером. Расположите возле ящика trigger_once, примерно так, как показано на рисунке, и multi_manager, который бы включался от этого триггера. Дайте ему имя и добавьте (отключив smart edit) два значения - имя ящика (func_train) и имя решетки (func_breakable). Для первого значение - 0, для второго - примерно - 4. С решеткой придется поэкспериментировать, чтобы определить подходящее значение. Ну вот, по сути, и все. Удачи!

 

 


На главную
 

Hosted by uCoz