Процедурная диалоговая система Арканума

Давайте в этот раз поговорим о Диалоговой системе в Arcanum: Of Steamworks and Magick - в этой игре Тим Кейн смог реализовать систему процедурного диалога позволяющий отобразить взаимодействие различных социальных классов и рас мира Арканума позволив всего лишь небольшой команде разработчиков наполнить весь мир игры силами всего 14 человек.

Кому это может быть полезно? Всем кто хочет реализовать системы диалогов у себя в игре - реализация возможна как в рамках классических РПГ систем, так и в рамках Визуальных новелл, и в рамках текстовых квестов аля -космичсекие рейнджеры

Процедурная диалоговая система Арканума

Материал собран на основе кучи лекций самого Тима с его канала, а так же изучения самой игры и работ мододелов. Впереди будет душный(душевный) разбор как работает система диалога, и как она организована.

С первого взгляда система диалогов кажется целиком линейной историей написанной ручками, как сегодня поступают во множестве РПГ, но на само деле это не так. И со временем игрок начинает замечать что НПС кажутся гораздо более "живыми", и гораздо более чутко реагируют на игрока и его поведение.

Модульность сборки Диалога

Для этого Тимом Кейном была спроектирована специальная система диалогов в игре - этакий набор динамических скриптов которе собирают воедино из множества файлов под конкретного НПС из заранее написанных и проработанных сценариев и текстовых механик, в зависимости от характеристик самого НПС, персонажа игрока и состояний мира.

Это прекрасный пример системного дизайна позволяющий создавать сложные комплексные системы в РПГ - которые интегрируется в дизайн игр на низком уровне и позволяет поддерживать единый подход ко механикам разговоров НПС на едином уровне за счет высокой реактивности, реакции игрока на действия игрока.

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

(с) Тим Кейн

Система позволяла дизайнерам собирать диалоги НПС с игроком используя, как вручную написанные строчки сценариев, так и совмещать со специальными процедурными операциями (OP коды, они же OPeration command) - вызывающими активацию и разворачивание соответствующего дерева (SubTree) на основании заранее прописанного алгоритма.

Процедурная диалоговая система Арканума

Внутри текста диалога для активации кода Дизайнер писал команду, в строчку нужную команду например:

  • K:
  • U: 12
  • B:
  • M:100

Например, почти у всех НПС в мире было два неуникальных OP кода которые использовались всегда и везде. Это "Приветствие/greetings" и "Деньги/Money"

Что из себя представляла OP - команда?

Это запись внутри фала диалога, в виде специального кода, который считывался движком игры. В целях удобства Тим использовал буквально команды из комбинации 1-3х заглавных букв и двоеточия, и опционального набора параметров по которым можно было уточнить настройку команды.

В частности команда Деньги выглядела в тексте диалога в виде записи -> "M:100", где 100 - это параметр определяющий сумму денег, который запросил НПС.

Для игрока в игре это выглядело следующим образом:

«Извините сэр, не могли бы вы дать мне 100 монет, что бы решить этот вопрос»

или

«Гони сюда 100 монет, и тогда все порешаем!»

Диалог отображался в зависимости от социального класса НПС и их было проработано 11 вариантов, по числу социальных Страт Арканума:

Аристократ, Священник, Волшебник, Технолог, Купец, Городская стража, Горожанин, Крестьянин, Нищий, Вор и Бандит.

Если сумма дизайнером не указывалась, то система использовала значение по умолчанию - и оно равнялось 10 монетам.

И получив оные монеты в запрошенном количестве код возвращал команду с "успехом" и переводил разговор на следующую строчку диалога Активируя переход на следующую строчку диалога, активируя привязанный скрипт или возвращая к предыдущей ветке, предлагая занести всю сумму в следующий раз.

Разнообразие в ответах игрока

При этом OP коды использовались не только у НПС - но и в строчках персонажа игрока, в частности - они позволяли ГГ сказать "спасибо" несколькими вариантами, не повторясь - что давало игре ощущение более высокой комплексности. Разнообразие, которое делало мир запоминающимся. Хотя оно создавалось рандомизацией ответов.

Был вариант OP кода, что бы сказать десятком разных способов слово "ДА" и "НЕТ". Ведь есть множество способов выразить согласие или отрицание.

Процедурная диалоговая система Арканума

