L4D2 Дизайн уровня/Запросы директора

From Valve Developer Community
Jump to navigation Jump to search
English (en)Русский (ru)中文 (zh)Translate (Translate)

logic_director_query(en) это новый объект, специфичный для L4D2, который при срабатывании возвращает значение, соответствующее тому, насколько 'сердит' A.I. Директор в этот момент.Чем лучше игроки выживают, тем злее будет директор, и тем более агрессивно игра будет в спавне инфицированных.

Вы можете воспользоваться этим, чтобы ваши карты стали более динамичными и отвечали требованиям уровня игрока. Простым примером может быть создание нескольких путей через область различной длины / сложности, а затем использование запроса Director для открытия и закрытия соответствующих путей. В режиме versus система автоматически повторяет решение, когда команды меняются, что обеспечивает равномерный игровой контекст.

Вызов запроса

Давайте посмотрим, как это работает.

A solid to trigger the query.

Директор постоянно обновляет свое внутреннее состояние, но для целей редактирования карт вы должны явно запросить его с помощью какого-либо триггера. Запрос дает нам значения гнев Директора и позволяет нашей игровой логике правильно реагировать.

В этом примере давайте отменим запрос, как только выжившие достигнут определенной точки на карте. Идите вперед и поставьте триггерный объем в коридоре.Запросить директора так близко к самому началу первой карты не всегда полезно, так как оставшиеся в живых будут в полном здравии, и директор всегда будет самым злым. Но для учебных целей это будет сделано.

Поместите твердое тело, затем выберите его и выберите Tools > Tie to entity в строке меню. Измените класс сущности на "trigger_once" и присвойте ему материал "tools/toolstrigger"

Filter what can activate the trigger.

Мы хотим, чтобы этот триггер реагировал только для оставшихся в живых, поэтому нам нужно отфильтровать его выход. Для этого давайте разместим новый объект класса "filter_activator_team" и назовите его "filter_survivor".

Выберите уровень триггера и свойства, установите его имя фильтра на "filter_survivor". Теперь триггер будет активироватся только выжившими, а не зараженными.

A new info_director_query is born.

Затем, давайте переместимся по другому концу коридора к лестнице, ведущей в безопасную комнату. Поместите новый объект класса "logic_director_query". Для имени используйте "director_query_zombie".

В разделе Properties установите значение Min. Anger Range до 0 и Max Anger Range до 9. Директор сам отслеживает гнев между 0 и 50, но для наших целей мы хотим разделить его на 10 случаев. Эти настройки переназначают значения, возвращаемые запросом Director, в шкалу от 0 до 10.

Noise директора - очень важная часть геймплея. Немного непредсказуемости необходимо что бы держать игроков в напряжений. Для учебных целей, давайте установим Noise на "Pure". Это отключает случайность в системе гнева. Обычно вы не захотите этого делать, поскольку он устраняет элемент процедурного сюрприза, делая игровой процесс скучным и предсказуемым.

Firing the query.

Идем дальше и выбираем уровень триггера в начале карты и добавляем вывод "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

Реагирование на запрос

It's raining Zombies.

Теперь, когда у нас есть информация от Директора, нам нужно что-то сделать с ней, и как правило это будет своего рода изменением в мире. Давайте запустим зараженного, но его тип будет зависеть от гнева.

Поместите новый объект класса commentary_zombie_spawner прямо над director_query.

Case properties

Затем давайте создадим новый объект logic_case с именем "zombie_case" и поместим значения свойств для каждого из условий, на которые мы хотим ответить. В этом примере мы установили его, чтобы иметь возможность реагировать на 10 различных условий.

Case outputs

Как только 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
Anger Debugging

Здесь у нас есть логический таймер, с помощью которого info_query запускает запрос через регулярные промежутки времени. logic_case оценивает гнев и включает соответствующий номер func_brush. Это дает численное считывание значения гнева непосредственно игрокам на основе запроса Директора.

Конечно, вместо цифр вы можете делать более тонкие вещи. Люди часто предполагают, что корреляция равна причинности. Вы можете использовать это в своих интересах для развлечений и острых ощущений.(И, в конце концов, возможно, даже прибыль.)

Вот еще один пример, который вы должны проверить:

sdk_content/Deadline2/mapsrc/l4d_deadline01.vmf

Первая карта кампании с добавочным примером Deadline2 использует это, чтобы выбирать альтернативные пути, один короткий и прямой, один менее прямой и перекрученный.Существует также спавнер, который может размещаться на пути к выжившим, в зависимости от гнева, boomer или witch, ни один из перечисленных не имеет хорошего отношения к ограниченному пространству.