Forum.iFiction.Ru

iFiction.Ru · ifHub · FAQ · IFWiki · QSP · URQ · INSTEAD · AXMA

форум об interactive fiction, текстовых приключенческих играх и всём таком...

Вы не зашли.

0    0    #1
15.08.2011 10:29

Olegus t.Gl.
Участник (+1056, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Az: Диалоги в игре

Вернулся к теме диалогов. Если кому есть, что сказать по теме, или кто может дать ссылку на какие-то материалы (крайне желательно с аннотацией) — велкам в тему.

Неактивен

0    0    #2
24.08.2011 09:06

Olegus t.Gl.
Участник (+1056, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Re: Az: Диалоги в игре

Olegus t.Gl. написал:

Вернулся к теме диалогов…

Думал-думал и многое понял… :-) Занятно, но стоило отложить всякие заумные размышления на тему диалогов и взяться за реализацию (ибо сколько можно!) более простого решения — внезапно простые по отдельности кусочки сложились в любопытное решение. Ключевой, конечно же, момент — запись переходов между фразами/наборами фраз.

Неактивен

1    0    #3
25.08.2011 10:27

Olegus t.Gl.
Участник (+1056, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Re: Az: Диалоги в игре

Работаю с проблемой: исключение тем/ветвей диалога и "сдвижка" тем. То есть, если игрок расспросил о чём-то NPC, начав с выяснения состояния здоровья (что нужно было только для завязки/атмосферы), а закончил выяснением, где можно найти ценный предмет, — в следующий раз, когда он пытается поговорить с этим же NPC, имеет смысл начинать диалог уже с сути, а именно повторения вопроса про интересующий предмет.

Да, это можно делать вручную кодом, но кое-что хотелось бы заложить в уже в самом движке. Я даже знаю, что нужно сделать, но это несколько муторно — опять чуть ли не обход по графам. Наработки есть — у меня в определении местоположения объекта (есть ли у игрока монетка, которая в кошелёчке, который в сумочке, которая в чемодане, который у игрока?) подобные алгоритмы задействованы, но времени начинает не хватать…

Неактивен

1    0    #4
27.08.2011 00:22

Olegus t.Gl.
Участник (+1056, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Re: Az: Диалоги в игре

Кажется, мне удалось решить (на практике, а не в теории) большую часть проблем по теме диалогов. По крайней мере в том виде работы с диалогами, на котором я сейчас остановился.

Осталась, правда, одна задачка — как-то органично размещать фразу-окончание диалога, типа "Побегу-ка я дальше"? Можно, конечно, через код, но хочется чего-то более тонкого…

Примерный код построения диалога кота и косарей (я добавил к нему пару фраз):

Код:

GS 'ДобавитьФразу', 'Косари', 'Начало(=) -> Приветствие',                 'Ух ты! Кот в сапогах!'

GS 'ДобавитьФразу', 'Кот',    'Приветствие(=) -> ПослалиНаПсарни',        'Эй, деревня! До барина-то вашего добраться как?'
GS 'ДобавитьФразу', 'Кот',    'Приветствие(=) -> НуЗдравствуй',           'Косари, а косари, как сами-то? Живы-здоровы?'

GS 'ДобавитьФразу', 'Косари', 'ПослалиНаПсарни(-) -> Возвращение(!)',     'Здорово, котище. А ты по этой дорожке беги, только на развилке налево прими - так короче будет.'
GS 'ДобавитьФразу', 'Кот',    'Возвращение(=) -> СамТакой',               'Плохие вы путникам советы даёте…'
GS 'ДобавитьФразу', 'Косари', 'СамТакой(-) -> АхТак',                     'Ну если путники к нам без уважения, то и нам резона нет. А дорога до замка там и вправду короче.'
GS 'ДобавитьФразу', 'Кот',    'АхТак(=) -> Конец',                        'Эх, косари! Поколотил бы я вас, да времени нет!'
GS 'ДобавитьФразу', 'Кот',    'АхТак(=) -> НуЗдравствуй',                 'Ну простите, если груб был. Как сами-то? Как живётся, как работается?'

GS 'ДобавитьФразу', 'Косари', 'НуЗдравствуй(=) -> ПроБарина + Пока',      'Да милостью барина живы да сыты. Барин у нас щедрый, не то что прежний.'

GS 'ДобавитьФразу', 'Кот',    'ПроБарина(.) -> ДорогаКБарину',            'А как добраться до барина вашего?'
GS 'ДобавитьФразу', 'Кот',    'ПроБарина(-) -> ТакМыНеМестные',           'И часто у вас здесь барин меняется?'

GS 'ДобавитьФразу', 'Косари', 'ДорогаКБарину -> ПроБарина',               'Да вот по этой дороге и беги, только на развилке держись прямо.'

GS 'ДобавитьФразу', 'Косари', 'ТакМыНеМестные(-) -> ПроМестных',          'Как часто здесь меняется — не знаем, мы сами не местные. Батрачим то тут, то там по сезонам. А в этих местах впервые.'
GS 'ДобавитьФразу', 'Кот',    'ПроМестных(.) -> ПроСтаруху',              'А из местных тут живёт кто-нибудь?'
GS 'ДобавитьФразу', 'Косари', 'ПроСтаруху -> КтоЕщё',                     'Ну… у леса можно встретить полоумную старуху — вот она вроде из местных.'
GS 'ДобавитьФразу', 'Кот',    'КтоЕщё -> БольшеНикого',                   'Что, вот так одна и живёт?'
GS 'ДобавитьФразу', 'Косари', 'БольшеНикого -> ПроБарина',                'Да, больше никого мы здесь не встречали.'

GS 'ДобавитьФразу', 'Кот',    'Пока -> Конец',                            'Ну да ладно, побегу я дальше...'

Неактивен

0    0    #5
27.08.2011 15:20

Olegus t.Gl.
Участник (+1056, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Re: Az: Диалоги в игре

Экспериментирую со склейкой тем. В предыдущем примере появилась тема "Пока" и она была "приклеена" к теме "ПроБарина": "ПроБарина + Пока". Таким образом, когда выводится тема "ПроБарина", к перечню фраз добавляются ещё и фразы из темы "Пока".

Неактивен

0    0    #6
28.08.2011 23:20

Olegus t.Gl.
Участник (+1056, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Re: Az: Диалоги в игре

Так, интегрировал наработки по диалогам в Адский Движок. Внешне диалог (код которого приведён выше) выглядит так:

https://ifiction.ru/i/scr/qsp_scr_dialogs_001.png

P.S. В процессе диалога все ссылки на экране гасятся. По завершении — активируются.

Неактивен

0    0    #7
06.04.2012 12:45

Olegus t.Gl.
Участник (+1056, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Re: Az: Диалоги в игре

Выложил отдельным проектом реализацию непростого диалога Чешира: https://forum.ifiction.ru/viewtopic.php … 484#p23484

Неактивен

0    0    #8
21.08.2012 11:05

Olegus t.Gl.
Участник (+1056, -249)
Откуда: Москва
Зарегистрирован: 01.03.2001
Сообщений: 2881
Вебсайт

Re: Az: Диалоги в игре

Наткнулся на небольшую проблему в модуле диалогов.

Допустим, есть у меня такой вот диалог:
https://ifiction.ru/i/scr/az_dialog_problem_01.png
Начинается он с выбора фразы из перечня:

  1. Против кого мы выступаем на этот раз?...
  2. Долго ещё лететь?
  3. Нет, ничего...

Если выбрать вопрос "Против кого…", то игрок получит ответ про колдунью и вернётся к начальному перечню (из которого вопрос "Против кого…" исчезнет насовсем).

Если выбрать вопрос "Долго ещё…", то игрок получит ответ в зависимости от того, спросил он про колдунью или нет, после чего вернётся к начальному перечню (при этом вопрос "Долго ещё…" исчезнет на время текущей сессии диалога — то есть, если завершить диалог и начать его заново, то этот пункт появится).

Ну и пункт "Нет, ничего…" просто завершает диалог.

Так вот, если спросить про колдунью, потом спросить долго ли ещё лететь, а потом вновь начать диалог, то пункт "Долго ещё…" будет активным, хотя подпунктов у него по всем условиям уже не будет. И чтобы гасить его автоматически, модулю, собирая перечень активных фраз, нужно смотреть намного глубже в структуру диалога. А это не так просто, учитывая, что диалог может иметь сложную структуру с переходами не только вниз по дереву, но и на другие ветки, вверх, назад или вообще в начало.

В общем-то, уже сейчас эту проблему можно обойти, используя в нужных местах проверку, а есть ли в теме фразы:
https://ifiction.ru/i/scr/az_dialog_problem_01_1.png
Но хочется, чтобы это автоматически происходило.

P.S. Встроить в модуль формирования перечня выводимых вариантов реплик проверку, аналогичную функции "ВТемеДиалогаОсталисьФразы", увы, не получается — там всё несколько сложнее (я уже упоминал про несколько тем, возвраты и всё такое).

В общем, как-то так…

Неактивен

Powered by PunBB
© copyright 2001–2024 iFiction.Ru