Схожую систему использовали и космические рейнджеры - где формально имея всего несколько команд взаимодействия с НПС - из общего банка с ответами подтягивались совершенно разнообразные заготовки под расу и тип корабля.

Особенно много в Аркануме было вариантов прощания: "от пока увидимся" до "забудьте" и "неважно" - который менялся в зависимости от того как долго игрок общался с НПС и в каких отношениях состоит его раса и класc НПС.

Так у игрока были СОТНИ кодов для подбора синонимов к часто используемым выражениям.

Разнообразие в ответах НПС

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

Процедурная диалоговая система Арканума

Дизайнер заранее выбирал номера слухов которые мог раскрывать этот НПС в виде заданного кода, это могло быть перечисление: 1, 2, 5. Или целый диапазон 1-5. Если игрок уже ранее мог слышать слух - то добавлялась проверка "не рассказывай, переходи к следующему". Иногда НПС просил денег за то что он расскажет нечто интересное. То есть одно sub-tree диалога могло содержать в себе другое и так далее.

«Это причина где мы сэкономили значительные деньги и время и получили потрясающие разнообразие!»

(с) Тим Кейн

Система команд позволяла общаться с НПС гораздо глубже чем это позволяют современные РПГ вроде Starfield или Avowed.

Игрок мог с самого начала поговорить с любым НПС о чем угодно, были ОP коды для извинений и поднятия отношения с НРС. Были коды OP - для получения обучения навыку если им обладал персонаж, так у НПС проходило сравнение навыков и если НПС был мастером - то он мог сам обучить игрока за соответствующую цену.

Даже можно было попросить НПС использовать скилл или заклинание для игрока. Дизайнеру нужно было добавить в диалог код ZAP к НПС магического класса!

Потрясающая интерактивность мира! Которую мы потеряли. Не так уж много игр где можно попросить любого НПС помочь персонажам, да так что они могут согласиться.

В частности для создания ощущения живого мира - кодировались даже оскорбления. И NPC и PC использовали одну команду.

В частности Игрок оскорблял NPC на основании его социального положения. А вот NPC оскорблял игрока на основании его расы:

У нас был целый банк с разными вариантами оскорблениями! Мы весело проводили время наполняя его и соревнуясь в токсичности и какие персонажи кого и как могут оскорблять разными способами!

(с) Тим Кейн

И OP коды вытаскивали одну из веток из этого банка или других хранилищ фраз созданные заготовок, коих насчитывалось десятки. И подставляли в нужные места создавая ощущение живого мира.

Но по настоящему сложным был Код активирующий Диалог Приветствия от NPC:

Greetings/ Приветствие

Эти коды Приветствий имели самую большую реактивность с которой Арканум реагировал на игрока. И были одними из самых сложных проверок и имел десяток вариантов раскрытия текста.

Нарративный дизайнер сам решал какие проверки были важны в приветствие и могли указать какие проверки можно пропустить.

В частности дизайнер мог указать - у НПС особые условия на которые обращал внимание НПС при выполнении данной проверки НПС не использовал стандартный код приветствия и использовал альтернативный банк диалога.

