Я хотел сделать какое-то мини-вступление, связанное с темой статьи, но так и не сделал и не стану этого делать. Неважно. Что же теперь: если у меня нет времени написать хорошее вступление, мне не публиковать эту статью? Давайте как-нибудь обойдемся без лишних слов и перейдем сразу к делу.

Некоторые из вас, возможно, читали мою предыдущую статью на тему эвристической архитектуры ИИ в видеоиграх, которую я создавал для решения конкретных задач в конкретном проекте, но затем определил ее как интересный структурный паттерн, обладающий гораздо более широким потенциалом, чем я изначально предполагал. В этой статье я немного углублюсь в эту тему, но при этом продолжу рассказ о том, как я создал новую, чистую и развитую архитектуру. Я не могу позиционировать свой код как идеальный, но все же я сумел повысить производительность работ, на выполнение которых раньше требовалось гораздо больше времени и сил.



Системы


В примере с «прятками в комнате», который я приводил в предыдущей статье, я говорил, что мысль о том, что я использовал достаточно простой и распространенный паттерн, присутствующий во многих Комплексных Системах для получения результата, который мы воспринимаем как «сложное поведение», пришла ко мне намного позже, а именно после изучения деталей первоначального концепта.

Достаточно хорошее вводное видео на тему Комплексных Систем – это видео под названием «Ants, Bees and Brains» («Муравьи, пчелы и мозги»), созданное Бристольским университетом. Его можно найти в YouTube, оно находится в открытом доступе.

Итак, сейчас под словом Система – именно так, с прописной буквы – я буду подразумевать Комплексную Систему в качестве Виртуальности (механику, моделирование того, как функционирует Реальность или представление Реальности в функциях) в Видеоигре (моделирование/программное обеспечение или Встроенная система). А под словом Опыт я буду иметь в виду целостный комплекс Виртуальности, Реальности (где существуют Игроки-люди) и Художественного вымысла (эстетика, контекст, сюжет, описание того, как выглядит реальность или представление Реальности в каких-то формах) в полноценной Комплексной Системе, которая будет включать в себя Игрока, Механику, Динамику и Эстетику.

Если я буду писать слово «система» прописными буквами, то в этом случае я буду говорить об «архитектуре», «схеме», «эвристике» или «методе» применительно к созданию, дизайну и программированию.

Итак, начнем. Я сильно урезал свою статью, поэтому время от времени может показаться, что я резко перехожу с одной темы на другую – ну, и черт с этим, если после прочтения вы поймете, что я хотел сказать.

Действия и Реакции


После многократных пересмотров системы (архитектуры), в конце концов, я начал упрощать ее, и, в конечном счете, я сделал ее намного чище (для себя и, надеюсь, для всех остальных). Сейчас я посмотрел на многие вещи с другой стороны, и теперь компоненты системы имеют более практическое и понятное применение, чем раньше.

Основная концепция обновленной версии системы (и паттерна, который в ней используется) – это аксиома «Действия и Реакции» (которая в моей первоначальной реализации эвристического кода называлась «Задачи»). Все в этой системе основано на концепции Действий и Реакций.


«Действия. Реакции. Причина и Следствие» — Матрица «Перезагрузка».

Действия, которые в моей первоначальной версии назывались Задачами, выбираются для исполнения системой Принятия решений на основе анализа их полезности (эта часть не изменилась, но вскоре я перейду к теме Вычислений и Решений). Каждая Задача имеет свои собственные внутренние правила (ключ – модульность) ее функционирования, в ней заложены требования к ситуации и к Агенту в форме Ресурсов, которые требуется выполнить (условия окружающей среды, условия сюжета и структура повествования, физическое тело, интеллектуальный потенциал, знания, оборудования, эмоциональное желание, оборудование/материалы и пр.). Когда система Принятия решений оценивает, какую Задачу нужно выполнять дальше, она обращается к классам Задач для вычисления их приоритета, а затем выбирает комбинацию с самым высоким показателем (она может работать в режиме многозадачности типа «бежать – перезарядить снаряжение – поговорить» или «куда-то залезть – поговорить» как одновременно, так и выполняя одну задачу, тратя на ее выполнение все ресурсы: например, «плыть под водой»).

