Технічний огляд НІП
ДЕ МИ ЗАРАЗ
На даний момент фреймворк НІП підтримує широкий спектр поведінок у кількох системах, усі з яких налаштовуються за допомогою керованих даними ресурсів. Вам не потрібно знати жодних мов програмування, щоб мати змогу їх налаштувати — навіть наші найскладніші НІП майже повністю керуються даними.Ми досягаємо цього за допомогою кількох різних систем, пов'язаних з поведінкою, але дві з них, які ми розглянемо в цьому пості, це "Ролі" (серце наших НІП) та "Оцінювач бойових дій".
ДОКУМЕНТАЦІЯ ТА НАВЧАЛЬНИЙ ПОСІБНИК
Якщо ви хочете дізнатися більше про НІП, наші друзі з hytalemodding вже мають багато чудової документації, і ми також надали згенеровану документацію для НІП, а також письмовий навчальний посібник.
Разом з цим навчальним посібником ми зробили відеосерію з 6 частин, де ми детальніше розглядаємо деякі її частини; для найкращого досвіду використовуйте обидва:- Посібник НІП Частина 1
- Посібник НІП Частина 2
- Посібник НІП Частина 3
- Посібник НІП Частина 4
- Посібник НІП Частина 5
- Посібник НІП Частина 6
РОЛІ
Кожен НІП має роль. Це вираз їхньої загальної поведінки та того, як вони реагуватимуть на різні стимули у світі. Зміна всього набору поведінки НІП настільки проста, як зміна його ролі, і ми надаємо кілька шаблонів з налаштовуваними значеннями, які можна застосувати, щоб зробити створення нових НІП швидким та ефективним.
На додаток до самої поведінки, роль також диктує такі аспекти, як те, як НІП рухатиметься, які предмети він носить, як він виглядає тощо.
З технічного боку ця поведінка представлена концепцією, яку ми називаємо "списками інструкцій". Це не надто далеко від дерев рішень або дерев поведінки, але з деякою спрощеною семантикою. Кожна інструкція складається з "сенсора" — елемента, який запитує стан гри, щоб вирішити, чи може бути виконана ця інструкція, — а також дій або рухів, які НІП повинен виконати, якщо ця інструкція вибрана. Альтернативно, дії та рухи можуть бути замінені вкладеним списком інструкцій, що призводить до більш складної конструкції поведінок.
Якщо ви знайомі з деревами поведінки, ви можете задатися питанням, де насправді полягають відмінності — сенсори дещо аналогічні декораторам, і це все ще деревоподібна структура. Ключ полягає в семантиці, яку ми використовуємо для обходу наших списків інструкцій. Там, де дерева поведінки можуть слідувати різній семантиці залежно від типу вузла, ми завжди слідуємо семантиці вузла резервного селектора. Кожна інструкція оцінюється по порядку і — якщо збігається — виконується. Якщо тільки в інструкції не включені спеціальні прапорці, ми не будемо оцінювати жодні подальші інструкції в списку. Це гарантує, що потік логіки всередині НІП легко відстежити, незалежно від того, наскільки великими чи глибокими стають дерева.
Хоча всі окремі типи елементів (сенсори, дії, рухи тощо) написані на Java, списки інструкцій повністю конструюються в JSON. На цьому етапі ми маємо понад 150 різних типів елементів, які можна комбінувати для створення поведінок, та фреймворк, який полегшує модерам додавання більшої кількості за допомогою Java. Не всі вони в завершеному стані, але ми активно працюємо над їх ітерацією та додаванням стільки нових, скільки зможемо!
По суті, ми розробили наш фреймворк НІП для взаємодії на кількох різних рівнях. Незалежно від того, чи ви абсолютно новачок у моддингу та дизайні НІП, чи досвідчений ветеран, здатний створювати складні поведінки, ми хочемо переконатися, що є способи для всіх втілити свої творіння в життя.
Ось приклад зміни ролі вівці з поведінки худоби, увімкненої Template_Animal_Neutral, на агресивну з допомогою Template_Predator.


ОЦІНЮВАЧ БОЙОВИХ ДІЙ