Но как выглядела стандартная проверка НПС Приветствия ?

  • Проверка №1 - а жив ли наш НПС.
    Да-да, в Аркануме вы могли говорить с мертвыми.

    Если конечно если дизайнер не отменит эту проверку, то тогда это приводило к примерному диалогу: «Я уже мертв и не знаю почему! Почему ты причинил мне боль и почему ты заставляешь меня страдать вернув в этот мир?!»

    Мертвые НПС в рамках лора арканум если их вернуть к не-жизни, а не воскресить находятся в агонии.
  • Следом шла проверка №2 спутников игрока. Игра проверяла их на наличие среди них: Нежити, Монстров и Иллюзий.
    Так если ваш собеседник чародей - то он мог дать саркастичный комментарий по этому поводу:
    "Я научился вызывать этих элементалей еще в детстве"
    "Твои ручные зомби пачкают мой ковер!"

    Но для большинства других классов это вероятно вело к тому что НПС пугался игрока. Дизайнер мог указать НПС закроет диалог, или же продолжит говорить в страхе перед чародеем.

  • После чего игра проверяла №3 самого игрока на наличие заклинаний действующих на него: Невидимость, Тело из камня, огня, полиморф, зеркальную копию или уменьшение.

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

  • Если игрок уменьшился - то рядовые НПС могут сказать "какой милый мальчик" или если есть зеркальная копия "Оу не знал что у вас есть брат близнец/сестра?"

  • Следующий тест проверки №4- это проверка брони персонажа
    Носит ли герой броню с флагом "пугает", "варвар" или пришел к НПС совсем голым. НПС реагировали на это в соответствие со своим классом.
    Реакция могла быть от "мы таких не обслуживаем"(варвар) до "у меня есть отличные штаны для тебя"(голый) и "ааа не убивайте меня!"(пугает)

  • Дальше игра проверяла отношение НПС к Игроку и на основании этого строила дальнейший разговор, состояний было всего несколько: Обожание, Дружелюбность, Вежливость, Нейтралитет, Подозрительность и Неприязнь

  • Если это был первый диалог НПС и Игрока - то активировалось отдельные фразы первого знакомства.

  • Если НПС нечего было сказать - в ходе предыдущих проверок, то игра строила приветствие на основании времени: "добрый день"/ "доброй ночи", "доброе утро" и это делало мир гораздо живым - показывая что НПС живут в этом мире.

  • Если персонаж испытывал неприязнь то он мог проводить диалог приветствия в стиле "Что ты тут забыл?" А если был дружелюбен "Приятно видеть тебя снова!"

Именно эта система синтеза диалогов во многом делала Арканум особенным. Ведь НПС замечали игрока и видели во что он одет или нет, и что с ним происходит. Это позволяло постоянно напоминать игроку о совершенных выборах и что они "ценны" в рамках игры.

Например, торговцы могли смеяться над персонажами, что им не нравятся, но все равно приходят к ним закупаться "О! Это наш известный транжира зашел ко мне в лавку тратить деньги!" Или "ХА! Этот полуорк думает что он человек" и "Откуда у тебя взялись деньги? Ты кого ограбил?!"

Вы могли не замечать, но в зависимости от отношения НПС к игроку менялись и цены в магазине. Тем кто нравится НПС давали скидки, кто вызывал раздражение - завышали ценник.

OP коды для Квестов.

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

Квесты были реализованы в диалоге в виде кода Q:Номер квеста

А статус квеста оценивался в глобальном состоянии мира. При первой встрече - НПС рассказывал о квесте. Затем если видел что Игрок, принял квест, но не выполнил его, спрашивал игрока: «почему ты все еще здесь?!» или «Разве ты не должен сделать для меня кое что?». И когда видел игрока с выполненным результатом - то Квест засчитывался и переходил на финальную стадию.

Все квесты в игре были более сложными и были 7 состояний выполнения:

Неизвестный, Упоминаемый, Принятый, Достигнутый, Завершенный, Завершенный другим игроком для мультиплеера и Проваленный

  • Неизвестный - Игрок еще никогда не слышали об этом квесте
  • Упоминаемый - Игрок слышал о квесте, но не приняли его
  • Принятый - когда Игрок сказал НПС что принимает его, но еще не завершил.
  • Завершенный - когда квест сдан
  • Неудачный - это был флаг который, устанавливался когда что-то не могло быть завершено. Но не критично. Но иногда для игрока возможно было завершить задачу - например вы брались спасти персону и по пути его убивали. Но если вы его воскрешали - то квест такой «окей я снова в деле! Наш НПС снова в мире живых!»
  • Провал был реализован как - флаг, который срабатывал когда квест уже 100% не мог быть завершен. Например, тело погибшего НПС исчезало через пару дней в мире игр.

Как только квест становился выполненным или окончательно проваленным - его состояние не меняется. И запись об этом заносилась в журнал

Все банки с диалогами по квесту хранились в особом месте.

Но давайте поговорим о том что из себя представляли собой эти самые банки диалогов:

Работа с диалогами

Вот перед вами пример открытого диалогового файла в Экселе - чуть ли не основном инструменте для наполнения мира Арканума.

Процедурная диалоговая система Арканума

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

Со слов Тима - они решили не заморачиваться и использовать стандартный Эксель файл для создания диалогов, после чего экспортировали итог в виде простейшего .тхт файла.

В тхт файле не было ничего кроме набора из 7 пар фигурных скобок, внутри которых и находились строки из экселя:

{}{}{}{}{}{}{}

{}{}{}{}{}{}{}