Работу и приоритетность каждой Задачи обеспечивает модульность и гибкость архитектуры. Каждая новая Задача должна иметь свои собственные параметры и правила, созданные на основе любых системных или произвольных средств, которые указываются гейм-дизайнером. Также задача является неким «сюжетным событием», так как ее можно создавать и форсировать, наделяя более высоким приоритетом, позволяя избегать безвыходных ситуаций, но приводя к ситуациям «на грани жизни и смерти». Такие задачи можно упорядочивать по приоритету или использовать для их сортировки какие-то другие средства – все зависит от фантазии гейм-дизайнера.

Когда вы создаете, например, генератор какого-то мира с функциями, вам потребуется установить какие-то «знаки», которые нарушают скучную схему «повторяющейся случайности», благодаря чему такой мир выглядит более интересным и уникальным. Таким образом, «сюжетные события» являются своеобразными «знаками» в море генерируемых Событий. Здесь я говорю о них как о части системы (и Системы), «сюжетные события» — это даже больше, чем «отрывок сюжета» или «цепь сюжетных Событий». Таким образом, «событие» в «сюжетном событии» не является синонимом События, а является своеобразной «молекулой», построенной из нескольких Событий, в которой атомами являются те самые события. Обращайте внимание на регистр букв при чтении этого абзаца, но в любом случае я объясню эту мысль чуть позже.

Так как вся архитектура началась с той идеи, где Задачи Агентам даются миром, дизайнером, сюжетом и действиями Игрока, у нас не заняло много времени выстроить схему, где каждая Задача раскрывалась в список вытекающих Задач. Естественно, мы предусмотрели разные варианты таких списков в зависимости от того, была ли предыдущая Задача выполнена или нет. Соответственно, для Агентов, выполняющих Задачу, а также для других Агентов, по-разному вовлеченных в ситуацию, каждая такая Задача является Целью, а они в процессе ее достижения являются наблюдателями/свидетелями либо действующими лицами, от чего зависят дальнейшее развитие Событий.

Задачи, которые связаны с результатом их выполнения и раскрываются в следующие Задачи – это то, что в моей обновленной версии системы я называю Реакциями.

Мы практически ничего не меняли в принципе функционирования задач и в коде их реализации (возможно, нам и нужно было бы это сделать для того, чтобы продемонстрировать это новое понимание системы), зато мы изменили трактовку задач в целом за пределами кода, упростив процесс обмена идеями в команде. После всех манипуляций термин «Задача» стал одновременно слишком расплывчатым и слишком жестким (это имеет смысл, если мы говорим об Агентах, но на самом деле, смысла мало в контексте Систем). А вот термин «Реакция» стал нести больше контекстной информации относительно того, какую роль она играет в Системе. При этом такое понятие не ограниченно необходимостью выполнения предлагаемых действий Агентом, а вот термин «Задача» налагал некий оттенок обязательности исполнения.

Действия и Реакции – это одно и то же, разница между ними весьма условна. В их коде отличий никаких нет, зато такие формулировки здорово помогают в проектировании.

Для расчета приоритетности Задачи могут получить доступ к информации об Агенте, об окружающей среде, а также к другим параметрам, имеющим отношение к ситуации, для расчета их важности для конкретного Агента. Эта информация может включать: статус «здоровья» Агента, усталость, настроение, оптимизм или его отсутствие, политические взгляды и прочее – все характеристики Агента и все сведения, которые Система может подсчитать, являются Данными, которые могут включаться в расчеты.

Вот здесь заключается модульность системы: Задачи вполне самодостаточны. Новые Задачи можно создавать без изменения характеристик Агента, а также автономно от других задач, никак не влияя на их выполнение. Но, конечно же, так как каждая задача является одновременно Действием и Реакцией на предыдущее Действие, добавление новой Задачи в Систему повлечет добавление новых цепочек и связей, что создает еще больше интересных ситуаций. С точки зрения проектирования после добавления каждой Задачи необходимо пересматривать список Реакций, к которым приводит каждое Действие.

