RU

Реализация непростого ветвистого диалога с выбором из вариантов фраз

Olegus t.Gl. #12 06.04.2012 08:59 27 comments 17763 views

Программирование игровых диалогов с персонажами волнует представителей многих сообществ (темы на форумах: INSTEAD, iFiction.Ru), поэтому я выкладываю свою реализацию непростого ветвистого диалога с выбором из вариантов фраз на QSP:

Исходники диалога от Чешира (описание, блок-схему и реализацию на платформе URQ) можно скачать тут: http://dl.dropbox.com/u/5161162/dialog.zip

Мне не нравится постоянно растущая полоса прокрутки и большой объем текста в одном окне. Также не нравятся горизонтальные линии, отделяющие куски текста.

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

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

Zeantar:

Также не нравятся горизонтальные линии, отделяющие куски текста.

Эта линия показывает, с какого места появляется новый текст, который игрок ещё не читал. Чисто оформительский элемент, как и объём текста в одном окне, впрочем.

Zeantar:

И потом есть мнение, что чрезмерно ветвящиеся диалоги говорят о непродуманном плане игры. Все эти незначительные вопросы, мелкие уточнения в виде отдельных действий типа ACT ‘’ совершенно не обязательно подавать в одном окне. Их можно распределить небольшими порциями в разных локациях. Да и нужны ли они? Иногда - нет.

Хм… Может я чего-то не понял, но объём и ветвистость диалога определяется сюжетом игры. Если сюжет подразумевает длинный диалог в одном месте, то значит его нужно реализовывать в одном месте. И, разумеется, если все эти мелкие ветвления на выходе скучны для игрока, то это недоработка именно сюжетной части игры.

Zeantar:

Иногда проще опустить детальный опрос, переложив этот процесс с игрока на простое описание в виде заготовленного диалога.

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

Zeantar:

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

Иногда понимание интриги приходит как раз из суммы мелочей.

Zeantar:

Разумеется, найдётся множество случаев, когда широко ветвящиеся диалоги будут оправданы и дадут изюминку какой-то игре.

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

Вот бы ещё графическую программу для автоматизации написания таких диалогов.
Так чтобы ей мог пользоваться не программист(сценарист) и уже полученный кусок программист мог легко вставить в игру и до внести нюансы.

HIman:

Вот бы ещё графическую программу для автоматизации написания таких диалогов.
Так чтобы ей мог пользоваться не программист(сценарист) и уже полученный кусок программист мог легко вставить в игру и до внести нюансы.

Ссылку на подобную программу (”Chat Mapper”) выкладывал Fireton на ификшене, но это всё же тяжеловатое решение.

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

А схемку диалогов легко нарисовать на бумаге - по типу вопрос ответ. Это же всего лишь граф будет.

Olegus t.Gl.:

Хм… Может я чего-то не понял, но объём и ветвистость диалога определяется сюжетом игры. Если сюжет подразумевает длинный диалог в одном месте, то значит его нужно реализовывать в одном месте. И, разумеется, если все эти мелкие ветвления на выходе скучны для игрока, то это недоработка именно сюжетной части игры.

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

А пока:
- Говори, где деньги!
[в Караганде]
[в подвале]
——Добавляется новый текст
(мы играем за кого - за бандита или за служащего?)

Мы играем за служащего.
- В караганде.
- Не хочешь говорить? Убью!
[Я родом оттуда]
[Извини, запутался: деньги в подвале]
[Упасть в обморок]

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

А со стороны разработчика, не будет ли это слишком сложным? У меня невелик опыт текстовых игр, но уже сейчас я вижу необходимость разделять сценаристов и программистов (как и в любой игре) даже в простом QSP. Твой движок диалогов не усложнит ли жизнь автору игр?

Zeantar:

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

Так ведь как раз реализован неплохой пример диалога прямо как из готовой игры.

Zeantar:

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

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

Zeantar:

А со стороны разработчика, не будет ли это слишком сложным? Твой движок диалогов не усложнит ли жизнь автору игр?

Кстати, мне кажется ты не совсем верно воспринимаешь назначение примеров в демонстрации новых возможностей. Так вот, понять, плох или хорош тот или иной подход к технической реализации той или иной задачи, можно только на нетривиальном/объёмном примере, потому как на простых примерах всё кажется просто.

Не хочешь реализовывать объёмные диалоги? — как автор ты можешь обойтись без них. Кажется, что продемонстрированный мной подход слишком сложен? — в твоём распоряжении есть примеры, где несколько типов диалогов реализованы стандартными средствами.

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

Olegus t.Gl.:

Zeantar:

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

Так ведь как раз реализован неплохой пример диалога прямо как из готовой игры.

В этой готовой игре так уж необходимы постоянные уточнения? (На лестнице? А вправо или влево? А вниз или вверх? А потом куда? А надо ли надеть штаны?)

Olegus t.Gl.:

Zeantar:

А со стороны разработчика, не будет ли это слишком сложным? Твой движок диалогов не усложнит ли жизнь автору игр?