{}{}{}{}{}{}{}...

Если вы взломаете .dat файлы игры, то сможете увидеть как много файлов с суффиксом .dlg лежит по папкам - пусть вас не пугает формат, их спокойно можно открывать через блокнот и увидеть внутри нечто похожее на то что показано выше в фигурных скобках. И что изначально задумали дизайнеры квестов.

Многие модмейкеры даже не парились с экселем и вбивают все диалоги сразу в ТХТ фале.

Каждая строка имеет свое значение. Для упрошенная восприятия сами разработчики в экселе помечали:

  • Синие полоски - это слова для НПС
  • Белые возможные ответы Игрока

Но давайте я вам покажу как какая ячейка несет свое значение, и как их правильно читать.

  • Столбец B - номер строчки диалога, что очень важно что бы игра понимала какие строчки диалога активны
  • Столбец D - Текстовая строка диалога. Именно тут он и находится.
  • Столбец F - Female-поле. Или G-То же самое, когда персонаж игрока - женщина. Так как в "Тройка Геймзм" знали что в некоторых языках есть сильные гендерные отличия. Но в английском это поле часто и пустое. И лишь редко используются вариации текста "boy"/"girl" или "мэм"/"сэр". Забавно что, разработчики Арканума, в отличие от создателей текстовой системы Морровинда - озаботились удобством под локализацию на другие языки, в частности русский.
    Если трочка F пустая, а персонаж женский - то она берет текст из столбца D.
  • Столбец H - Поле проверки игрока на интеллект. В нем указывается минимальное значение интеллекта для выбора варианта ответа. Значение "5" означало что ответ мог выбрать только игрок с интеллектом 5 или выше.
    Так же дизайнер НПС мог указать значение с минусом "-5", и тогда наоборот вариант Ответа мог выбрать игрок с персонажем чей интеллект меньше 5. Что позволяло разработчикам дизайнить вариант прохождения для не очень умных персонажей.

  • Столбец J - это тестовое поле, для проверки может ли игрок увидеть и сказать эту строку потом еще раз. В ней можно увидеть команду, активирующую короткий скрипт.

  • Столбец L - строка ответа указывающая куда должен переходить диалог.

    Ноль так же означал что диалог с НПС закончили. Это линия выхода.

    Если значение в строчке отрицательное - то означало команду перейти к ассоциированному c этим номером скрипту диалогу из банки или активировать набор скриптов на уровне и выполнить его. Но это делалось только если скриптов требовалось так много что они не помешались в следующие поле.

  • Столбец N - поле результата. Это поле куда помешали скрипты в виде простых кодов операций

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

  • Все что идет после P - игнорируется. Туда вносятся заметки и комментарии самого дизайнера для его удобства. Как не трудно понять, в txt/dlg файл эти строчки не попадали.

Как можно видеть в вышеуказанном примере - часть ответов игрока формируется OP кодами, о которых я рассказывал выше.

Процедурная диалоговая система Арканума

Эти коды вызывают срабатывание subtree диалога из внешнего по отношению НПС общего хранилиша диалогов:

  • Операция "B:" - команда вызова бартера.
    По сути Игрок говорит НПС - эй я хочу купить у тебя кое какие предметы. Это открывает скрипт где НПС проверяет отношения с игроком и отвечает на вопрос: "хочет ли он меняться товарами" и если согласен то открывается меню торговли и когда это завершится можно видеть что диалог перейдет к строчке 8

  • Операция "U:12" - Игрок просит НПС применить навык от его имени. Номер 12 означает навык починки. Это привело бы к формированию диалога : «я хочу что бы ты починил что-то для меня» НПС проверяет свое отношение, говорит свою цену - и игрок соглашался или нет.

  • Операция "K:" - задать вопрос о мире игру который зависит от класса НПС, отношения к игроку и состояния мира игры.

Так же мы можем видеть скрипты, которые задаются простыми буквами:

Процедурная диалоговая система Арканума

Они активируют особое поведение у НПС:

  • Скрипт So сокращение от "sread out" ( распределись) - игрок просит НПС отойти и отодвинуться от него.
  • Sx - Stay close - команда подойти поближе

  • Wa - wait here - оставайся здесь. (Но если сказать команду тому кто остается в режиме ожидания - то он наоборот пойдет за игроком)

  • Uw - un wait - продолжить приключения и режим следования за игроком.

  • Lv - leave, это команда означает требование к НПС уйти из команды игрока.

