Население: Монстры и NPC

 Fallout New Vegas  G.E.C.K. глазами разработчиков  RJ 11059 0

Краткий обзор

Это упражнение опишет основы создания уровневого списка врагов и использует генерирование поведения в патруле и пакета sandbox (поведение при определенном маркере).

 

Это упражнение подразумевает, что вы покрыли navmesh всю созданную локацию. Если хотите, можете загрузить плагин примера предыдущего упражнения и работать с ним.

Описание новой системы уровней

 

Некоторые пользователи уже знакомы с уровневой системой, используемой в TES4: Oblivion. Хотя новая система построена на той же основе, есть несколько ключевых отличий, о которых нужно знать.

  • Encounter_Zone - Зоны Столкновений позволяют разработчикам определять минимальный уровень сложности для определенной области. Например, если игрок второго уровня попадает в Зону Столкновений, в которой минимальный уровень установлен как 10, все уровневые списки этой Зоны будут генерировать персонажей как будто у главного героя 10-й уровень.
  • No Recalculation - Когда главный герой входит в зону, обозначенную таким флажком первый раз, уровень этой зоны устанавливается как постоянный. Это означает, что в момент, когда игрок заходит в помещение, персонажи, сгенерированные уровневыми списками никогда не будут сброшены или увеличены в сложности.
  • Thin Leveled List - В отличие от Oblivion, большинство списков Fallout3 состоят из очень небольшого количества врагов. Ради примера, давайте посмотрим на уровневый список lvIMirelurk (Болотник).Обратите внимание, что в списке присутствует только три типа болотника. Данные монстров больше не зависят от уровня игрока. Переключение по уровне сложности врагов очень видно и визуально и статистически.
Уровень Название существа ID Существа
1
9
16
Болотник
Болотник Охотник
Болотник Король
CrMirelurk1
CrMirelurk2
CrMirelurk3King
Отталкиваясь от этого, даже если Encounter Zone будет искать существа с 10-м уровнем, она (зона)выберет для помещения Болотника Охотника на 9-м уровне, так как он ближе всего к нужному (10-му) уровню.

Добавление Базового NPC

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

Размещение маркера уровневого NPC

В большинстве случаев мы будем использовать lvIRaiderGun, что приведет к появлению на уровне рейдеров с оружием. Нам не нужно переживать об определенном типе оружия или о варианте брони или о еще каких-то деталях. Этот тип персонажа вы можете найти с помощью фильтра или, переместившись вручную в раздел Actors->NPC в списке окна Object Window.

Когда вы найдете lvIRaiderGun, перетащите его в окно визуализации. Появится новый маркер в виде белой буквы М и стрелки, выходящей из этого маркера, как показано на иллюстрации.


3 Вида Маркера Уровневого Списка без модификатора сложности

Модификаторы сложности используются для установки отношения к сложности уровня Encounter Zone. Маркер, который поместили мы, использует "None", поэтому давайте изменим это значение на "Easy" (Легкий). Чтобы изменить модификатор сложности, сделайте двойной щелчок на маркере и перейдите на вкладку Leveled Actor. В этой вкладке раскройте выпадающий список и выберите Easy. Щелкните ОК для подтверждения изменений.

 

После того, как модификатор сложности установлен, из списка будут выбираться персонажи, которые соответствуют легкому уровню сложности. Таким образом, мы получим большое количество разных вариантов врагов, особенно на высоком уровне главного героя. Хорошим правилом, которым следует руководствоваться, является создание примерно 50% уровневых списков уровня в качестве "Easy". О модификаторах сложности читайте более подробно здесь.

После изменения модификатора сложности на "Easy" вы увидите, что цвет маркера поменялся на зеленый. Каждый уровень сложности имеет свой цвет, поэтому вы можете с одного взгляда оценить уровень сложности любой области. Цвет маркерам назначается в зависимости от настроенного уровня сложности.

 

Уровень сложности Цвет Маркера
None Белый
Easy Зеленый
Medium Желтый
Hard Оранжевый
Boss Красный


3 Вида уровневого маркера, установленного в Easy

Теперь, когда у нас есть первый уровневый список в Убежище 74, мы можем подумать о том, как будут вести себя рейдеры после того, как будут сгенерированы из этого списка.

Поведение NPC

В основном, поведение NPC управляется с помощью "AI Packages", которые представляют собой подробно настраиваемый набор целей и задач. Эти пакеты способны создать довольно "осмысленное" поведение персонажей, хотя, с другой стороны, их настройка и установка занимает очень много времени.

GECK представляет новые возможности, которые позволяют нам быстро назначить поведение таким NPC как рейдеры. Мы говорим о генерировании поведения при патрулировании и в месте установки специальных маркеров (sandbox). Благодаря тому, что при генерировании уровневых списков врагов, одновременно с персонажами генерируются пакеты, включаемые по умолчанию, мы можем настроить простое поведение без ручного редактирования какого-либо пакета.

Создание Патруля

