Найти в Дзене

Hammer Editor: Изменение звуков ходьбы

Продолжаем серию статей по маппингу в играх с помощью Hammer Editor.
Звуки ходьбы как у солдат без замены файлов. Действия при нажатии клавиш ходьбы.
Первое что нам необходимо это установить на карту энтити game_ui отвечающую за нажатие клавиш игроком, её настройки:
Name gameUI
Оглавление

Продолжаем серию статей по маппингу в играх с помощью Hammer Editor.

Звуки ходьбы как у солдат без замены файлов. Действия при нажатии клавиш ходьбы.

Первое что нам необходимо это установить на карту энтити game_ui отвечающую за нажатие клавиш игроком, её настройки:

Name gameUI

FieldOfView -1.0

И во вкладке Flags убрать все галочки.

Для включения этой энтити logic_auto не подойдёт, по этому создадим тригеер который включит game_ui, создаём браш, превращаем его в trigger_once, во вкладке Flags отмечаем Clients и в Output добавляем:

OnStartTouch gameUI Activate

ИгрокКоснулсяТриггера gameUI Активировать

Далее расположим на карте 4шт logic_branch (энтити которая может лишь менять одно своё значение на 0 или 1) - в данном случае они понадобятся для отслеживания того что игрок удерживает клавишу.

Для удобства расположим их так же как и располагаются клавиши ходьбы на клавиатуре. Верхнюю назовём forward, нижнюю back, левую и правую соответственно left и right.

Поле InitialValue у всех logic_branch должно быть 0.

Возвращаемся обратно к game_ui, переходим во вкладку Output и создаём следующие команды:

PressedForward forward SetValue 1

UnpressedForward forward SetValue 0

Что означает:

ПриНажатииВперёд forward УстановитьЗначение 1

ПриОтжатииВперёд forward УстановитьЗначение 0

-2

Так же делаем для всех клавиш передвижения, в итоге получиться:

PressedForward forward SetValue 1

UnpressedForward forward SetValue 0

PressedBack back SetValue 1

Unpressed back SetValue 0

PressedMoveRight right SetValue 1

UnpressedMoveRight right SetValue 0

PressedMoveLeft left SetValue 1

UnpressedMoveLeft left SetValue 0

Добавляем на карту logic_branch_listener - энтити которая будет проверять все наши logic_branch и выносить вердикт, указываем в полях Logic Branch названия наших logic_branch (логично), должно получиться следующее:

Logic Branch 01 forward

Logic Branch 02 back

Logic Branch 03 right

Logic Branch 04 left

Теперь делаем периодичность между воспроизведениями звуков шагов, для этого расположим на карте один logic_timer, дадим ему имя StepTimer, в поле Start Disabled (отключен в начале) установим значение Yes, а Use Random Time (использовать случайное время) - No.

В поле Refire Interval установим значение 0.4 - это и есть периодичность воспроизведения каждого звука шага в секундах, получается чуть меньше половины секунды.

Возвращаемся обратно к logic_branch_listener, переходим во вкладку Output и создаём следующие команды:

OnMixed StepTimer Enable

OnAllFalse StepTimer Disable

Что означает:

Если logic_branch имеют не одинаковые значения (то есть хоть какая-то клавиша нажата) StepTimer Включается

Если все logic_branch имеют значение 0 StepTimer Выключается

-3

Осталось совсем не много, создаём 6шт ambient_generic (энтити воспроизведения звука) каждый на отдельный звук ходьбы. Установим всем поле Volume (громкость) на 8, и во вкладке Flags отметим все галочки.

Даём каждому имя step1, step2 ... и так до step6, так же у каждого в поле Sound Name (имя звука) указываем необходимый звук - у step1 это npc/combine_soldier/gear1.wav , у step2 тоже самое, но в конце gear2.wav и так далее, получится 6шт step от 1 до 6, с звуками gear так же от 1 до 6.

Создаем logic_case энтити которая случайным образом будет воспроизводить один из 6 звуков за каждый шаг. Даём ей имя CombineStep и в полях Case (кейс рандома) выставляем цифры от 1 до 7, получится следующее:

Case 01 1

Case 02 2

... и так до 7 ...

Case 07 7

(почему до 7, а не до 6 - иногда в редких случаях при запуске карты у этой энтити последний кейс никогда не будет браться в рандом, возможно это её баг)

Во вкладке Outputs добавляем следующее:

OnCase01 step1 PlaySound

OnCase02 step2 PlaySound

... и так до 6 ...

OnCase06 step6 PlaySound

Осталось последнее - запускать logic_case для случайного воспроизведения одного из звуков.

Для этого переходим обратно к logic_timer и в Output добавляем:

OnTimer CombineStep PickRandomShuffle

При Срабатывании Таймера CombineStep Выбрать Случайный Не Повторяюшийся Кейс

И так, предлагаю восстановить логическую цепочку всех действий, это типа как проверка правильности решения примера по алгебре:

Игрок коснулся trigger_once активировав этим game_ui, он нажимает клавишу Вперёд, game_ui считывает нажатие и меняет значение logic_branch с 0 на 1, logic_branch_listener замечает это изменение и запускает logic_timer который через 0.4 секунды отправляет на logic_case команду на запуск случайного не повторяющегося кейса, logic_case выбирает кейс номер 4 и запускает четвёртый ambient_generic который воспроизводит звук npc/combine_soldier/gear4.wav

Игрок отпускает клавишу Вперёд, game_ui считывает это и меняет значение logic_branch на 0, logic_branch_listener замечает это изменение и отключает logic_timer.

-4