Вот как система Действий и Реакций работает в связи с Агентами. В качестве метода Вычисления используется система Принятия решений на основе анализа их полезности:


  • Cистема Принятия решений оценивает все задачи и выбирает одну Задачу из списка задач для Агента («to-do list»), используя данные Агента для передачи решения;
  • задание выполнено (Действие);
  • действие создает новую Задачу (возможные Реакции) для Агента, который прямо или косвенно принимает участие в Событии;
  • система Принятия решений каждого Агента оценивает все задачи и выбирает одну Задачу из обновленного списка задач, где появляются новые Задачи (возможные Реакции);
  • затем Действия (Реакции) выполняются, появляются новые Задачи – цикл повторяется.


Проанализируйте сходства этой Системы и Системы, созданной из Клеточных Автоматов. О чем и речь. Каждая Система работает с Условиями и Правилами обновления таких Условий, что очень напоминает принцип работы Клеточных Автоматов в Играх и не только.

От Искусственного Интеллекта к Искусственным Эмоциям


Если вы знакомы с концепцией ИИ для Видеоигр, то вам известно, что ИИ имеет отношение не столько к Вычислительному интеллекту, Компьютерному обучению и некой Магии, а больше связан с «иллюзией», которая присуща всем Видеоиграм.

Нет, это плохое и скучное объяснение.

Я попросил дать пояснения настоящего профессионала в этой сфере Дэйва Марка из Intrinsic Algorithm:

Игровой ИИ – это то, что позволяет проектировщикам проявлять себя через символы – показывая свое видение проекта. Таким образом, лучший ИИ – это тот интеллект, который не ограничивается жестко сценарием, но и не является полностью рандомным. Он является практически автономным, но при этом функционирует в качестве связующего звена

Дэйв Марк

Обратите внимание, что выше я говорил, что «Все, что требуется Системе, должно быть выражено в количественных Данных». То же самое является правдой, если понятие «Система» заменить словом «Игра» или еще лучше «История».

Действие – это суть любой хорошей истории, а герой – это ее сердце. Если у действия нет никаких последствий для героя, история теряет свое сердце

Линда Йезак

Такие компоненты системы, как Личность, Настроение и Взаимоотношения являются самыми интересными для меня группами Данных об Агентах. Если вы снова посмотрите на схему, которую я демонстрировал в предыдущей статье, то в ней вы сможете найти эти группы:



Когда я нарисовал эту схему, данные «Взаимоотношения» были скрыты в компоненте «Личность», но потом я все же решил их разделить.

Задачи будут учитывать эти ключевые компоненты Данных для расчета приоритета таких Задач для Агента. В большинстве случаев это довольно простые вычисления – нужно просто перемножить данные и готово. Ниже я приведу упрощенный пример, в своем собственном коде я использую не совсем такую формулу, но в конце концов все сводится к этому:

Настроение Страха = Вес*Здоровье*Опасность*Эмоциональная_Волатильность*Вес

Вы можете изменять Черты Характера в компоненте Личность так, как того требует ситуация. Например, в нашем проекте «ужастиков» мы используем комбинацию общих Подходов к Чертам Характера, такие как «Большая пятерка» и 16PF (личностный опросник Р.Б. Кеттела). Но помните, что все должно быть просто. Во-первых, потому что это помогает вам проектировать, а во-вторых, чем проще схема расчетов, тем более характерным может быть ваш Персонаж, что помогает Игроку «узнать» его. Кроме того, улучшая точность модели, можно проводить тонкую настройку Личности, что тоже по-своему хорошо.

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

Эти переменные доступны Дизайнеру для определения, какое действие они должны оказывать на Персонажа в каждом конкретном случае. Давайте представим появление Красного Дракона, после все пугаются. Здесь Гейм-дизайнер может настроить значения персонажей и даже что-то изменить в классе Дракона, чтобы обновить параметры на основе других переменных. Точно так же, как вдохновляющий Клерик или Паладин поднимут дух других Персонажей одним своим присутствием.

Таким образом, если Данные Персонажей определяют их Действия, и при этом Данные могут менять их Личность, Настроение и Взаимоотношения, это означает, что Личность, Настроение и Взаимоотношения Персонажей могут влиять на их Эмоции, которые в свою очередь будут определять их поведение (которое является результатом собственных Действий).

Я надеюсь, что я не зря это написал, и все это имеет смысл.

