Я уже почти год пишу игрушку. Только что глянул 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 и игрока. И так мы можем скорректировать исходный набор геймплея по квестам:

  • игрок может получить квест на выполнение