L4D2 Дизайн уровня/Запросы директора
logic_director_query это новый объект, специфичный для L4D2, который при срабатывании возвращает значение, соответствующее тому, насколько 'сердит' A.I. Директор в этот момент.Чем лучше игроки выживают, тем злее будет директор, и тем более агрессивно игра будет в спавне инфицированных.
Вы можете воспользоваться этим, чтобы ваши карты стали более динамичными и отвечали требованиям уровня игрока. Простым примером может быть создание нескольких путей через область различной длины / сложности, а затем использование запроса Director для открытия и закрытия соответствующих путей. В режиме versus система автоматически повторяет решение, когда команды меняются, что обеспечивает равномерный игровой контекст.
Вызов запроса
Давайте посмотрим, как это работает.
Директор постоянно обновляет свое внутреннее состояние, но для целей редактирования карт вы должны явно запросить его с помощью какого-либо триггера. Запрос дает нам значения гнев Директора и позволяет нашей игровой логике правильно реагировать.
В этом примере давайте отменим запрос, как только выжившие достигнут определенной точки на карте. Идите вперед и поставьте триггерный объем в коридоре.Запросить директора так близко к самому началу первой карты не всегда полезно, так как оставшиеся в живых будут в полном здравии, и директор всегда будет самым злым. Но для учебных целей это будет сделано.
Поместите твердое тело, затем выберите его и выберите Tools > Tie to entity в строке меню. Измените класс сущности на "trigger_once" и присвойте ему материал "tools/toolstrigger
"
Мы хотим, чтобы этот триггер реагировал только для оставшихся в живых, поэтому нам нужно отфильтровать его выход. Для этого давайте разместим новый объект класса "filter_activator_team" и назовите его "filter_survivor
".
Выберите уровень триггера и свойства, установите его имя фильтра на "filter_survivor
". Теперь триггер будет активироватся только выжившими, а не зараженными.
Затем, давайте переместимся по другому концу коридора к лестнице, ведущей в безопасную комнату. Поместите новый объект класса "logic_director_query". Для имени используйте "director_query_zombie
".
В разделе Properties установите значение Min. Anger Range до 0
и Max Anger Range до 9
. Директор сам отслеживает гнев между 0 и 50, но для наших целей мы хотим разделить его на 10 случаев. Эти настройки переназначают значения, возвращаемые запросом Director, в шкалу от 0 до 10.
Noise директора - очень важная часть геймплея. Немного непредсказуемости необходимо что бы держать игроков в напряжений. Для учебных целей, давайте установим Noise на "Pure
". Это отключает случайность в системе гнева. Обычно вы не захотите этого делать, поскольку он устраняет элемент процедурного сюрприза, делая игровой процесс скучным и предсказуемым.
Идем дальше и выбираем уровень триггера в начале карты и добавляем вывод "OnStartTouch", который будет нацелен на "director_query_zombie
" с вводом "HowAngry
".
Нажмите F9, чтобы запустить карту. Как только он загрузится, выйдите в коридор, чтобы вызвать гнев, а затем сразу же поднимите консоль. Запрос директора будет выглядеть примерно так:
TRUE Anger: 50.00 Processed Anger: 50 Out Anger: 9
Таким образом, наш запрос теперь атаковать игроков. Во время работы над нашей картой нам нужно будет установить sv_cheats в 1, что позволит нам вручную вызвать запрос Director с консоли. Для нас это будет выглядеть:
ent_fire director_query_zombie howangry
Реагирование на запрос
Теперь, когда у нас есть информация от Директора, нам нужно что-то сделать с ней, и как правило это будет своего рода изменением в мире. Давайте запустим зараженного, но его тип будет зависеть от гнева.
Поместите новый объект класса commentary_zombie_spawner
прямо над director_query
.
Затем давайте создадим новый объект logic_case
с именем "zombie_case
" и поместим значения свойств для каждого из условий, на которые мы хотим ответить. В этом примере мы установили его, чтобы иметь возможность реагировать на 10 различных условий.
Как только Properties настроены, мы переходим к Outputs и сигнализируем спавнеру зомби делать разные вещи в зависимости от случая.
Теперь вернитесь к объекту logic_query_director
и перейдите к Outputs. Выберите OutAnger как ваш выход, "zombie_case
" в качестве вашей цели и InValue в качестве вашего ввода. Это скажет вашему logic_query_director отправить точное значение его переназначенных значений гнева в logic_case. logic_case примет этот номер и будет соответствовать ему в случаях, которые вы установили.
Если случай не соответствует свойству, он ничего не сделает. Итак, в этом примере, если гнев Директора равен 5 или ниже, он ничего не сделает.
Выше 6, случай сигнализирует, что спавнер породит волну зомби, либо boomer, либо charger, либо tank, в зависимости от уровня гнева.
Другие виды использования
Когда вы разрабатываете свои карты, вы захотите тщательно настроить свою логику карты, чтобы каждый сценарий, отвечающий режиму, был 'FUN FOR PLAYERS'. Если ваша установка слишком предсказуема, игроки смогут ее предвидеть, и это не весело. Если это так случайно, что неясно, насколько хорошо они делают, есть некоторая корреляция с тем, что происходит, тогда у них не будет мотивации делать то, что вы просите их делать.
Сколько случайности вы должны использовать? От чего это зависит. Зона развлечений отличается для каждого сценария, и достижение этого редко происходит прямо. Рекомендуется, чтобы вы планировали несколько итераций наблюдения игроков, улучшая поведение, наблюдая снова.
Вот пример, который может оказаться полезным при разработке и отладке ваших карт:
Откройте файл:
sdk_content\mapsrc\Your_First_L4D_Level_Tutorial\tutorial07_complete.vmf
Здесь у нас есть логический таймер, с помощью которого info_query запускает запрос через регулярные промежутки времени. logic_case оценивает гнев и включает соответствующий номер func_brush. Это дает численное считывание значения гнева непосредственно игрокам на основе запроса Директора.
Конечно, вместо цифр вы можете делать более тонкие вещи. Люди часто предполагают, что корреляция равна причинности. Вы можете использовать это в своих интересах для развлечений и острых ощущений.(И, в конце концов, возможно, даже прибыль.)
Вот еще один пример, который вы должны проверить:
sdk_content/Deadline2/mapsrc/l4d_deadline01.vmf
Первая карта кампании с добавочным примером Deadline2 использует это, чтобы выбирать альтернативные пути, один короткий и прямой, один менее прямой и перекрученный.Существует также спавнер, который может размещаться на пути к выжившим, в зависимости от гнева, boomer или witch, ни один из перечисленных не имеет хорошего отношения к ограниченному пространству.