А вот интересно — кто-нибудь занимался формализацией процесса создания диалога с выбором варианта из предложенного перечня фраз? Можно ли его разбить на какие-либо функциональные блоки/стадии/эпизоды?
И какие "типы" диалога могут встретится? Например, диалог может быть линейным и циклическим. Под циклическим я имею в виду ситуацию, когда игроку есть много о чём поговорить с персонажем — он выбирает из перечня какую-либо одну тему, получает ответ, после чего возвращается обратно к перечню тем (в котором уже обсуждённая тема может и отсутствовать). Вариант — расспросы об окружающем мире, о другом персонаже и т.п. С линейным всё проще — игрок двигается по руслу диалога от начала к концу, возможно через какие-либо ответвления.
На какие формальные блоки можно разбить данные типы диалогов? А может есть подходящие инструменты для работы с подобным функционалом (типа блок-схем и т.п.)?
Неактивен
Неактивен
Nex, если ты постишь ссылки, то хоть давай описание того, что там можно найти (например "создание диалогов в QSP"), и на какую часть вопроса ты этой ссылкой хочешь ответить. И это не просьба.
Модуль, который можно найти по приведённой тобой ссылке демонстрирует лишь способ реализации (кстати кошмарный) нескольких видов диалога — без какой-либо формализации самого процесса его (диалога) создания.
Неактивен
Можно посмотреть Alabaster от Эмили Шорт и Ко, если еще не.
На страничке http://www.inform-fiction.org/I7Downloa … index.html можно найти много интересного материала в том числе и разговорную диаграмму. Монументальное, скажу вам, зрелище.
Неактивен
Важный вопрос — как лучше производить группировку фраз игрока, чтобы избежать ручного прописывания очередного перечня фраз для выбора (типа как здесь)?
Хочется, чтобы фразы были собраны по какому-нибудь признаку (что-то типа "Темы" диалога), на который можно было бы потом просто сослаться.
Неактивен
М-да… Вчера набросал схему простейшего диалога:
Простейший — потому что все фразы игрока собраны в один перечень, и многоуровневых тем тут по сути нет. То есть те или иные фразы по мере развития ситуации просто либо исчезают, либо появляются. Надо подумать, как хотя бы подобное можно свернуть в одну "тему" (или разделить на несколько) и увязать в какую-нибудь структуру, а также как лучше расширять подобную структуру дополнительными темами…
Неактивен
Точно так же, как я и писал выше:
#диалог $topic = $ARGS[0] IF $topic = 'прежний': 'Да милостью барина живы да сыты. Барин у нас щедрый, не то что прежний.' ELSEIF $topic = 'добраться': 'Да вот по этой дороге и беги, только на развилке держись прямо<, а то налево псарни - тебе там будут не рады.>' ELSEIF $topic = 'меняется': 'Как часто здесь меняется - не знаем, мы сами не местные. Батрачим то тут, то там по сезонам. А в этих местах впервые.' END IF $topic = '': ACT 'Эй, косари! До барина-то вашего добраться как?': $SELACT 'Здорово, котище. А ты по этой дорожке беги, только на развилке налево прими - так короче будет.' CLA ACT 'Последовать совету': GOTO 'псарни' END ACT 'Косари, а косари, как сами-то? Живы-здоровы?': $SELACT XGOTO $CURLOC, 'прежний' END END IF $topic = 'псарни': ACT 'Плохие вы путникам советы даете...': $SELACT 'Ну если путники к нам без уважения, то и нам резона нет. А дорога до замка там и вправду короче.' XGOTO $CURLOC, 'груб' END END IF $topic = 'груб': ACT 'Эх, косари! Поколотил бы я вас, да времени нет!': GOTO 'конец' END ACT 'Ну простите, если груб был. Как сами-то? Как живется, как работается?': $SELACT XGOTO $CURLOC, 'прежний' END END IF $topic = 'прежний' OR $topic = 'меняется': ACT 'А как добраться до барина вашего?': $SELACT XGOTO $CURLOC, 'добраться' END END IF $topic = 'прежний': ACT '<Прежний?> И часто у вас здесь барин меняется?': $SELACT XGOTO $CURLOC, 'меняется' END END IF $topic = 'добраться': ACT 'А из местных тут живет кто-нибудь?': $SELACT 'Ну... у леса можно встретить полоумную старуху - вот она вроде из местных.' CLA ACT 'Ок': GOTO 'конец' END END ACT 'Побегу-ка я дальше...': GOTO 'конец' END ---- #псарни 'Псарни.' ACT 'Еле унести ноги': GOTO 'диалог', 'псарни' ---- #конец 'конец' ----
Неактивен
Некс, описанная тобой реализация в контексте данного обсуждения в общем-то бессмысленна — поскольку ну ни разу не облегчает задачу. Проблемы запрограммировать конкретную ситуацию лично у меня нет, а для других ты уже ссылку на примеры реализации диалогов на Куспе приводил чуть выше. Твоё решение — это решение конкретной ситуации, которое уже выглядит путано с точки зрения последовательности блоков диалога, а добавление хотя бы одной ветки в эту "систему" приведёт к тому, что код придётся основательно переписывать.
Пока проработка вопроса находится в теоретической стадии — как формализовать процесс описания (не написания или программирования, а именно описания) диалога, чтобы это было удобно переносить в код или библиотеку. Хочешь участвовать в этой дискуссии — подумай в этом ключе.
Неактивен
bergano написал:
А VoiceXML не хорош для этого?
Я бы попросил всё же давать какие-либо пояснения к вводимой в дискуссию терминологии. Я вот не знаю, что такое "VoiceXML", поэтому сходу понять, для чего именно он хорош, сложно.
Лезу в Википедию:
VoiceXML имеет теги, которые являются командами для голосового браузера (voice browser), который: синтезирует, распознает речь, предоставляет диалоговое управление.
и, честно говоря, не понимаю, каким боком VoiceXML относится к поднятой здесь теме.
Неактивен
VoiceXML - Это язык описания диалогов. Именно "описания". Может, авторы плтформ поддержат в платформах его интерпретацию? Или конвертацию на язык платформы файла в формате VoiceXML.
Отредактировано bergano (16.08.2011 18:01)
Неактивен
bergano написал:
VoiceXML - Это язык описания диалогов. Именно "описания". Может, авторы плтформ поддержат в платформах его интерпретацию? Или конвертацию на язык платформы файла в формате VoiceXML.
Полагаю, вас ввело в заблуждение словосочетание "описание диалогов". Так вот здесь хотелось бы порассуждать на тему "сесть и на бумажке нарисовать диалог", а не "сесть и с бумажки зачитать диалог". Может к этому обсуждению ("Игры для незрячих") тема VoiceXML подойдёт больше? Всё же желательно не засорять тематические ветки отвлечёнными вставками.
Неактивен
На VoiceXML можно в файле описать сценарий диалога. Запрос, варианты ответов, ветвления. Это формат, язык описания диалогов. Язык, а не программа. Потом можно транслировать его (VoiceXML файл) например в QSP. Написать утилиту, например на xsl.
Неактивен
bergano написал:
На VoiceXML можно в файле описать сценарий диалога. Запрос, варианты ответов, ветвления. Это формат, язык описания диалогов. Язык, а не программа. Потом можно транслировать его (VoiceXML файл) например в QSP. Написать утилиту, например на xsl.
А можно тогда конкретнее, чем он облегчает автору проектирование и создание игрового диалога? Только без ссылок на энциклопедические ресурсы, описывающие решения на все случаи жизни, а своими словами и, желательно, с примерами. А то пока никаких ценных идей по теме не прозвучало, а здесь я не всё понял…
Неактивен
Olegus t.Gl. написал:
описанная тобой реализация ... ну ни разу не облегчает задачу
Разве был вопрос, "как облегчить задачу"? Я думал, что был вопрос - как проще всего ее решить. Приведенное мной решение, я считаю самым простым. Сможешь проще?
Olegus t.Gl. написал:
Твоё решение ... уже выглядит путано
Кому как, я вот смотрю и не путаюсь. Сможешь проще?
Olegus t.Gl. написал:
добавление хотя бы одной ветки в эту "систему" приведёт к тому, что код придётся основательно переписывать.
Неправда.
Olegus t.Gl. написал:
как формализовать процесс описания (не написания или программирования, а именно описания) диалога, чтобы это было удобно переносить в код или библиотеку.
В общем случае - никак. Потому что диалоги, как правило, слишком разнообразны для полной формализации - придется либо писать без формализации, полностью "кодом", как я привел выше, либо сочинить очередные неуниверсальные правила поведения диалогов, и подгонять диалоги под них.
Неактивен
Nex написал:
Разве был вопрос, "как облегчить задачу"? Я думал, что был вопрос - как проще всего ее решить. Приведенное мной решение, я считаю самым простым. Сможешь проще?
Некс, вопрос был именно в облегчении задачи в части предварительной формализации процесса создания диалога. Всё это написано выше.
Nex написал:
Кому как, я вот смотрю и не путаюсь. Сможешь проще?
Ты смотришь на код. А сюжетная часть, заложенная в этом коде, через некоторое время начнёт ускользать — с помощью "понятного" кода ты разнёс её по разным местам, и последовательность чтения ни в малейшей степени не соответствует последовательности вывода.
Пытаться "делать проще" в части программирования на данном этапе я не собираюсь — я не для соревнования эту тему поднял.
Nex написал:
диалоги, как правило, слишком разнообразны для полной формализации - придется либо писать без формализации, полностью "кодом", как я привел выше, либо сочинить очередные неуниверсальные правила поведения диалогов, и подгонять диалоги под них.
Ну так и игра подразумевает действия игрока в рамках "неуниверсальных" правил, так что лучше всё же иметь какие-нибудь правила, которые пусть и не охватывают всё и вся, зато позволяют достаточно эффективно использовать ряд приёмов.
К тому же, я полагаю, что при создании диалога автор будет указывать не просто фиксированные фразы, но и некие программные модули, этими фразами управляющие.
Главная цель — чтобы автору было легко понимать переложенный в код диалог и при необходимости включать в него новые ветки и блоки.
Неактивен
IMHO - все автоматические диалоги, автоматические описания и т.п. - это подсознательная попытка автора НЕ писать IF-произведение (как литературное произведение), а просто расставить декорации и предложить Игроку/программе придумать к ним текст. Лучше уж написать 2 варианта диалога, но нормальным литературным языком, чем 10 вариантов "смеси паскаля и русского". Немного утрирую, конечно, но мне это кажется так.
Будет у игрок 2 или 20 вариантов выбора - не важно, ему все равно может захотеться задать вопрос, которого в списке нет.
Неактивен
Logger написал:
IMHO - все автоматические диалоги, автоматические описания и т.п. - это подсознательная попытка автора НЕ писать IF-произведение (как литературное произведение), а просто расставить декорации и предложить Игроку/программе придумать к ним текст. Лучше уж написать 2 варианта диалога, но нормальным литературным языком, чем 10 вариантов "смеси паскаля и русского". Немного утрирую, конечно, но мне это кажется так.
Будет у игрок 2 или 20 вариантов выбора - не важно, ему все равно может захотеться задать вопрос, которого в списке нет.
Полагаю, что утрирование здесь используется для того, чтобы подчеркнуть красоту своего ответа. В данной теме речи про автоматические диалоги и описания не ведётся — лишь о том, можно ли как-то помочь автору проектировать диалоги, чтобы после переложения в код это оставалось понятным, а в самой игре — пристойным.
Неактивен
Думаю, с точки зрения писателя, нет ничего удобнее, чем создавать диалог аналогично тому, как создаётся меню в какой-нибудь визуальной Борландовской среде разработки: Delphi или Builder. В случае необходимости редактирования это "меню" редактируется легко. Причём, желательно сделать не аналог тому, как сделал Борланд, а то, что будет заточено именно под диалоги.
Если нужно вставить диалог- для программиста не должно быть сложно выдать структуру диалога в любом виде. А потом сконвертить её в диалог для игры на конкретном языке, который можно будет скопипастить в тело текстовой игры.
Если нужно изменить диалог, уже вставленный в игру: редактируем его в нашем редакторе диалогов; стираем диалог в игре; вставляем отредактированный.
Другими словами, у создателя игры всегда будут под рукой написанные им диалоги в удобном для изучения и редактирования виде. В теле самой игры они будут не удобочитаемы, но тут уж, видимо, ничего не поделаешь.
Отредактировано Pirate (17.08.2011 19:32)
Неактивен
Logger написал:
Будет у игрок 2 или 20 вариантов выбора - не важно, ему все равно может захотеться задать вопрос, которого в списке нет.
с такой логикой можно и один пункт диалога оставить. Неужели не понятно, что автору может быть для его задумки важно где-то сделать не просто вопрос-ответ, а какой-то диалог. В диалоге, приведённом на картинке, совсем не много вариантов выбора одновременно бывает. И уж точно не 20. А проблема с представлением и редактированием уже есть.
Неактивен
Бегло просматривая некоторые материалы по теме, наткнулся на некоторые схожести прорабатываемых мной идей с изложенными в этих статьях (например "Defining Dialogue Systems" от Brent Ellison). Полагаю, я сэкономлю массу времени, если поработаю с этими материалами плотнее…
Неактивен
Olegus t.Gl. написал:
Полагаю, я сэкономлю массу времени, если поработаю с этими материалами плотнее…
Походу вряд ли. Надо всё же довести до ума одну идею хотя бы на примере "диалога с косарями".
Неактивен
Вот такое нашёл: Chat Mapper. Бесплатен для некоммерческого использования. Выглядит очень достойно.
Кроме всего прочего (а там много) позволяет экспортировать диалог в XML. Останется только написать конвертор из XML в кусп, урку, инстед и куда там ещё.
UPD: Хы. Посмотрел, там даже API есть, можно свой экспортёр написать и получать уркин/куспин/инстед код прямо из редактора. Супер-тулза.
UPD2: Плак. Все вкусности - только в платной версии. В том числе и XML. Жаль.
Отредактировано fireton (19.08.2011 21:24)
Неактивен
Достаточно интересно это было реализовано в редакторе Never Winter Nights, там отдельный редактор диалогов, с кучей возможностей.
Сам редактор древовидный, с возможностью зацикливания диалогов и установки условий для появления вариантов ответа как игрока, так и NPC, таких как параметры персонажа, его уровень, выполнение какого-либо квеста, наличие предмета и т.д. Так же для веток диалога можно проставить появления - как однократное, так и многократное, например, чтобы игрок не задавал пять раз вопрос "как тебя зовут?" неигровому персонажу. Примерно ознакомиться с видом можно тут: http://www.remmgen.narod.ru/treddialog.html хотя в идеале чтобы оценить все возможности нужно скачать редактор модулей для NWN.
Неактивен