Привет, друзья!
Сегодня мы хотели бы раскрыть еще одну сложную тему, которая существенно оживляет мир Exoplanet — распорядок дня NPC.
Добавить персонажам ежедневные занятия нас вдохновила Готика — эта игра одной из первых создала мир, в котором у многих персонажей есть мелкие ежедневные задачи. Эти задачи соответствуют роду деятельности NPC на Эдже — стражник охраняет, патруль обходит территорию, а торговцы копаются в хламе. На первый взгляд кажется, что все просто. Но на самом деле, в проработке ежедневных занятий есть множество нюансов, о которых мы поговорим далее.
Прежде чем прийти к пониманию, что требуется разработать отдельную подсистему, которая будет отвечать за распорядок дня NPC, мы использовали квестовую логику. Однако этот подход доставлял много проблем — приходилось вручную учитывать, жив персонаж или нет, находится ли он в бою, не отправился ли в другую точку для участия в более приоритетном квесте.
Чтобы избежать множества ошибок и лишних действий, было решено разрабатывать распорядки дня внутри системы нашего искусственного интеллекта — дерева поведения NPC. Это часть ИИ, отвечающая за принятие решений. Ее логика выполняется несколько раз в секунду, постоянно решая, по какой ветке пустить действия NPC. По результатам проверки для них создаются запросы, которые выполняет другая часть ИИ.
Что дает использование дерева поведения?
- удобную среду для разработки распорядков
Мы разработали этот инструмент специально внутри редактора Сахары, нашего игрового движка, чтобы он имел доступ ему доступ ко всем игровым данным, что в свою очередь упростило многие аспекты контроля ежедневной рутины. Теперь можно быстро, легко и удобно задать временной промежуток для того или иного действия, вписать сами действия, задать им приоритет и определить правила воспроизведения. Таким образом, сначала проверяется время суток в игре, а потом соответственно ему персонаж начинает выполнять назначенное действие. Например, утром абори могут разбирать металлолом, днем разговаривать, ночью — спать.
- упрощение проверок состояния NPC
За счет единой системы проверять состояние персонажей стало значительно проще, а количество неучтенных ситуаций и багов в игре значительно сократилось.Также стало существенно проще справляться с ситуациями, в которых занятия NPC по той или иной причине прервались — благодаря новой системе, персонаж просто начнет выполнять свою задачу сначала. При этом, выполняемая задача не является зацикленной цепочкой действий — для каждого времени суток есть своя ветка. Следовательно, даже если рутина прервется, погружение в игру не нарушится — поведение персонажа всегда будет соответствовать времени суток.
- автоматическую приоритезацию:
Для регулярных задач автоматически назначается самый низкий приоритет — сначала система проверяет множество аспектов — например, жив ли персонаж, не задействован ли в квесте и не занят ли разговором с Джеком, и только потом отправляет его выполнять задание.
К слову, в назначении ежедневных задач тоже есть свои правила и своя система. Практически для каждого персонажа планируется 2-4 варианта действий, зависящих от его рода деятельности и привычек, соответствующих его профессии. У некоторых персонажей есть хобби — например, выращивать растения. А по поведению других можно догадаться об их темном прошлом. Так Отшельник дрожит во сне, видя кошмары о прошлом.
Какие виды задач существуют в игре?
Нам хотелось создать несколько ярких персонажей, у которых были бы сложные, разнообразные и интересные задачи. Выбирая их, мы руководствовались их историей, особенностями и тем, когда именно их встречает Джек. Вот несколько интересных примеров:
Расти Нейлз — первый NPC, которого встречает Джек, и именно с него начинается знакомство с расой абори. Поэтому мы добавили этому персонажу как можно больше деталей. Расти копается в мусоре, выискивая ценности, пытается разбить сейф, заявляя, что его механизм слишком сложен, чтобы его взламывать, а на ночь уходит спать.
Гарри — владелец разорившейся шахты и сломанного ховербайка. Он обходит городок Лаки Хоул, разговаривает с торговцем Вагой, а еще может напиться и буянить. Иногда чтобы его найти, приходится хорошенько побегать по городку. Кстати, в логике распорядка дня Гарри учитывается, прошел ли Джек квест Fixing Garry’s Old Hoverbike — в этом случае гараж с ховербайком оказывается открыт, а Гарри периодически заходит внутрь и копается в механизмах.
Безумный шахтер-абори — один из самых загадочных персонажей. Присмотревшись к его действиям, можно увидеть, например, как он грозит кулаком старым плакатам охотников за головами. С этим персонажем связана интересная история — к нашему удивлению, недавно безумный абори начал выполнять задачи, которых перед ним никто не ставил! С плакатов преступников он самостоятельно переключился на группу абори-ренегатов и сначала погибал, пытаясь их раздразнить, а потом научился спасаться бегством. А недавно он начал злить и пасущегося рядом с заброшенной шахтой кабарога! Мы пока что так и не нашли причину, решив, что это очередная загадка К’Тарсиса.
Поведение обычных NPC
Обычные обитатели мира получают простые задачи, соответствующие их роду деятельности. Впрочем, этот стражник не только охраняет ворота — он еще и ухаживает за дынями. Интересно, что будет, если Джек покусится на его урожай?
Незнакомец всегда выполняет одно и то же действие. После появления этого персонажа в игре, его можно найти сидящим над обрывом. Впрочем, у него есть своя цель — иначе зачем бы он так зазывал Джека посидеть вместе?
Поведение животных
Сейчас животные просто ходят вокруг точек появления, но в будущем планируем добавить задачи и для них.
У нас впереди еще много работы по назначению персонажам рутинных задач, и как обычно, нам очень важен ваш фидбек. Пишите, что вы думаете о рутине персонажей, в комментариях, а также обязательно заглядывайте в наш Дискорд, чтобы задать вопрос, поделиться впечатлениями или узнать из девблога, что планируется в ближайшем обновлении!