#3 — Разветвлённая диалоговая система на Inkle/Ink
В прошлой статье (“Восемь идей по проекту”) мы немного прошлись по целям на проект и совсем капельку коснулись новой диалоговой системы. Сегодня я хочу показать прогресс в данном направлении и рассказать про инструменты которые я буду интегрировать в игровой клиент.
Для меня хорошая игра в жанре RPG/MMORPG обязательно должна иметь качественную сюжетную линию и мощную цепочку побочных альтернативных заданий. Без разветвленной диалоговой системы создать полное погружение не получится, но в UO по природе своей это отсутствует (и отсутствовало всегда). Да, мы знаем про Лорда Бритиша и какие то задания (если играли на официальном сервере), но полноценной сюжетной линией и древовидными диалогами эта игра нас не баловала.
Дело в том что это не просто тяжело реализовать технически, но даже в случае успеха — поддерживать этого “динозавра” без подключения сторонних разработок было бы очень сложно. Сначала я хотел создать “с нуля”, но после того как прикинул объем связей и цепочек даже для первых пяти квестов — понял что поддерживать это не выйдет. Я очень благодарен за статью “Создание разветвлённой диалоговой системы” (Gamasutra) которую мне подкинули в личку, она открыла глаза на сложные моменты и подсказала популярные инструменты которые используют другие студии.
На арену выходит “Inky”
После нескольких попыток я добрался до Inky (https://www.inklestudios.com/ink/) который представляет из себя мощный интерпретатор для диалоговой системы от создателей “80 Days” (я не играл, но отзывы хорошие). Начал копать, сравнивать с конкурентами и понял что буду использовать именно inkle.
- Это opensource, все исходники открыты и я могу ковырять их совершенно бесплатно
- Знакомый язык исходников (C#), что упрощает работу и возможные фиксы
- Достаточно подробная документация (https://github.com/inkle/ink/blob/master/Documentation/WritingWithInk.md) по возможностям, большая гибкость и кол-во возможностей
- Ink файлы диалогов представляют из себя не сложные текстовые файлы со своим синтаксисом, которые легко передать переводчикам и сценаристам. Человек “не в теме” — легко поймет что надо менять и как всё устроено без изучение документации
- С ходу мне хватило возможностей языка после прочтения документации + наличие возможности запустить интерпритатор через консоль напрямую упрощало интеграцию в клиент
Дальше дело было за малым — взять этого динозавра и подружить с Orion-ом. После некоторых модификаций исходных кодов inklecate (спасибо, помогли) — получилось научить его выплевывать ответ экрана в текстовый файл и принимать ответ (опять таки, через текстовые файлы). Этой базы было достаточно что бы учить Orion с этим работать и я потратил несколько дней что бы завести всё это вместе в самом примитивном виде (см.видео)
Впереди много работы по “допиливанию” того что получилось, но я рад что получилось сделать интеграцию и побороть самые сложные моменты подключения. Теперь мой игровой клиент WisQuas содержит в себе действительно мощную систему разветвленных диалогов и будущая сюжетная линия должна будет получить именно такой, которую я задумал.
Что впереди?
Вот списочек дел в направлении диалогов, которые еще предстоит побороть (и на это уйдет наверняка еще куча времени):
- Научить ответы в диалогах реагировать на характеристики чара: какие то ветки общения должны будут “открываться” только в случае если навыка (харизма, атлетика, сила, умения, устрашения) достаточно.
- Менять аватарки в зависимости от квестолога, с которым происходит общение
- Добавить возможность прокручивать диалог назад (что бы посмотреть историю наших ответов)
- Сохранять этап диалога на каждом ответе пользователя, что бы исключить сброс результатов в случае перезахода в игру
- Подсвечивать над головой чаром и нпс иконку, что активна диалоговая система
- Написать первый квест для “обкатки” системы
Я целюсь на реализацию как в Divinity 2, Pillars of Eternity, Pathfinder Kingmaker и очень надеюсь что этот момент у меня получится. Впереди еще очень много работы, но я рад что появляются результаты, которыми я могу с вами поделиться.
Возможно демка получилась “простоватой”, но так оно и есть. Основная красота появится когда диалоги начнут реагировать на характеристики, будут наполнены красивыми текстами и сюжетом)
Тимур