Кстати, мне кажется ты не совсем верно воспринимаешь назначение примеров в демонстрации новых возможностей. Так вот, понять, плох или хорош тот или иной подход к технической реализации той или иной задачи, можно только на нетривиальном/объёмном примере, потому как на простых примерах всё кажется просто.

Об этом я и говорю. Предоставь “нетривиальный пример”, а не маленькую заготовку. Тогда можно будет судить, удалась игра или нет, перенасыщена ли она микро-диалогами, скучна ли?

Написание движка целесообразно, когда им будет пользоваться хотя бы один человек. В качестве выполненной работы я не сомневаюсь, он отлично под тебя заточен и под твое восприятие мира.
Появляются следующие мысли после прочтения поста:
Что дальше? Движок с вспомогательными модулями есть. Они создавались не просто так, а чтобы можно было писать программы еще проще, удобнее и быстрее, чем это можно реализовать на стандартном языке QSP. В данном случае ты хороший программист. Бесконечно усовершенствовать, дополнять, перерабатывать, вводить новые функции и возможности программы, но ей не пользоваться - это не знаю что. Даже перфекционисты пользуются тем, что улучшают.
Твой модуль не открыт - это не дает примеров кода для усовершенствования навыков других программистов, обучающихся на примерах. У тебя нет справки для тех, кто был бы готов воспользоваться этими наработками, а значит движок твой и интересен только тебе. Но в каком ключе он тебе интересен? У тебя есть мощь, воспользовавшись которой ты можешь написать любые квесты с любыми ветвлениями диалогов и ситуаций быстрее, чем любой другой программист на этом языке, раз в двадцать. Значит в качестве сценариста себя не видишь. Но и другим не даешь воспользоваться своим трудом. Однако сегодня видел это сообщение и на других бордах в других сообществах, реклама проекту дана хорошая.
Какие цели ты преследуешь? Может быть доказать, что из пары десятков функций и процедур можно создать пару сотен процедур и функций? Но в этом никто не сомневается.

Ты можешь рассказать нам, немного отойдя от темы обсуждения, что от тебя ожидать дальше? Неужели новые модули?

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

Отредактировал ради этого момента. Пусть вырвано из контекста, но это заявление. Значит - модули.

Я очень хочу ошибаться в своих мыслях.

Edited at 06.04.2012 15:46 (13 years ago)

Martin Doriel:

Я очень хочу ошибаться в своих мыслях.

очень ошибись! =)

Zeantar:

В этой готовой игре так уж необходимы постоянные уточнения? (На лестнице? А вправо или влево? А вниз или вверх? А потом куда? А надо ли надеть штаны?)

Zeantar:

Предоставь “нетривиальный пример”, а не маленькую заготовку. Тогда можно будет судить, удалась игра или нет, перенасыщена ли она микро-диалогами, скучна ли?

По-моему, ты путаешь пример реализации отдельного решения с демонстрацией готовой игры. Если ты говоришь о том, нужен ли такой подобный диалог в игре, то ты темой ошибся - создай новую, там и продолжим. Если ты считаешь, что приведённый пример диалога слишком прост для реализации представленным способом - попробуй запрограммировать его самостоятельно стандартными средствами.

Martin Doriel:

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

В данном случае мне хотелось бы сконцентрировать и заинтересовать людей на конкретном решении, а не на исходниках движка. Другими словами выложив этот проект, мне хочется услышать мысли по поводу реализации заявленной темы, а не её программного исполнения. Потом я открою и исходники, однако слабо представляю, как кто-нибудь будет ими пользоваться. К тому же весь этот проект делался под мои нужды для написания игр в том виде, в каком мне кажется правильными, поскольку использование стандартных локаций, инвентаря, меню действий и всего такого — тупиковый путь, хотя и пропагандируется флагманами QSP-движения (но об этом не здесь).

Что до “нет справки”, и всего такого, то вот другие мои модули со справкой и исходниками:

  • QSP:Типограф”— модуль для форматирования текста
  • QSP: Экран” — модуль для работы с экраном
  • QSP: Меню” — Модуль для работы с меню (расширение функционала оператора “menu”)
  • QSP: Таблицы” — Модуль для работы с таблицами данных

Думаешь, кто-нибудь их использовал? У меня такой информации нет. Поэтому я не питаю особых иллюзий по поводу того, что представленными решениями кто-то из QSP-сообщества будет пользоваться, и в настоящее время не трачу много времени для подготовки справки и примеров для гипотетических пользователей.
Но почему бы и не представить то, что уже сделано, если результат выходит на, мой взгляд, интересным.
И, как я уже говорил на форуме ификшен:

Я не пишу движок. Я пишу игру, и её написание требует реализации определённых технических средств.

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

Zeantar:

А как разработчика меня интересует сложность использования движка.

Теперь я думаю, что сложность будет запредельная.

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

Если у кого-то есть вопросы или претензии по модерации, пишите мне в ЛС. Любые попытки обсуждать это на форуме - буду удалять.

Log in or Register to post comments.