Симуляция живущего мира, живые NPC

Давно уже вынашиваю такую идею, периодически продумываю разные концепты. Еще когда занимался картами для WC3 хотел сделать симуляцию, когда каждый NPC в игре — герой, со своими целями и потребностями. NPC бы были такими же героями, как и игрок: фармили бы опыт и предметы, сражались бы с друг другом и т.д. Но если отойти от wc3 — суть концепта такая же — каждый NPC реально «живет» в игре. Это в теории поможет создать «реальный» живой мир, с которым игрок может взаимодействовать.

Нарратив и декорации

Обычно, иллюзия живости мира создается скриптами и сценариями, или просто нарративными вставками. В Готике, например, нпц имели распорядок дня, что перекочевало и в поздние Elder Scrolls. Обычно это просто скрипт: если утро — встать с кровати и идти в точку А. В точке А бить молотком по стене, до вечера. В играх типа rdr2 скрипты сложнее, анимаций больше -, но суть та же. В целом, это подход просто декорации мира. Есть и более простые, вообще не связанные с миром игры декоративные элементы, вроде простого текста, лора, записок и сценок. Распорядок же дня в Готике уже прямо влияет на геймплей.

Этот подход зачастую создает лудонарративный диссонанс. Выбивает из погружения, ломает иллюзию мира. Когда на убийцу драконов, главу гильдии магов в мифриловых доспехах из каждой подворотни прыгает полтора шахтера с розочкой из бутылки пива «Три богатыря» — видишь в них лишь пузырьки с лутом на пару монет. Или, когда я играл в рогуетрейдер (или любую другую аналогичную) — тебе дается на выбор 4 варианта диалога. И все они ведут к одной и той же следующей сцене, неважно что выбирать. Чувствуется вся бессмысленность твоего сознательного выбора, все эти «ветвистые ветки» диалогов — лишь иллюзия выбора, в лучшем случае — переключатель рельс сюжета, или тебе просто покажут чуть другой текст. Для неискушенного игрока или того, кто полностью погружается и строит историю у себя в голове, сознательно закрывая глаза на нестыковки — это работает и дарит удивительный опыт.

Симуляции колоний

Наиболее полные симуляции в играх по типу «симулятор колонии» ака Dwarf Fortress (и иже). «Пешки» — напрямую неподконтрольные игроку нпц имеют не только свой распорядок дня, но и потребности (привет симс) и персональные особенности. Но интеллект всё же у пешек общий, этакий «большой брат», который распределяет задачи и выдает команды. Обычно симуляция мира ограничивается колонией игрока, а внешние события являются отдельной «декорацией» мира. Но тем не менее, пешки занимаются своими делами, едят/спят/работают и это реально обоснованные влияющие на мир события. Пешка посадил грибы, эти грибы варят, едят, шьют одежду.

Можно разделить действия нпц на две категории: циклические и одиночные. Одиночные задаются игроком (движение, атака), иногда исполнители назначаются автоматически общим планировщиком (строительство). Циклические могут быть априорные (кушац, спать) и опосредованные игроком (рубить, лесопилка). Эти задачи имеют смысл и последствия в игровом мире, и даже влияющими на взаимоотношения между нпц.

55d72353a7797df720431b7a83604cc3.jpg

Песочность

Более детальными и приближенными к реальности являются «симуляторы жизни» — как правило различные математические модели, в т.ч. с размножением. Играми по сути своей не являются, но крайне залипательные. Можно смотреть как формируются виды, эволюцию и т.д. Или, например, как ии учится самостоятельно выполнять задачи. Например,  симуляция эволюции; как ИИ играет в прятки; или моя статья про догонялки на нейросетке; или такое
Такими же по сути являются и различные песочницы, вроде симулятора бога или физики. Но в игре всё таки должен быть некий критерий «успешности». Даже в бесцельных играх вроде симс ее можно оценить (больше дом, денег, изученность мира, дети выросли и пошли в школу).

Речь сейчас не о том, чтобы заменить живым миром прописанные истории и заранее четко запланированный игровой сценарий. Истории и ситуации в сюжетных РПГ, коридорных шутерах, qte и анимированные катсцены — это тоже прекрасно, но это другой опыт. Нет смысла спорить что вкуснее — мороженное или шашлык. Например, живой динамичный мир может быть и в играх типа Crusader Kings и The Guild, где персонажи создают семьи, рождаются, умирают, их отношения влияют на игровой мир — тоже весьма интересный вариант «живущего» игрового мира.