Как можем видеть скриптовые команды подбираются так - что бы их можно было легко и непринужденно запомнить. Это принцип basic order set с помощью которого задается мнемоника, или мнемокод — краткое символьное представление команды. Если вам кажется что вы где-то такое уже видели, то вам не кажется. По этому же принципу были собранны первые языки Ассемблера.

Таких простых команд было порядка 2х десятков для кодов для задания простого поведения НПС. И отдельные номерные глобальные скрипты под своим номером - для особых квестов.

Несколько слов про скрипты и редактирование

А вот для редактирования скриптов игры - Тим создал собственный редактор, который обозвал "Sock monkey" по названию традиционной американской игрушки создаваемой из .. старых носков.

Видно У Тима это была любимая игрушка в детстве...
Видно У Тима это была любимая игрушка в детстве...

«У нас не было бюджета что бы нанять скипетров на готовом коде - а у программистов и без того не было времени что бы на хардкоре писать логику к игре»

(с)Тим Кейн

Так что в качестве решения было принято решение сделать систему которая была бы доступна любому сотруднику, что умеет читать. И которую почти невозможно сломать.

Процедурная диалоговая система Арканума

Система строилась на том что дизайнер мог выбрать простое условие ЕСЛИ ТО, и эффект действия. И указать сущности. И все это на заранее заготовленных триггерах.

Процедурная диалоговая система Арканума

«Но если признаться по секрету - это все было замаскированным If-then написанной на чистом С. Он просто делал проверку "if true - do this or else do nothing""

(с)Тим Кейн

Так каждый скрипт в Аркануме имеет собственные флаги которые могли тестироваться отдельно.

Процедурная диалоговая система Арканума

У скриптов были свои счетчики - "Counters" что сохранялись и между выполнениями скриптов и привязанные к "номеру" Скрипта.

Скрипт мог получить доступ к глобальным флагам и переменным и данным игрока или НПС.

Далее дизайнеры могли выбрать условие Триггера из большого выпадающего меню.

Например "«Объект» содержит «предмет»". Или "«Объект» в N-тайлах от «предмета»"

Процедурная диалоговая система Арканума

Затем выбиралось действие из выпадающего списка.

Например, можно было установить глобальное условие N и/или послать сообщение M или заставить объект наложить заклинание на другой объект.

Все параметры выбирались из выпадающего списка. Что упрощало работу дизайнеру квестов от которого требовалось только знание того какие триггеры в игре вообще есть.

Данный редактор работал аналогично скриптовому редактору Starcraft и Warcraft и многим другим - позволяя создавать скрипты для уровней Арканума любому Не-кодеру.

<b>Примерно так выглядит Mission Triger System которыми задаются условия в StarEditor</b>
Примерно так выглядит Mission Triger System которыми задаются условия в StarEditor

В скриптовом редакторе было множество заранее предопределенных объектов - таких, как Игрок, Триггер который активировал действие

Так же в скриптах была система «любой» и «все»(any и every) - любой последователь или все в команде.

Так же что важно - скрипты могли вызывать другие скрипты. Так что учитывая некоторые дизайнеры сразу смогли наворотить рекурсивные циклы Тиму пришлось добавить систему "отказоустойчивости" - цепочка скриптов вызывающих скрипты не может быть больше 1000 строчек триггеров, если команда не может выполниться за 1000 условий, то наверное что пошло не так и ей уже не стоит выполняться? Не так ли?

В дальнейшем разработчики шли в редактор уровня Arcanum World Editor и уже вешали созданные скрипты на предметы, НПС, локации, Предметы в инвентаре.

Процедурная диалоговая система Арканума

Что в итоге?

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

(с)Тим Кейн

Как можем видеть - для создания продуманного мира игры с сильным эффектом погружения, нам совершенно не нужны ни мощные чаты GPT ни сотни сотрудников, которые будут ручками вбивать скрипты для каждого НПС, ни сотни актеров озвучки.

Вы когда-нибудь задумывались о том что в РПГ уже через пол часа вы начинаете пропускать озвученные диалоги, так как вы читаете гораздо быстрее чем слушаете речь. А если вы дочитали эту заметку до этого момента - то вы определенно относитесь к этому типу людей!