Хоча списки інструкцій вже надають дизайнерам велику гнучкість для налаштування своїх НІП та реалізації бойових поведінок, створення персонажа, який робить більше, ніж кілька базових атак, і повинен приймати певні рішення про те, коли використовувати певні атаки, швидко стає громіздким.
Оцінювач бойових дій існує для задоволення цих потреб, пропонуючи супутній фреймворк до центральної поведінки НІП, який може приймати розумні миттєві рішення про його стан, стан навколишнього світу та його ворогів або союзників. Кожній можливій атаці (або іншій бойовій дії) призначається набір умов, які визначають найкращий час для її використання — коли HP низьке; коли ворог близько; коли гравець намагається підкрастися ззаду. Ці умови потім оцінюються, і кожна дія зважується відносно інших, щоб визначити курс дій, який НІП хоче виконати.
Прийняття рішень таким чином вносить рівень "нечіткості" в НІП і призводить до більш цікавих бойових зіткнень з менш багатослівними конфігураціями. Недоліком є те, що крива навчання крутіша, і НІП можуть не завжди діяти так, як ви очікуєте! Це також не настільки продуктивно, але це те, що ми сподіваємося покращити з подальшою ітерацією.
Наприклад, скелет-преторіанець може вирішувати між використанням різних здібностей з певним ступенем інтелекту: блокування, виклик при низькому здоров'ї та атака з розгону, поряд з базовими атаками.
Нижче наведено фрагмент, який показує частину конфігурації для умови здібності виклику:

ПЕРЕВІРКА РЕАЛЬНІСТЮ
Все це звучить досить далеко просунуто, чи не так? Можливо, ви навіть могли б повірити, що це готове до випуску?
Ну... ні. Все ще є дуже багато грубих країв, відсутніх функцій та областей, які потребують величезних покращень. Так само, як ми говорили про те, що системи можуть робити, важливо, щоб ми поговорили про деякі з основних областей, де ми ще не зовсім там.
З великою силою приходить... потреба у чудових інструментах. Ми дуже далекі від мети тут. Є плани для візуального редагування та налагодження, але зараз більшість конфігурації НІП робиться безпосередньо у файлах JSON за допомогою текстових редакторів. Це працює, але болісно, і хоча ми надаємо різноманітні шляхи для налагодження НІП, коли вони не працюють, як очікується, жоден з них не інтуїтивний, і більшість вимагають читання сторінок і сторінок детальних файлів журналів.
Ми згадували криву навчання, пов'язану з оцінювачем бойових дій, але це стосується майже всього, коли йдеться про роботу з НІП. Ми бачимо легший та плавніший процес входження в моддинг НІП, але на цьому етапі ми можемо запропонувати лише обмежену кількість шаблонів як приклади разом з документацією про доступні елементи та прості навчальні посібники.
Також є безліч великих відсутніх функцій. НІП не дуже добре позиціонують себе в бою; вони не використовують належне уникнення або зграювання; хоча літаючі НІП можуть приземлятися та злітати, плаваючі НІП не можуть покинути воду і навпаки. Немає кінця списку функцій, які нам все ще потрібно додати, щоб мати змогу випустити гру, яку ми уявляємо.
Природно, потенціал для проблем з продуктивністю великий. Ми можемо підтримувати відносно велику кількість НІП, але є багато роботи, яку потрібно зробити, щоб зробити їх більш продуктивними, особливо коли йдеться про пошук шляху. Ми тримаємо пошуковик шляху вимкненим, наскільки можемо, інакше продуктивність, швидше за все, впаде!
А потім є весь технічний борг, який потрібно вирішити, від того, що НІП не можуть навмисно ламати блоки за межами вибухів на основі снарядів через певні обмеження систем, не пов'язаних з НІП, які потрібно переглянути (хоча вони можуть їх розміщувати!), до фізики НІП, яка потребує повної переробки, щоб належним чином об'єднати її з системами гравця. Попереду довгий шлях, щоб привести речі в належну форму — і ми навіть не говорили про появу!БАГИ, БАГИ СКРІЗЬ
Багато членів спільноти вказували на безліч багів, які з'явилися у випущених кадрах геймплею. З нашим поточним темпом розробки багато з цих кадрів вже застарілі, і найкритичніші з цих багів вже виправлені! Однак я дійсно хочу витратити трохи часу, щоб поговорити трохи більше про пошук шляху, його виклики та те, що це, ймовірно, означатиме для випуску.
Пошук шляху — це велика та складна тема — достатньо складна, щоб багато звичайних ігор мали з цим проблеми. Коли ви додаєте процедурний повністю модифікований блоковий світ до суміші, це стає ще складнішим, оскільки ми більше не можемо покладатися на багато хитрощів, які використовують ігри для оптимізації продуктивності навколо відомої місцевості.
Це означає, що наш пошук шляху наразі повільний. Не настільки повільний, щоб це спричиняло будь-які помітні проблеми з продуктивністю, але достатньо повільний, щоб ми наразі не дозволяємо всім НІП використовувати його весь час і накладаємо суворі обмеження на його поточні можливості. Ось чому, наприклад, печерні раптори не перестрибують через прогалини, щоб переслідувати гравця. Ми не можемо попередньо заповнити світ "точками стрибка", оскільки світ може змінитися в будь-який момент, і кожен блок додаткової відстані, через яку НІП може перестрибнути прогалину, є великою додатковою вартістю для кожного пошуку.
Ми не очікуємо, що це зміниться до випуску раннього доступу, але ми віддані покращенню нашого пошуку шляху в цілому і вже почали роботу над розробкою нового методу, який міг би вирішити більшість цих проблем, якщо він виявиться життєздатним.ТО ЩО ДАЛІ?
Інструменти високо в нашому списку пріоритетів. Якщо ми хочемо належним чином підтримувати модерів, нам потрібно надати їм інструменти, необхідні для того, щоб створення НІП було веселим! Спочатку це не включатиме повний набір інструментів для налагодження, але ми зберемо те, що зможемо.
Нам також потрібно вирішити проблеми з пошуком шляху та рухом, водночас справляючись з технічним боргом, щоб переконатися, що ми не створюємо вузькі місця продуктивності, коли гравці стикаються з кількома НІП в складних середовищах. Тут є багато чого, що ми можемо покращити, щоб переконатися, що бій відчувається приємним, навіть на цьому ранньому етапі.
Додавання більшої кількості шаблонів також допоможе трохи більше оживити світ, з унікальними поведінками, що вносять життя в культури багатьох різних видів Орбіса. Вони також призначені для надання додаткового натхнення та прикладів для модерів, які прагнуть створювати власних більш складних НІП — або можуть бути використані безпосередньо, якщо поведінка підходить!
Все це веде до потенціалу створення справжніх босів — зіткнень, які доведуть усі наші PvE-системи до абсолютних меж. Потрібно багато роботи, щоб досягти цієї точки — набагато більше, ніж було перераховано тут, — але ми викладаємо це крок за кроком і працюємо над цим. З трохи більше часу ми змусимо все це працювати!ПЕРЕВАГА: КОМАНДИ НАЛАГОДЖЕННЯ
Цей пост спочатку був написаний для публікації перед нашим випуском раннього доступу. З того часу ми доклали чимало зусиль, щоб зробити НІП більш доступними для модерів. Хоча у нас ще немає візуального редактора або глибокого налагодження, ми додали кілька різних візуалізацій, щоб полегшити розуміння того, як функціонуватимуть ваші НІП (і відстежили кілька багів з нашого боку через їх використання теж!). Деякі з цих функцій все ще в розробці, але ось невеликий погляд на нашу роботу в процесі та те, що незабаром з'явиться в майбутніх випусках.
Кожну з цих візуалізацій можна ввімкнути, переключивши певні прапорці налагодження НІП на окремих НІП. Це робиться за допомогою команди налагодження НІП, тримаючи НІП у полі зору. Ви можете зробити це, ввівши /npc debug set <прапорець> в консолі чату в грі або додавши прапорці як список, розділений комами, у властивості Debug самої ролі НІП. Виконання команди /npc debug presets надає повний список доступних прапорців та попередньо встановлених наборів прапорців, які можна використовувати, але найкорисніші прапорці візуалізації детально описані нижче.
/npc debug set VisAiming

/npc debug set VisMarkedTargets

/npc debug set VisSensorRanges


На першому скріншоті ведмідь спить і має лише один активний сенсор. На другому скріншоті ведмідь має слух, зір та абсолютний діапазон виявлення. Незважаючи на те, що вівці виявлені радіусом зору (у них є позначки цілі), вони знаходяться поза конусом огляду. Сім'я овець все ще в безпеці!
/npc debug set VisLeashPosition

/npc debug set VisFlock