Патруль - это установка связанных маркеров, помещенных в область патрулирования. NPC при патрулировании будет следовать по этим маршрутам до тех пор, пока не вступит в бой или не прервется другой AI командой. Точки движения патруля могут настраиваться на определенную анимацию или на время ожидания перед продолжением движения.

Связывание ссылок

Для настройки нашего примера, нам нужен сам NPC и серия точек, между которыми он (персонаж) будет патрулировать территорию. Для установки маршрута патрулирования мы будем расставлять серию объектов "xMarkerHeading" в области Убежища и связывать их определенной последовательностью. Вначале, перетащите маркер "xMarkerHeading" из окна Object Window (через фильтр или из раздела World Objects->Static) и поместите его возле объекта lvIRaiderGun, который мы недавно создали.

 

Сам маркер lvIRaiderGun не считается за точку патрулирования. Маркеры, которые вы собираетесь использовать в качестве маршрута, должны быть соединены между собой. Персонаж может быть привязан к любой точке маршрута (к любому маркеру) в последовательности патрулирования и начнет обход территории с ближайшей точки после появления в игровом мире. Возможно, вы заметите объект под названием "xMarker" в Object List. Единственная разница между ним и "xMarkerHeading" во внешнем виде. Последний более предпочтительно использовать когда дело касается NPC, так как треугольный выступ спереди маркера указывает направление куда будет повернут персонаж, когда достигнет точки назначения.

В данный момент у нас есть "точка" и рейдер, пришло время связать их между собой. Сделайте двойной щелчок на маркере lvIRaiderGun и перейдите на вкладку "Linked Ref" в диалоге Reference Properties. Щелкните "Select Reference in Render Window". Диалог свернется и курсор приобретет вид круга с перекрестием по центру:  

Поместите курсор на объект xMarkerHeading. Курсор изменит цвет на белый .

Сделайте двойной щелчок, выделив эту ссылку и вы вернетесь в диалоговое окно Reference Properties. Убедившись, что надпись XMarkerHeading находится в поле Reference, а Vault74a в поле Cell, щелкните ОК. Когда один объект связан с другим, вы увидите тонкую стрелку, отображающую эту связь. Выделите ваш уровневый список и сравните с изображением 1b, представленным ниже.

 

Не постоянные ссылки нельзя выделить, вначале определите нужный объект как постоянную ссылку - xMarker и xMarkerHeading по умолчанию постоянные.

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

У нас есть первая привязанная к рейдеру точка патрулирования и нам нужно указать этому персонажу время, которое он будет стоять здесь, перед тем как двигаться дальше. Чтобы сделать это, сделайте двойной щелчок на xMarkerHeading и укажите сколько времени рейдер будет проводить в этой точке, когда будет патрулировать эту область.

Двойной щелчок на xMarkerHeading откроет окно Reference Properties. Выделите вкладку "Patrol Data", показанную на рис. 2с. Установите флажок Patrol Data, чтобы стало доступно поле "Idle Time". В нашем примере мы установим 3 секунды. Нажмите ОК, чтобы сохранить данные и двигаемся дальше.

 


Рис. 1а Вкладка Linked Ref в окне Reference Properties 

Рис. 1b Тонкие стрелки показывают связь NPC с объектом xMarkerHeading

Рис. 1с Вкладка Patrol Data

Создание простого патрулирования

Для патруля нужно как минимум две точки, поэтому давайте создадим еще один объект xMarkerHeading и привяжем его к существующей точке патрулирования. Так как NPC может привязываться к любой из точек, в данный момент трогать его не будем.

 

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

Создайте еще три объекта xMarkerHeading и поместите их там, где вы хотите чтобы рейдер патрулировал область. Используя тот же процесс, при котором мы связывали lvIRaiderGun с xMarkerHeading, свяжите каждый создаваемый маркер с предыдущим. Когда они будут созданы, то при выделении вы должны увидеть тонкую линию стрелок, связывающих уровневый список и четыре маркера по типу цепочки.

Патруль, показанный на рис. 2а, называется патрулем "пинг-понг". Оставив первую и последнюю точку без связи, мы указали, что рейдер будет идти от первой точки до четвертой, а потом пойдет в обратном направлении.

Если мы свяжем первую и последнюю точку, патруль будет замкнутым кругом, в котором персонаж будет идти с первой до четвертой точки, а потом вернется в первую. Рис. 2b - это пример простого патруля, замкнутого между четырьмя точками.

 


Рис. 2а: Патруль четырех точек "пинг-понг", который работает: 1>2>3>4>3>2>1

Рис. 2b: Патруль четырех точек "замкнутый", который работает: 1>2>3>4>1

Создание патруля с помощью маркеров Idle

В созданной нами последовательности, NPC будет делать паузу в каждом xMarkerHeading и стоять на месте до тех пор, пока не выйдет время простоя. С помощью маркеров Idle Markers мы можем немного оживить наш патруль, если будем использовать их вместо xMarkerHeading. Когда мы заменим маркером Idle маркер xMarkerHeading, на рейдере будет проигрываться одна из определенных нами анимаций, когда он достигнет этой точки, вместо того, чтобы он просто стоял на одном месте.