В то время как в условной ААА игре типа Starfield или Dragon age Veilguard где все НПС представляют собой буквально говорящих болванчиков которые заучили 1-3 фразы на всю игру и повторяют их в течение всей игры без особых изменений. Такие персонажи ИМХО кажутся намного менее живыми, чем даже персонажи Морровинда учитывающие состояние знакомство с игроком и его общую репутацию в мире.

Для наполнения мира Арканума основная работа легка всего на 2х(!!!) нарративных дизайнеров. И для создания аналога вам так же не понадобятся орды работников. Просто игру нужно продумать с точки зрения создания системного дизайна и создания удобных инструментов позволяющих автоматизировать повторяющиеся части работы.

Системный дизайн - это такой подход к дизайну игры где вы проектируете системы в хардкоде - что будут распаковываться и работать сами по себе и на которые вы сможете положиться.

Я играл в кучу РПГ где для управления игровым состоянием использовались скрипты. (Имеется ввиду CLR языки, которые исполняются тут же без компиляции)
И изменения в игровых состояниях что не согласуются друг с другом и приводят к появлению багов, которые все игроки видят!
Мы все встречаете такое:
Когда вы делаете нечто не запланированное разработчиком стреляете в НПС в сцене, убиваете его, но его "мертвое тело" продолжает говорить и вращать головой, а тело ползает по сцене. Или уже мертвый стражник кричит «стой вор»!

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

(с)Тим Кейн

Создайте правила системы. Найдите удобный способ создания контента настройте экспорт тестов в игру.

Зачем сотни раз прописывать одни и те же слова под каждую расу или пол протагониста - если можно создать операцию/команду/код/скрипт который будет подставлять заранее заготовленные шаблоны со всеми нужными проверками? И наполненные разными вариациями?

Сейчас такие системы во многом подзабыты - и для создания мира того же Ведьмака - используется труд десятков сценаристов. В попытках придать миру "кинематографичность"...

«Когда я в дальнейшем пытался предложить развивать эту же систему в новых играх. Мне сразу отвечали отказом. Никто из больших боссов не был в этом заинтересован!

(с)Тим Кейн

И технологии создания "живых миров" сегодня подзабыты...даже в инди которые не боятся рисковать.

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

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

Это особенно важно в жанре РПГ(что бы мы не понимали под ним). Где современные дизайнеры забыли истоки РПГ - где это приключение и возможность игроков выбирать как им проходить квесты... В конечном счете в cRPG - именно системы выполняют роль виртуального ДМ и от качества и глубины реализации оного и зависит - получит ли игрок удовольствие или нет.

Насколько сложно создать аналогичную систему?

На самом деле не сложно. Но как любая комплексная системная механика она выглядит гораздо сложнее и дороже в производстве потому что ее системы затрудняют оценку со стороны. Мы такое видели на примере A-Life в сталкере! Где двоих человек хватило для реализации системы живого мира.

Такие системы подобны Лего - где из одинаковых кирпичиков можно построить и что то простое и что, то очень сложное...

Но сколько времени займет создание такой системы как в Аркануме?
Что же - Тим Кейн дает однозначный ответ:

Диздок Арканума в кадре
Диздок Арканума в кадре

Со слов самого Тима для создания GDD спецификации Арканума (тогда он еще звался "Epic", но возникли юридические вопросы с Эпик геймз) размером в 48 страниц(!) он потратил около 3 месяцев.

(Псс: Он это мне лично сообщил)
(Псс: Он это мне лично сообщил)

И потом еще 90 дней ушло на создание функционального прототипа(включающего написание движка с нуля!!!) со всеми основными механиками.

После чего у них было 2.5 года на то, что бы наполнить мир контентном и доделать нужные механики.

Процедурная диалоговая система Арканума

Но о том как собирать GDD под конкретный жанр РПГ со слов Тима - я хочу поговорить позже. А пока можете почитать мою заметку про общие правила организации GDD.

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

Все что вам для этого понадобится.

  • Выбрать "стиль" заполнения диалоговых таблиц
  • Сделать систему экспорта диалогов в движок игры
  • Реализовать возможность создавать запрос из одного диалога в другой когда движок видит "операционный код".
  • Добавить систему скриптов влияющую на NPC и дать возможность ее считывать с диалогов.
  • Протестировать все это подключив к вашим NPC в игре

