Когда я только начинал делать парсерные игры, ответ был для меня очевиден — ну конечно же чат с NPC! Ограниченное меню с вариантами меня тогда вообще не интересовало. Подождите-ка, а ведь в парсерных играх уже используется ASK-TELL система, вида: “спросить Машку про Дашку”, “рассказать Машке про Наташку”. Может не стоит изобретать велосипед? Решил попробовать эту систему в игре “Рыбак-рыбака”. Там был диалог с рыбаком в лодке. Не знаю как другие, но я не мог никак догадаться, о чем можно было его спросить и рассказать. Большинство попыток заканчивались провалом, так и не смог пройти это место, пока не увидел исходники и ключевые слова. Когда в других играх видел подобную систему, то практически сразу расстраивался — не хочу в новой игре таких сложностей! Всё-таки надо чатик делать. Будет красивый диалог, если что робот сам подскажет о чем беседовать и получиться легче. Немного покумекав, понял, что этого нужен чат-бот. Кое-как скрестив с одним из плееров, удалось связать чат-бота с моделью парсерного мира, игра вышла в свет.
Народ не понял крутость AI, я не понял почему народ не понял, и в итоге, мощная задумка провалилась. Потом мне самому стало ясно, и я прекратил всякие эксперименты с диалогом. Сейчас, мой выбор всегда в сторону менюшного диалога. Всё дело в передаче игрового опыта. Автор закладывает фиксированные реплики и диалог может стать справочником, системой управления виртуальным персонажем или некой встроенной миниигрой. Существует много руководств, как писать такие диалоги — это старый добрый проверенный подход. Останавливаться на нём не будем. Давайте посмотрим трудные моменты “живого” диалога через строку ввода с примерами из игры “Космический шпион”.
#### Сложность программирования реплик.
Для создания и отработки команд одного бота уйдёт масса сил и времени, а тестировать придётся огромное количество веток. Современные движки чат-ботов требуют вдумчивого подхода и с наскока не получиться одолеть такой барьер. Неудачный диалог с лифтёром:
>где моя каюта?
Даже не знаю что вам ответить
>сколько всего лифтов?
Да, лифт считается самым безопасным.
>как мне попасть на станцию?
Не совсем понятно что имелось ввиду
>что мне делать?
Не могу точно ответить
>расскажи про дачу
Не могу точно ответить
Человек стал относиться к боту как к справочному пособию по всему игровому миру и сюжету и стал пытать несчастного болванчика.
#### Связь с моделью внешнего мира.
Это отдельный вопрос, так как по-хорошему надо сделать боту доступ к информации о текущем состоянии предметов (игрок взял ключ?) и разрешение управления (открыть дверь после правильной ветки диалога). Решается болезненно, долго и сложно. Во время реализации столкнулся с такой бедой — движок после того, как топик был пройден, сработали нужные хуки, не мог к нему вернуться. Поэтому если человек в какой-то момент переедет на другую тему, то уже не вернутся на предыдущую и бот не сможет выполнить манипуляцию с миром.
#### Навести игрока на “правильное русло”.
Когда начинают общаться с ботами, зачастую включается “внутренний тестировщик”, который пытается проверить границы системы и задаёт дурацкие вопросы, не имеющие отношения к игровому миру. Нужно каким-то образом дать понять о чем должна происходить беседа и делать ненавязчиво. В “Космическом шпионе” это делалось за счет механизма перехвата инициативы (бот начинал гнуть свою линию, невзирая на реплики игрока), иногда воспринималось хорошо, иногда не очень, вот как было в разговоре со специалистом:
>хватит на меня пялиться, урод!
Если бы у меня было лазерное ружье, то ты бы побегал по станции, - сказал специалист и ухмыльнулся
>ты козел
Как думаешь, будет сегодня заварушка?
>ты скотина
Скучно, однако, без заварух
>закончим диалог
Ну и сколько ты будешь со мной трещать? Займиси делами!
#### Разговор без предыстории.
Допустим, пробежали вы пол-карты с топором, рубили драконов направо-налево, и повстречалась вам эльфийская принцесса. Как вы начнете диалог? Привет, как дела? Что-новенького? А может быть в предыстории было сказано что вы десять лет бок о бок сражались, а потом она убежала в своё королевство? И тут игрок принимает решение, что будет говорить с ней как великий и славный паладин 80-уровня, с отыгрышем роли, или как Вася с пятого подъезда с симпатичной блондинкой. В меню таких проблем нет, у вас четкие выборы с авторской атмосферой.
Диалог как функция. Очень часто ставят NPC для одной небольшой функции — дать справку или указание на следующее задание, для такого случая придётся ухищряться с игнорированием всех реплик игрока и сводя к стандартным ответам. Некрасиво.
#### Невозможность передачи подтекста сцены.
Вот это очень тонкий момент, которым страдает не только общение с ботами, но и между людьми в текстовом чате. Во время диалога всегда есть определённый контекст, который при живом общении передаётся невербально, а при чтении книг за счет описания эмоций. Cравните чатик героя и его старого друга:
— Привет! Как дела?
— Нормально.
Первая возможная сцена:
— Привет! Как дела? — Герой хоть и сказал фразу бодро но стоял как-то неуверенно. Сложно было смотреть в глаза старому другу, которого тот не видел несколько лет.
— Нормально. — Друг широко улыбнулся. Мягкий звук шагов и он встал рядом, как в былые времена. Лёгкий хлопок по плечу окончательно взбодрил героя.
Второй вариант:
— Привет! Как дела? — герой торопясь на очередную встречу, чуть не сбил по пути старого друга.
— Нормально. — Друг широко улыбнулся. Его кулаки крепко сжались, а потом расслабились. Он так и не простил былую обиду, но найдёт подходящее время для того, чтобы свести счёты.
Понятно, что пример не совсем корректный, но принцип остаётся — в рамках одного диалога, может быть бесконечное количество вариаций подтекстов. Чат это всё стирает, а вот реализация через меню позволяет лёгко. В визуальных новеллах еще можно передавать эмоции через аватарки и нарисованных персонажей.
#### Выводы
Как вы поняли, теперь я сторонник менюшных диалогов в любых текстовых играх. Большинство приведенных проблем субъективные и основаны на личном опыте использования парсера и движка чатботов. Скорее всего есть научные статьи с более точными формулировками и определениями, не знаю, так не углублялся в предмет. Надеюсь в будущем придумают комфортную диалоговую систему как для авторов, так и для игроков.
#### Скачать
Итак, кому интересно, я сделал отдельную сборку для двух чатботов из игры “Космический шпион” под Windows.
Чат-бот лифтёра : cloud.mail.ru/public/Ey5g/qHFHnyEQF
Чат-бот специалиста : cloud.mail.ru/public/EP3D/ZNbvYbhKW
Они полностью готовы для общения, просто запускаете исполняемый файл и вводите в зеленое поле текст, нажатием Enter или кнопкой отправляете движку. На всякий случай приведу отличие этих ботов от стандартных:
* Движок chatscript. Боты на этом движке получали премию Лёбнера в 2014, 2015 году (из наиболее свежих результатов).
* Ориентированность на сюжет. Бот обладает небольшим количеством знаний в рамках сюжета игры.
* Перехват инициативы. Бот не просто выдаёт фразу, в ответ, а может сам попробовать построить диалог.
* Общение с определённой целью. Игрок разговаривает с ботом не просто так, а чтобы добиться какого-то эффекта, например чтобы пройти тест в ходе беседы или больше спрашивать, чтобы показать свой интерес к теме и бот ему открыл какую-нибудь дверь.
Ссылка:
https://ifhub.club/2018/06/06/zhivoy-dialog-s-npc-chat-ili-menyu.html