Чтобы увидеть список существующих маркеров Idle перейдите в Miscellaneous->Idle Marker окна Object Window, как показано на рис. 3а. Возможно вам поможет слово default, введенное в поле фильтра, чтобы скрыть те маркеры, которые предназначены для особых случаев.

 

Используйте те маркеры, которые соответствуют определенным NPC или существам, потому что не на каждом персонаже можно проиграть любую из анимаций. Например, у когтей смерти своя уникальная анимация, поэтому мы не будем использовать маркер DeathClawIdleMarker.

Одно важное замечание при работе с маркерами Idle: по умолчанию они не являются постоянной ссылкой. Перед связыванием их с маркерами патруля, вначале установите для них флажок постоянной ссылки. Для этого сделайте двойной щелчок на маркере Idle, открыв окно Reference Properties и установите флажок Persistent Reference. Опираясь на рис. 3b, думаю проблем с поиском этого флажка у вас не будет.

Когда флажок будет установлен и маркер будет постоянной ссылкой, вы сможете связать его так же, как мы это делали с маркерами xMarkerHeading. На рис. 3d показан пример из предоставленного плагина с настройкой патруля исключительно с помощью маркеров Idle.

 

Нет смысла использовать Idle Marker в патруле, если вы не установите достаточно времени, требуемого на проигрывание анимации, выбираемой NPC/созданием. Если вы хотите создать патруль в котором персонаж просто проходит по определенным точкам и не делает нигде паузы, используйте xMarkerHeading без времени на idle.

 


Рис. 3а: Размещение Idle Marker в списке объектов

Рис. 3b: Флажок постоянной ссылки

Рис. 3с: Пример патруля, используя IdleMarker

Настройка Sandbox

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

Поведение sandbox - это простой пакет, который сообщает NPC бродить по определенной области и взаимодействовать с любыми доступными объектами. Давайте добавим для главной комнаты нашего дополнения, двух рейдеров с пакетами sandbox.

Создайте новый (или скопируйте существующий) lvIRaiderGun в вашем помещении. Чтобы разбавить темп добавьте lvIRaiderMelee в качестве второго рейдера. Это такой же уровневый персонаж, только он будет вести бой врукопашную.

 

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

В большинстве уровневых списков NPC есть варианты оружия. Большая часть этого оружия обозначено как Melee (Рукопашная), Gun (Поражение на дистанции) и Special (Особенное).Уровневые списки с тегом "Special" обычно генерируют персонажей с огнеметами, гранатометами или миниганами.

Пока мы не свяжем наших рейдеров с чем-то определенным, они будут выполнять пакеты sandbox, определенные по умолчанию. Без мебели или маркеров Idle, с которыми можно взаимодействовать, ваш NPC будет просто бродить по области в которой появился или стоять на месте ничего не делая.

Давайте добавим несколько маркеров мебели, вокруг которой смогут ходить рейдеры. На рис. 4b показано несколько объектов мебели, которые вы можете использовать.

Это: PushUpsMarker, ChairVault01R, WallMarker и Microscope01, хотя есть и другие, с которыми вы можете поэкспериментировать.

 

Фигура, изображенная синим цветом в маркере мебели показывает позу анимации, которую будут принимать NPC при использовании этих маркеров. Благодаря этому легко можно создать ситуации, когда персонаж прислоняется к стене или взаимодействует с поверхностью/объектами. Если в окне визуализации вы не видите этих маркеров, нажмите клавишу"М", включив отображение геометрии таких объектов.

Когда предмет мебели отображает больше чем один маркер синего цвета, вы видите точку входа в анимацию. Например ChairVault01R должно быть помещено в область, в которой вместе стоящей фигуры ничего нет, потому что с этой стороны NPC будет пытаться сесть на это кресло.

Если маркеры мебели имеют видимые объекты, эти объекты будут отображаться в игре. Например, помещение в нашем примере маркера мебели - кресла, поместит в игровой мир и само кресло, поэтому вы должны планировать "нужность" этого предмета. Белые маркеры и фигуры синего цвета не отображаются в игре, а помогают выстраивать линию поведения персонажей.

Настройка sandbox нуждается в простом размещении этих маркеров по помещению. Когда рейдеры будут бродить, в радиусе 512 единиц от их места размещения они будут взаимодействовать с каждым подходящим объектом. На рис. 4с показан пример комнаты предбанника, в которой находится два рейдера и вышеупомянутые маркеры мебели.

 


Рис. 4а: Размещение маркеров мебели в редакторе

Рис. 4b: Пример маркера мебели

Рис. 4с: Убежище 74 с помещенными маркерами мебели

 

NPC будут взаимодействовать и с маркерами Idle в области, которая содержит sandbox.Правило то же самое - радиус поиска объектов взаимодействия составляет 512 единиц.

В следующем упражнении речь пойдет о наполнении Убежища 74 не живыми типами элементов, а именно: ловушками, запертыми дверьми и турелями.

Назад | Далее

Мне нравится    17