И собственно все! Дальше вам останется только заполнить тексты - наполнить банки распространенных ответов и продумать ваш мир. Технически ничто не мешает подключить и озвучку к данной системе. Хотя в таком случае цена реализации - сильно возрастет.

И наконец моя любимая рублика:

Как это все можно улучшить?

На самом деле система придуманная Тимом Кейном гораздо более комплексная чем ее аналоги в других играх. Собственно 90% других РПГ - созданы гораздо более простыми инструментами. И большим числом народа.

Ближайший осмысленный аналог, который стоит изучить - это Гипертекст Морровинда.

Например, Система Арканума гораздо более удобна для создания диалогов в отличие от гипертекста Morrowind с точки зрения разработчика и позволяет создавать диалоги где угодно если у вас под рукой есть хотя бы Exsel (хотя некоторым и txt блокнота хватит) и потом экспортировать в игру после небольшой проверки на тестовой сцене.

В том же Морровинде тонкая настройка для NPC и что может и не может говорить требовала точного знания скриптов от дизайнера. А уж задать гендерное различие в произношении тот еще квест... хотя в игре и были проверки на PcRace, PcClass, PcSex (были времена когда Бетезда не делила людей на тип телосложения)...

Процедурная диалоговая система Арканума

В то время как система Арканума позволяла заранее создать часто используемые текстовые и скриптовые блоки и подставлять их ко всем НПС в игре использование модульность системы. И едины подход к дизайну диалогов НПС. И обеспечивала великолепную гибкость и степень тестирования.

Но если она так хорошо - то это не означает что ее нельзя улучшить!

Память для НПС

Можно добавить систему, запоминающую события происходящие рядом с НПС(Кто сказал Немезис?):

Игрок украл сладкий рулет? Игрок убил дракона? НПС воскресили из мертвых? Вылечил от сильного ранения? Помогли его родственникам? НПС подвергся нападению волков?

На такие события можно поставить систему сохранения памяти о событии. Для этого такие в игре должна быть система событий - записывающая "еvent'ов" которые будут отпечатываться в специальном хранилище памяти НПС, где будет указан "код события", дата и участники, и место.

И потом вы будете встречать НПС которые будут вспоминать как вы все вместе раскидали волков месяц назад. Это придаст игре ценности. Игрок почувствует что он влияет на мир:

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

Рафаэль Колантонио, Основатель Arkane, Wolfeye Studio

Такие системы не являются чем то новыми , например в Скайриме используется система Radiant Story, учитывающая следующие события вокруг игрока и подробно об этом рассказывал Брюс Несмит:

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

Увы на текущий момент в том же Аркануме такой системы нет, есть лишь текущие состояние отношение НПС с игроком - описываемое одной переменной: от дружбы до неприязни.

Так почему бы не сделать так что бы был пул действий которые НПС запоминал надолго - и позже эти данные НПС сможет подтягивать при разговоре с игроком и между собой.

И часть таких запомненных действий можно задать ЗАРАНЕЕ в логах НПС - так что они будут описывать мир игры до того как игрок в ней появится?

Процедурная диалоговая система Арканума

Что придаст игре особый шарм когда НПС будут в разговорах намекать что мир игр существовал и до появления в нем игрока. Упоминая в разговорах события и используя ту же систему дизайна игры - которая отвечает и за сохранение знаний о действии игрока?

Нечто аналогичное используется в том же Dwarf Fortress когда формируется история мира - игра запоминает подвиги различных персонажей и в дальнейшем воспроизводит их на фресках в игре в текстовом виде.

Настройка личности

На текущий момент характер и отношение большинства NPC в мире Арканума к игроку определяется несколькими параметрами: Социальным статусом самого NPC и Расой NPC и харизмой и расой героя игрока. Полуорков будут рады видеть только полуорки. Эльфа - эльфы. То есть в рамках одной игровой сессии - все аристократы, стражники и торговцы при первой встрече ведут себя +- одинаково.

Так же у НПС можно добавить настройку известности, состоящую из 3 переменных. Мировая известность, Известность в городе(регионе), и Известность в рамках фракции. Это позволит генерировать систему "знакомств" НПС между собой