Вот так работает Система и во многих случаях Реальность (но, естественно, не с такими математическими формулами). Таким образом, если так это функционирует в Реальности, то и в Вымысле так должно быть представлено, так как Вымысел является отражением Реальности в Формах. Виртуальность (или Виртуализация), которая означает Виртуальные Системы (холст, где создаются Игры), является отражением Реальности в Формах и в Функциях. Таким образом, если мы сможем смоделировать то, как функционируют какие-то вещи в Реальности, мы сможем их просимулировать и в Вымысле, так как Вымысел выглядит так же, как и Реальность.

Системы, Игры и Истории


Термин «Персонаж», который я здесь использую, имеет два значения. С технической точки зрения это Агент с компонентами Личность, Настроение, Взаимоотношения и Знания. С литературной точки зрения это просто персонаж, человек или герой Истории.

С этого момента я не буду делать никаких различий между этими двумя понятиями при использовании термина «Персонаж» — это Агент Системы и Персонаж Истории, два в одном. Никаких различий.



Я также полагаю, что все такие компоненты являются Системой, а любая последовательность Событий в рамках возможностей этой Системы – это История, а вовлечение Агента, внутреннее или внешнее по отношению к Системе, в События, ведущее к желаемому результату – желаемый путь или События в Системе – это Игра. Если Агент, внешний или внутренний, взаимодействует с Системой разными методами, чтобы увидеть, что произойдет, но при этом не желает достичь конкретного результата, то Система здесь действует в качестве Игрушки. А вот если намерение получить какой-то результат присутствует, то Система выступает уже в качестве Игры. Если предполагаемый Агент не манипулирует и никак не вмешивается, то этот персонаж является не Агентом, а Наблюдателем.



И вот здесь снова появляются клеточные автоматы.

Ключевой здесь момент – это то, что термин «манипуляция» в Игре абсолютно не равен термину «абсолютный контроль». При наличии абсолютного контроля (1.0) нет никаких сил, препятствующих достижению желаемого результата (0.0). В этом случае Игра просто не состоятельна, так как получить какой-то другой результат просто невозможно. То же самое верно в случае наличия только одного возможного результата, либо если по каким-то другим причинам контроль полностью отсутствует (0.0), что переводит внешние элементы в статус Наблюдателей, а не Агентов.

Если у человека есть полный контроль над решениями, диктующими последовательность появления Событий – появления Реакций после каких-то Действий – то этот человек рассказывает Историю, а не играет в Систему. Утверждать, что Система отсутствует, здесь нельзя, так как большинство историй отвечают некоторым Правилам достоверности и согласованности с мирами, о которых они рассказывают. Автор Истории может также соответствовать некоторым Правилам для того, чтобы сделать последовательную, правдоподобную и приемлемую для аудитории Историю.

Рассказ Истории и игра в Игру – это иногда очень похожие действия, несмотря на различия в строгости или мягкости Правил для каждого действия. А вот чтение Истории – это немного другой опыт, состоящий по большей части из сочетания развлечения, любопытства и надежды на результаты Системы в сопровождении с чувством недоверия в отношении того факта, что по-другому и быть не может, так как сам Автор уже установил последовательность Событий и развитие сюжета. Однако Обозреватель может предполагать, что можно было бы изменить для получения других результатов, не обращая внимания, что это в принципе невозможно (ведь автор уже все написал).

По правде говоря, что-то другое могло бы «случиться» (с точки зрения Вымысла), но модель принятия решения уже определила, какие Последствия и Реакции произойдут, уже имели место быть и были определены автором ранее даже при открытости Системы.

Рассмотрим кино. Если бы автор имел различные переменные (Данные) и в мыслях имел представление о другом завершении Истории (желаемый Результат или просто Цель), то, конечно, все могло бы быть и по-другому. Связи между Реальностью (Автор и Аудитория), Виртуальностью (идеи и знания в мыслях Писателя и их интерпретация в мыслях Аудитории) и Вымыслом (цепь происходящих Событий) долгое время работали в одном направлении, что означает, что Вымысел может выйти в Реальность (посредством читающей Аудитории), но Аудитория не может повлиять на Вымысел как-то еще (Реальная аудитория не может изменить Вымысел), или, по крайней мере, не должна. Но когда-нибудь Правила должны меняться. В случае Видеоигр компьютерная Виртуальность может функционировать в качестве мостика между Реальностью (Игроками) и Вымыслом (История), позволяя им изменять историю. В этом самая большая сила Развлекательного Программного обеспечения.