Я думаю многих, как и меня — цепляет идея живущего мира, в котором нпц не скриптовые болванчики, а полноценные участники наряду с игроком, влияющие на развитие игрового мира. Без декораций и условностей, или, хотя бы, с минимальным их вкраплением. Особенно меня цепляет концепт RPG, в которой нпц реально живут своей жизнью и создают уникальные игровые ситуации. Такими байками любят кормить разработчики ААА проектов, вроде уничтоженных лесопилок в скайриме и сказок Мулинье. Но концепт действительно реализуем, вопрос лишь в том, как органично выстроить из этого игровой дизайн и какие правила поведения нужно задать. Пока вижу два основных способа: снизу-вверх и сверху-вниз.

14aab1136f34a92bdfbf6b6b11975762.jpg

Снизу-вверх

Решение снизу-вверх. Т.е. отталкиваться от базовых элементов поведения нпц. Например, взять за основу базовые потребности: 1. здоровье; 2. пища; 3. размножение. Далее ии решает приоритетную задачу и следующие действия. Есть сложный вариант, по принципу обучение нейросетей и симулятора жизни. Я делал такое, выходит очень сложно. Если простые задачи еще решаемы (дойти до точки по прямой), то более сложные — уже требуют комплексного подхода и сложных сетей, возможно — составных. Тут уже задача на грани создания «сильного ИИ», т.е. ии решающего неограниченный круг задач.
Вариант проще — заранее заготовленные шаблоны действий, триггеров и условий. Например: если здоровье

Если предположить пошаговую игру — нпц вполне может строить своё поведение на прогнозах. Например, применение Minmax алгоритма, как в шахматах. (Не обязательно пошаговую, можно даже «пошаговое» мышление ИИ в рамках реал-тайма.) Т.е. ии «в уме» предполагает различные варианты действий, моделируются результат, считается «успешность» (например, сколько останется здоровья, будет ли враг жив и т.д.) Какое действие будет более выгодным — такое и будет сделано. «Правильным» будет у каждого нпц иметь в голове свою модель мира — он будет знать только то, что должен. Например, если играли в RTS — то юнит будет правильно обегать препятствия даже в тумане войны, ибо алгоритм поиска путей работает по «реальной» карте, а не той, что видит игрок. Такой же принцип и в различных играх, вроде пути движения нпц в рпг, вроде Скайрима (каждый нпц знает кратчайший путь всегда). Но корректнее будет у каждого нпц иметь в голове только то, что он действительно может знать: видел сам или узнал механикой типа общения (причем, собеседник может дать нпц устаревшую информацию или неккоректную, вроде пути пещеры, которую уже завалило).

Этот подход интересен своим «исследовательским» подходом, вроде создания правил и модели и затем, с интересом наблюдать — как будут вести себя нпц. Но, всё же геймдизайнер должен практически досконально знать все возможные игровые ситуации. Нельзя просто взять и сказать «а вот интересно как оно будет». Точнее, можно на этапе разработки геймдизайна, но не после этого. Хотя, в целом и во время разработки можно, в теории, но это осложнит разработку и создание целостной игры. Хотя, я разрабатывал небольшие игры и без какого-либо целостного видения, просто добавляя приколюхи походу. Но если говорить о целостной механике живого мира и живых нпц — ключевые концепты нужно определить заранее, ибо «добавление походу» может вообще в принципе оказаться невозможным.
Поэтому есть принцип «сверху-вниз». Вовсе не обязательно придерживаться исключительно его, можно комбинировать. Но сверху-вниз нужно определить, что всё-таки будет видеть игрок, какие возможны игровые ситуации и их варианты; каким будет игровой опыт игрока и что способна выдать игра вообще.

ecdab5d6f71a62cddd0ff2340d6cd3c4.png

Сверху-вниз

В данном случае нужно задаться вопросом:, а какие вообще ситуации может спровоцировать живой игровой мир? Возьму в качестве опоры сеттинг и модель мира в таком сеттинге. По дефолту — средневековое фэнтези, в котором игрок — один из многочисленных (условных) людей. Допустим, игрок появляется у дороги, по которой конвой ведет заключенного (Ульфрик Буривестник наш король!). Но у дороги нет причины — она появилась благодаря руке дизайнера, как и сам конвой — причин, обусловленных игровой реальностью — нет. Вся история — лишь нарративная. Можно реализовать и упрощенную условную генерацию мира (оторванную от реального игрового процесса) — дорога создалась при генерации мира. Но конвой должен быть обусловлен реальной игровой механикой. Т.е. должна быть реализована игровая механика правовой системы, при которой персонаж (нпц или игрок) может быть взят под стражу и конвоирован. И далее уже более детально, по цепочке: как персонаж становится стражником; как становится преступником; как стражники поймали преступника; куда ведут, зачем и т.д. И все это должно быть детально описано, любое новое понятие — детально раскрыто. «Ведут в город на казнь» — ок, что за город, из чего он состоит, кто в нем живет, что делает и т.д. Если вводить в игру этот элемент (конвой) нарративно, не встраивая игромеханически, то это будет создание «декорации», намного проще, чем связывать этот элемент вплоть до уровня взаимодействия ии нпц и его принятий решений. И всегда можно «оборвать» любую ситуацию до уровня декорации — без причины и/или без следствия. Уничтожить конвой и освободить узника — он убежит, помашет ручкой. Если можно залутать стражу — это уже следствие, действие влияющее на игровой мир (механика предметов). В противовес — в игре тела стражников могут просто исчезать, без последствий, как в большинстве шутеров.