Систему "фракций" и проверять отношения с тем насколько персонаж игрока насолил им или помог. Причем сделать так что один НПС может состоять в нескольких из них. Например, условный городской стражник может состоять в следующих фракциях:

  • Семья с конкретной фамилией
    (возможно даже в нескольких, где в одной семьи будет в роли сына, в другой в роли жениха, а в третьей в роли сына маминой подруги)
  • Городская стража города N-ск(где у персонажа будет должность в рамках жесткой иерархии, и возможность двигаться по карьерной лестнице в случае гибели начальства)
  • Жители города N-ск
  • фановые "фракции" любителей посещать трактир М в городе N-ск, или клуб любителей охотится в лесу по выходным.

И так далее. Это может быть похоже с системой "ролей" предлагаемой мной в рамках заметки про Radiant Ai. И такие "фракции" могут тянуть с собой уже готовый скрипт с поведением и расписанием.

И отношения NPC к игроку и возможно друг к другу будут меняться на протяжение игры от действий игрока - что добавит миру игры реактивности.

В вашу игру можно добавить особые настройки личности NPC - что будут работать как модификаторы в проверках, склоняя NPC к тому или иному решению более разнообразно.

Причем модификаторы могут быть простыми, так и сложными вызывающие свои собственные проверки в генерируемых диалогах.

В качестве примеров такой настройки, можно указать что конкретный NPC испытывает предубеждения к той или иной расе, и поднять отношение выше нейтральности не выйдет. А при разговоре с этим НПС постоянно будет слышать расистские шуточки.

Или в качестве обратного примера пусть NPC испытывает слабость к особям противоположного пола с рыжей шевелюрой - что будет давать им бонус к проверкам и особые диалоги приветствия по отношению к герою.

Возможно у NPC есть особая слабость. В виде коллекционирования оружия или конкретной еды - и попытка подкупить его - используя взятку такого типа окажется более эффективной.

Такие настройки личности - могут "считываться" другими НПС - и в игру можно добавить особый тип диалога "спросить о ком то конкретном" - и один NPC сможет рассказать о другом (если он его знает) что-то конкретное - используя все ту же модульную систему построения диалога.

Взаимодействие NPC-peer-NPC

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

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

Это создаст потрясающие ощущение живого мира - что мир живет сам. А не существует как игровая площадка для одного героя. Такие вещи всегда потрясающе работают на погружение.

Естественно говорливость НПС нужно тщательно балансировать, что бы мир не игнорировал игрока, и не заваливал совсем уж мусорной информацией.

Дополнительные проверки в диалогах:

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

И что более интересно - к глобальным или локальным переменным. Позволяя НПС при разговоре с игроком накапливать определенные переменные, и проводить математические сравнения, в разделе строк

i== (присвоить значение характеристики), i+1, i-1, if i<k then (номер строчки), else (номер строчки)

Это позволит дать дизайнерам возможность быстро и просто создавать разветвленные диалоги даже без использования обращения к сложным скриптам. Чисто на внутренней логике системы диалогов.

Так в Редакторе космических рейнджеров поддерживал изначально 24 параметра в квесте и позже было расширено до 96 переменных. Не думаю что столько может понадобиться для обычной РПГ игры. Но возможность использовать формулы внутри диалогов для оценки того как прошел диалог кажется удобной возможностью. Это может пригодиться для оценки того как прошел квест где игроку нужно собрать лишь часть квестовых предметов для сдачи оного.

Удобный редактор для Диалогов

Конечно возможность обойтись одним блокнотом или Экселем это прекрасна, но почему не обратить внимание на то что делали другие разработчики?

Тут вдохновение стоит искать в TGE (Text Game Editor) из Космических рейнджеров, который позволяет визуализировать поток действий игрока в рамках квеста.

Процедурная диалоговая система Арканума

Именно в данном редакторе работали гейм-дизайнеры Elemental Games при создании всей серии игр Космические рейнджеры.

Процедурная диалоговая система Арканума

Так же существуют множество решений для нарративного дизайна вроде Articy:draft, Arcweave, Chat Mapper, Dialogue Designer, Twine - решений которыми можно вдохновляться или использовать как есть и настроить экспорт из них в RTF или Json формате для внедрения в игру.

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

Так же если у вас возникнут вопросы к самому Тиму - вы можете задать вопросы под соответствующими роликами:

Если вопрос по теме и достаточно интересный - он вполне может ответить.

Либо задавайте их тут.

573
31
11
7
3
1
1
1
1
1
1
1
350 комментариев