Я оставлю небольшую подсказку: если вы хотите поиграть в одну из самых классных Игр с одной из самых глубоких Систем – напишите историю!

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

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


— Фланнери О’Коннор — Однако управление Событиями – это не единственный способ для того, чтобы повеселиться с Системой. Есть важные действия, которые возможны для внутренних и внешних Агентов, когда речь заходит о Системах: Развлечение и Игра. Помимо различий в познавательной активности и способности влиять на результаты, ключевое различие между Развлечением и Игрой по сравнению с Наблюдением – это то, что в первых двух случаях можно получить различные Результаты.

Если кто-то здесь видел, как я говорю «геймплей или не случившееся», этим самым я подразумеваю, что для того, чтобы «что-то произошло», обязательно требуется наличие возможности, что «этого не произойдет». Это мое личное мнение, которое не обязательно должно совпадать с вашим, но я считаю, что именно оно приводит меня к тем результатам в гейм-проектировании, о которых я рассказываю в этой статье.

Чтобы различать такие виды Событий и возможностей я называю написание Историй (условно предопределенные цепи Событий) термином «Вымысел», игровые и развлекательные Системы – термином «Виртуальность», а нас, реальных людей, которые управляют или взаимодействуют с Виртуальными Системами термином «Реальность».

Это все – слои одного и того же. Если Игра не полностью абстрактна, то в какой-то форме в ней будет наблюдаться связь с Вымыслом. Также, для того, чтобы такой Системе стать Игрой или хотя бы Развлечением, ей требуются Игроки, которые с ней взаимодействуют. Это означает, что Игры не могут существовать без связи с Реальностью.

Результатом всего этого является тот факт, что частью Системы всегда должно быть что-то, над чем Гейм-дизайнер не имеет контроля – то есть слой Реальностью. И это прекрасно, когда вы что-то не можете контролировать, особенно людей. На самом деле, желание контролировать людей само по себе не очень хорошее. Игры непредсказуемы по своей природе, и это не баг, а особенность!

Почему это важно? Во-первых, вы не можете создать Игру только на основе Вымысла, а второе – это то, что Игрок – это Агент, которого вы не можете контролировать, набор предустановленных настроек, которые вы не можете изменить или полностью предсказать, но которые ваша Игра обязательно должна учитывать для успешной работы. В конце концов, Игры без Игрока не бывает.

Будучи Агентом, Игрок также может выполнять Действия и необычно управлять Системой. Эти Действия должны вызывать Реакции. Набор Действий, которые вы даете Игроку, определяет, как именно он/она может управлять результатами своей Системы. А результаты в свою очередь позволяют Игрокам изменять своей Историей.

Другие Агенты, однако, должны контролироваться Гейм-дизайнерами. Мы не говорим о полном контроле, но контролировать Систему, которая управляет Агентом – это Контролировать Агента. И да, как я уже сказал, Агент и Персонаж – это одно и то же.

Я хочу сказать, что контроль над Системой и контроль над Историей – это одно и то же. Агенты контролируют Историю, а мы контролируем Агентов. Очень важная характеристика Игровой Истории – это то, что Игрок может так же контролировать Историю и Персонажей.

Также вы можете добавлять повествование или смешивать жанры. Ваша формула ScaredMood может включать в себя дополнительные переменные из PlotMood, где вы можете установить кривую, которая означает, что чем ближе история к концу, тем больше напуганы и раздражены все ее участники, либо придумать еще какие-то варианты развития сюжета. То же самое работает с расчетом приоритетности Заданий, когда указывается, что одно Действие, скорее всего, случится в первой части, другое – во второй, еще одно – в третьей, и таким образом действия редко повторяются.

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

С другой стороны, Игроки могут управлять Системой, выполняя какие-то Действия, которые, по их мнению, обязательно приведут к достижению желаемых Результатов. Другими словами, они просто играют.

Спасибо, что читаете! Вторая часть статьи будет опубликована в течение недели. Подписывайтесь на наш блог и мы ждем всех вас нас на бета-тестировании VirCities!

Комментарии (0)