При подходе сверху-вниз таких механик как голод вообще может и не быть. Какие-то условности могут быть пропущены; от некоторых игровых ситуаций можно отказаться или заменить условно-декоративными. В случае живого игромеханически связанного мира — декораций быть не должно, или они должны быть вынесены за пределы игрового мира. Например, в dwarf fortress — это нападение гоблинов. Нет никакой жизни у гоблинов за пределами их появления по триггеру (хоть и связанного с роскошью гномов), т.е. игромеханически у них появления гоблинов нет причин, в отличии от выросшего из семечка дерева. В живом игровом мире же у всех объектов должен быть жизненный цикл; кроме беспричинного изначального появления при генерации. В идеале — весь тот опыт, который воспринимается игроком должен быть частью некоего цикла и их комбинаций; на который сам же игрок может и влиять.
Допустим, нападение на конвой — являлось частью цикла жизни персонажа заключенный и персонажей стражи. Тогда, в любом случае у персонажа должен быть цикл — появление, повторяющиеся условные действия, исчезновение. Простейшее появление — иммиграция (такая в Dwarf Fortress), т.е. появление из ниоткуда. Более сложный вариант — рождение. Это требует сложных механик условного зачатия, взросления и далее по списку. Хотя можно упростить этот момент как в one hour one life. Хотя размножение тоже может стать прекрасной механикой, как например в Crusader Kings, Medieval Dynasty, The Sims. Но если циклы рождения не контролируются исключительно игроком и происходят самостоятельно, без искусственного ограничителя — мир рискует «сломаться» от перенаселения. Простейший способ — «божественной рукой» снижать рождаемость при перенаселении или компенсировать это предзаданными правилами. В идеале, при бездействии игрока мир должен быть способен к некоторому существованию самостоятельно и даже выдерживать бесчинства игрока (вырезал Вайтран — в город переселились из ближайшей деревни).
Или же наоборот — при бездействии игрока мир сгинет. Такой вариант тоже возможен.

Общение нпц между собой

fd6c734cdc5cb7551510248bbdee5cbc.jpeg

Так же интересна возможность нпц общаться между собой. Причем, я говорю о реальном общении — передаче информации, возможности договариваться и прочем. Как правило, в играх общаться может только игрок — узнавать новое и давать команды. Но если у нпц своя модель мира в голове, которая влияет на его поведение — общение необходимо. Основы для механики можно взять из модели реального мира. Например, груминг (делать добро из благодарности); кредитная система (доверие, обещания, долг); Дилемма Заключенного (обман и злоупотребление доверием). Или же упростить до уровня бартера «я тебе ты мне», со счетчиком «кредита». Спросил дорогу — минус 100. Нет кредита — пнх. Дал золотой — плюс 100. Построение фраз как от игрока так и от нпц из базовых команд, собирающиеся в предложение. Например: дай/возьми (предмет). Для стражника конвоира — отпусти заключенного. В данном случае, команды для общения и их вариативность сильно зависит от возможностей действий персонажей, реализованных механик.

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

Мультиплеер

Можно сказать, что подобные игро-миры уже существуют. One hour one life; Eve Online; — примеры таких миров, где игроки «живут» в мире по общим для всех правилам и влияют на мир напрямую, механики связанны. Но в сетевых играх — один игрок далеко не центр вселенной и видит лишь часть, а его влияние на мир сильно ограниченно. В то время, как в одиночной игре — игрок пуп вселенной и воочию лицезреет, как его действия меняют мир координально. В случае живого мира, связанного игромеханически — мир сможет предоставить кучу уникальных ситуаций; за таким миром интересно наблюдать, изучая детали этого мира и его развития; каждое действие игрока «честно» отражается на самом игровом мире. Продумать и связать игромеханически в лаконичную систему может быть очень не просто, но — возможно.

Ссылки на телеграм канал не добавил, уж простите. Нету.

© Habrahabr.ru