Guerilla. Fast to Quest AI
Я уже почти год пишу игрушку. Только что глянул initial commit - Конец марта. Все начиналось с каких-то глупостей, и дошло до простого крафта (осталось в JSON намасить рецепты), элементарного AI сделанного через FSM, и базовой стрельбы.
Сейчас я хочу добиться более амбициозной цели и сделать главную фичу игры.
Что не так с играми?
Я ни в коей мере не хочу обидить разработчиков, геймдизайнеров или дать какую-то критику: я не опытный в плане геймдева, да и играю же и в те и в те игры. Просто для ясности следующего параграфа.
Идея в целом проста: убрать сюжет, сайд-квесты, сюжетные квесты и вообще линейность, которая так опостылела, сколько к ней бранчей не прикручивай - это не то, в что хочется поиграть. В тоже время, песчницы уже глубоко в горле застряли. Нет, не подумайте, оба типажа игр классные, но они как-то перегибают палку в одну сторону: вот сюжет, но от него не отойти (не надо иллюзий что можно
- это все предусмотренно было) или вот широкий, генерируемый мир/вселенная, но без сюжета совсем.
В некоторых песочках есть какие-то зачатки его, но это больше для галочки, как мне кажется.
Но больше всего во всех играх бесит какая-то предсказуемость происходящего. С сюжетными играми думаю вопросов нет, есть сюжет и всем все четко описано. Пока не пройдете обучение - дальше дорога закрыта. Всегда какое-то ограничение.
У песочниц этого сильно меньше, не потом что там все генерируется, а потому что сюжета нет. Там нет это проблемы совсем. Точнее, проблема то остается - песочница это просто набор геймплейных фич, без сюжета.
Живой мир. Закон сохранения энергии
Идея в целом проста - это найти ту самую середину между линейными играми и песочницой, не прибегая к простому генератору сайд-квестов. Рассмотрим на примере обычных сюжетных игр, какие квесты есть и какую роль они выполняют.
- Сюжетные квесты - продвигают нас все дальше и дальше по сюжетной линии, которая вшита в игру.
- Сайд квесты - добавляют в игру рутины, которой можно позаниматься когда сюжетная линия надоела или ее сложно пройти сейчас. В большинстве своем это просто greeding, т.е. сбор ресурсов/убийство чего-то вечного за вознаграждение. В таких квестах крайне важно вознаграждение, чтобы чем-то мотивировать игрока выполнять их.
Здесь главный элемент это вознаграждение. Оно необходимо, иначе выполнять квест не будет интересно. Сюжетные квесты может тут дать слабину в плане размера вознаграждения, т.к. продвижение по сюжету является главной наградой таких квестов.
Я хочу акцентировать внимание на том, что мы опять же имеет 2 разных механики, которые имеют, как мне кажется, недостатки:
- сюжетные квесты четко регламентированны, пока их не начать выполнять, продвижения по сюжету не будет и мир не изменится.
- сайд квесты не влияют на мир вовсе. Вот попросил меня NPC собрать камней тонну, я принес, получил экспу и немного лута может быть. Что ты с этими камнями делаешь, непись? Просто выкидываешь? Зачем я их собирал тебе?
В концепции живого мира, квесты напрямую влияют на мир, все что было собрано и убито - не пропадет даром. Все квесты преследуют главную цель - продвижение к подебе. Если NPC попросил меня собрать камней, то он “может объяснить” зачем они ему. И я должен увидеть результат: например после выполнения квеста - он пойдет строить крепость, костер или что-то делать; суть использовать то, что я для него сделал. Мир изменяется, потому что есть закон сохранения энергии.
Ресурсы не должны исчезать, NPC не должны быть коллекционерами ресурсов. Энергия мира должна сохраняться, все что происходит имеет причину и следствие.
Такой подход должен создать вовлеченность и добавить игроку большего влияния на то, как развивается мир или его фракция.
И так, мы пришли к такой механике:
- игрок может взять квест на выполнение
- выполненный квест приводит к тому, что NPC (давший квест) выполняет какое-то действие, используя результаты выполненого квеста
- у квеста в большинстве случаев отсутствует награда
Глобальные цели. AI
Чтобы это все было более осмысленным (а не простым “непись запросил палок, сделал костер” и повторить до бесконечности), нужно иметь какую-то высокоуровневую цель, которую должен преследовать NPC. Игрок тоже, но только как исполнитель.
Главная цель, которую преследует NPC. От этой цели Выстраиваются квесты и действия NPC. У NPC должен быть смысл существования. Как же представить “смысл жизни” NPC? И в каком контексте?
Одного наличия не достаточно, нужны способы его достижения. Способы зависят от ситуации в мире, личных предпочтений NPC, его возможностей.
И так, у нас есть цель и мы знаем пути ее достижения. Что еще нужно, так это счетчик прогресса - двигается ли NPC к своей цели, какие действия его приближают к ним, а какие нет.
И так, теперь у нас более менее сложилась картина целеполагания для NPC и того, что она из себя преставляет:
- Цель это желаемый набор показателей
- Если значение показателей не соответствует цели, мы выбираем необходимые действия чтобы их продвинуть к целевым и производим такие действия
- После выполнения действий, мы анализируем изменение показателей. Если применяемое действие отодвинуло нас от цели - понижаем его приоритет для последующего выполнения
Конечный исполнитель (солдат) получает цель от своего командира, а так же имеет свою личную цель - выжить. Выжить это когда у вас мало ХП - сбегать, прятаться. Откуда берут цели командиры? От генерала. А у генерала цель проста - победить врага.
Чтобы механику генерала упростить, можно сделать ему представление всей карты мира как набора секторов - клеток - в каждом из которых есть значение силы его войск и вражеский. Таким образом, задача генерала сводится к оптимизации значений силы: если в секторе А1 сила противника 7, то нужно сделать в нем нашу силу 8, а не 100500. А еще может быть случай, когда мы не знаем силу противника в секторе и тут нужно организовать разведку. Тогда нужно послать немного войск для этого.
И так, генерал устанавливает параметр силы в секторе. Это можно представить, как приказ командиру отправиться в сектор А1 для оказания подкрепления или разведки.
Командир получает приказ перемещение в указанный сектор с типом цели: помощь войскам или разведка. В первом случае, командир будет организовывать лагерь, устанавливать контакт с текущим отрядом армии, искать врага и организовывать саботажи. В целом, задача командира - управлять, как и у генерала, но командир это первый NPC, который создает квесты в отношении цели.
Создаваемые квесты командиром, выглядят больше не как доступная задача, а как команда, чтобы это было ближе к реальности, а так же чтобы не решать проблемы с менеджментом задач: единственный диспетчер задач это проще чем десяток потребителей, которые между собой соревнуются и выстраиваются в очередь.
Командир должен давать достаточно простые задачи:
- разведать направление
- собрать ресурсы
- построить здание
Эти задания - это квесты для конечных NPC и игрока. И так мы можем скорректировать исходный набор геймплея по квестам:
- игрок может получить квест на выполнение