Предлагаю обсудить здесь направления по усовершенствованию парсера относительно классической его реализации.
Классическая реализация предполагает
Конструкции:
глагол
глагол + (объект)
глагол + (прямой объект) + (косвенный объект)
глагол + "строка"
глагол + число + (объект)
персонаж, (команда)
междометие
объекты описываются:
прилагательным или существительным отдельно, прил. + сущ., сущ. + связка + прил
перед существительным или прилагательным может стоять предлог, изменяющий действие или переназначающий прямой-косвенный объект . Ту же роль может иметь окончание (склонение) прилагательного или существительного.
В русском языке прилагательное, связанное с существительным, может идти за ним без связки предлогом (клок шерсти)
Не классическая:
-Наречия
-Вопросы (кто, что, зачем, как, почему, зачем) + конструкция следом (огр, зачем мне ключ?)
-предложение, начинающееся с объекта или из него состоящее (рычаг!) (не в уточнении)
-Три объекта в команде (прибить кошелек к полу молотком)
-Констатация факта (видимо, обращение к персонажу)
Нестандарт усложняет жизнь автору, но дружелюбен к новичкам. Правильно оформленный, он будет сводить все к стандартным действиям, которые мог предусмотреть автор, либо дать адекватный ответ.
Какие ещё нестандартные вещи любят пробовать игроки и оказываются обделенными? Как можно это реализовать?
Отредактировано GrAndrey (02.12.2010 15:18)
Неактивен
GrAndrey написал:
Предлагаю обсудить здесь направления по усовершенствованию парсера...
... Как можно это реализовать?
Реализовать средствами TADS-2?
Или средствами других существиющих платформ?
Или попытаться представить в идеале, без привязки к имеющимся на текущий момент платформам?
Прошу определиться с рамками дискуссии
Неактивен
Тогда вот примеры "простых" действий:
>выйди
Парсер требует уточнения, куда выйти, хотя для человека понятно, что находясь в комнате, выходим в единственную дверь, находясь в прихожей, выходим на улицу (если в комнату, то это будет "войди"). Находясь во дворе выходим на улицу и т.д.
>вернись
если зашли не туда, логично вернуться в предыдущую локацию, в не высчитывать с - ю - з - в.
>положи назад
>отдай назад
Взял не нужное - верни где взял. Парсер "не помнит" где мы это взяли всего лишь ход назад.
Если начали диалог (не менюшный), неестественно каждую фразу начинать с имени собеседника. Всё что вводим до выхода из диалога должно адресоваться персонажу с которым говорим.
Это для разминки...
Отредактировано ASBer (02.12.2010 17:25)
Неактивен
выйти: это легко и органично реализуется в TADS, когда автор прописывает направление "out" для локации
Вернуться: проблемно, потому что обратного пути может и не быть, или обратный путь вовсе не в противоположном изначальному направлению.
Можно сделать так(системное сообщение): "Ты пришел сюда с юга, и хотел вернуться, направившись на север, но обнаружил, что так ты не пройдешь." Если игрока коварно перенесли из локации в локацию, игра даже не поймет и будет посылать в направлении последнего перехода
Чтобы игрок что-то вернул или положил обратно? Да ни в жизнь, эти клептоманы только карманы набивают
Отредактировано GrAndrey (02.12.2010 18:43)
Неактивен
ASBer написал:
Тогда вот примеры "простых" действий:
>выйди
ГрАнд прав, тут никаких проблем. Просто специальное свойство комнаты.
>вернись
Можно определить в классе, соответствующем комнатам, два свойства. Одно будет определять предыдущую локацию, а другое - возможность возвращения туда. Затем для глагола прописать реакции на сочетания значений этих свойств.
>положи назад
>отдай назад
Это действительно сложнее. Но в принципе можно прописать свойство с последней локацией и для класса предметов. Правда, здесь есть много сложностей - например, если мы взяли из шкафа зонтик, раскрыли его и пытаемся положить обратно в шкаф, а он не лезет;).
Мои предложения рассчитаны, конечно, не только на ТАДС, но платформа должна быть объектно-ориентированной.
Отредактировано uux (03.12.2010 06:28)
Неактивен
> коагируй
Неактивен
GrAndrey написал:
Чтобы игрок что-то вернул или положил обратно? Да ни в жизнь, эти клептоманы только карманы набивают
На этом можно делать загадки-ловушки - пока колечко на место не положишь, дверь не откроется ^_^ а вода всё прибывает....
Неактивен
Чтобы полноценно отслеживать "нетрадиционные команды", игра должна иметь "транскрипт" всех действий игрока - что он делал, куда ходил, что говорил, к чему это привело и т.п. Т.е. игра должна находиться "в потоке", быть "соучастником" приключения, что радикально отличается от текущего подхода. когда игра - всего лишь "операционная система", ждущая команд от игрока.
Честно говоря, не представляю, как такое сделать. Надо много думать.
Неактивен
да, давно беспокоит этот момент. Чтобы игрок ощущал диалог и не испытывал каждую минуту жесткость рамок интерфейса, игра должна знать контекст команд.
Например:
>взять палку
Взята.
>осм
Ты стоишь посреди поляны.
Из кустов тебе под ноги вылетела и упала граната.
> бросить её!!!
(палка) Брошена.
Это происходит потому, что под "её" система понимает последний предмет женского рода, которым манипулировал игрок. В описанной ситуации игрок, скорее всего, имел в виду гранату, но если мы её обозначим "последним объектом женского рода", то также совершим ошибку в общем случае - игрок часто пропускает знакомые описания и сообщения демонов. Для него "её" - по прежнему палка.
Как тут следует поступать - с трудом представляю, тут и человек может неправильно понять.
Неактивен
Еще хотелось бы более точных глаголов в описаний действий:
Комната. На полу лежит монета, на стене висит пальто.
>возьми монету
Ты поднял монету
>возьми пальто
Ты снял пальто
Неактивен
Еще хотелось бы более точных глаголов в описаний действий:
Комната. На полу лежит монета, на стене висит пальто.
>возьми монету
Ты поднял монету
>возьми пальто
Ты снял пальто
Это не может делать платформа, об этом придётся думать автору игры.
Неактивен
ASBer написал:
Еще хотелось бы более точных глаголов в описаний действий:
Комната. На полу лежит монета, на стене висит пальто.
>возьми монету
Ты поднял монету
>возьми пальто
Ты снял пальто
Ну, опять-таки можно ввести для объектов свойство, отмечающее, висит ли объект, лежит ли на полу, вставлен ли куда и т. п., и анализировать это свойство при взятии объекта.
Неактивен
Какие ещё нестандартные вещи любят пробовать игроки и оказываются обделенными? Как можно это реализовать?
мой ответ чемберлену: https://forum.ifiction.ru/viewtopic.php?id=1490
и не вижу ровно никакого смысла создавать у игрока иллюзию, будто бы парсер понимает всё что в голову взбредёт.
а вот в том, чтобы направлять игрока на 'путь истинный', помогая сформулировать понятную парсеру фразу, в этом смысл есть.
самая засада с нестандартом в том, что парсер может понять из фразы совсем не то, что задумывалось.
Какие ещё нестандартные вещи любят пробовать игроки и оказываются обделенными? Как можно это реализовать?
хороший вопрос, тока я не люблю пробовать нестандартные вещи. интересно посмотреть ответы остальных))
--
Нестандарт усложняет жизнь автору, но дружелюбен к новичкам.
авторам- усложняет. дружелюбен ли к новичкам- большой вопрос.
Отредактировано noname (04.12.2010 01:14)
Неактивен
"выйти" и "вернуться"- поддерживаю, т к не считаю это нестандартом.
Вернуться: проблемно, потому что обратного пути может и не быть, или обратный путь вовсе не в противоположном изначальному направлению.
однако, направление не имеет значения. имеет значение то, из какой локации ГГ пришёл, и может ли (возможно ли и известен ли ему путь) вернуться в неё.
Неактивен
ещё в тему:
можно вспомнить подробный отзыв(обзор) одного из новичков в парсере об игре Корвина про башню.
из него видно, что игрок пробовал царапать стену, и др подобные действия.
хочу обратить особое внимание: пробовались стандартные(по форме) команды, которые просто не возможно предусмотреть.
и я не понимаю, с чего вообще можно было подумать, что новичок станет вводить что-то типа "рычаг!",
"давай-ка", и другой подобный нестандарт.
по-моему, эти фразы- для опытных зубров only
Отредактировано noname (04.12.2010 01:28)
Неактивен
noname написал:
и я не понимаю, с чего вообще можно было подумать, что новичок станет вводить что-то типа "рычаг!",
"давай-ка", и другой подобный нестандарт.
Это офф-топ, конечно;) - пытливому новичку может прийти в голову не только это, а вообще такие вещи, что и представить себе трудно.
Отредактировано uux (04.12.2010 07:05)
Неактивен
У меня в одной из игр логировались все запросы.
Вы не представляете, КАК изобретательны игроки. Например, они могут попросить парсер засунуть себе что угодно в.. во что угодно.
Неактивен
Oreolek написал:
У меня в одной из игр логировались все запросы.
Вы не представляете, КАК изобретательны игроки. Например, они могут попросить парсер засунуть себе что угодно в.. во что угодно.
и? какой из этого следует вывод? т е- в каком направлении тебя подталкивает знание этого факта?
reply to off-top:
спойлер…
Неактивен
я так понимаю, что новички бывают разные:
- которые совсем не представляют что такое парсерки, и могут ввести не пойми что. таким по-любому нужна какие-нить инструкции, статьи, помощь более опытных игроков.
- которые слышали/представляют что такое парсерка, мож читали что-то об этом. и вводят как бы правильные фразы, но такие, которые не предусмотришь, т к невозможно предусмотреть всё.
- игроки, которые имеют опыт игры в парсерки, но которые всё равно не могут знать, что предусмотрел автор в игре, а что- нет. и которым не всегда интересно тыкаться и перебирать.
- опытные игроки, у которых нет проблем в общении с играми. а если есть- то это уже проблема авторов игр. такие игроки примерно представляют возможности и ограничения парсерок, и получают удовольствие как от нахождения нужных действий, так и от обнаружения, что игра понимает и некоторые не вполне стандартные фразы.
--
кому может помочь обработка нестандартных фраз? самым опытным, и ещё более опытным игрокам. новичкам(на любом этапе) нужно нечто другое.
--
не, ну если кто-то и вправду нашёл способ выдавать разумную реакцию на любую безумную фразу- я буду очень рад, и ещё больше- удивлён.
--
вот такое моё мнение.
Неактивен
noname написал:
Oreolek написал:
У меня в одной из игр логировались все запросы.
Вы не представляете, КАК изобретательны игроки. Например, они могут попросить парсер засунуть себе что угодно в.. во что угодно.и? какой из этого следует вывод? т е- в каком направлении тебя подталкивает знание этого факта?
В том направлении, что хочешь или нет — к тебе будут приходить совершенно левые люди и писать совершенно безумные фразы. И твоя игра совершенно не обязана на них осмысленно отвечать. Что важнее, так это то, что она не должна допускать ложных тревог (когда какая-то белиберда реально понимается как одна из команд — игра выполняет команду — возможно, это нужная команда, игрок якобы угадал глагол) и предусматривать хотя бы очевидные решения проблем и действия над предметами.
Платформа мечты — это хорошо, но в любом случае основная часть работы лежит на авторе игры.
Неактивен
Для "дальше" и "вперед" можно ввести специальные свойства-направления для локации.
Либо, как вариант, продолжать двигаться по этим командам в том направлении, в котором до этого шел игрок.
Впрочем, в данном случае ИМХО нет однозначно правильного решения, все будет зависеть от конкретной игры.
Неактивен
uux написал:
можно ввести специальные свойства-направления для локации.
Да это понятно что очень многое можно сделать прописав специальнае свойства и запрограммировав их обработку, только вся эта рутина опять навалится на автора, а ему и так не сладко.
Хотелось бы чтобы такие действия обрабатывались на уровне платформы/ст.библиотеки.
Неактивен
ASBer написал:
uux написал:
можно ввести специальные свойства-направления для локации.
Да это понятно что очень многое можно сделать прописав специальнае свойства и запрограммировав их обработку, только вся эта рутина опять навалится на автора, а ему и так не сладко.
Хотелось бы чтобы такие действия обрабатывались на уровне платформы/ст.библиотеки.
Главное, чтобы это не выродилось в борьбу автора со стандартными действиями всех этих библиотек.
Неактивен
ASBer написал:
uux написал:
можно ввести специальные свойства-направления для локации.
Да это понятно что очень многое можно сделать прописав специальнае свойства и запрограммировав их обработку, только вся эта рутина опять навалится на автора, а ему и так не сладко.
Хотелось бы чтобы такие действия обрабатывались на уровне платформы/ст.библиотеки.
Хех, это ты загнул однако. У меня в платформе с этим могли бы быть трудности при интернационализации самой платформы. Все, в основном, упирается в разработку стандарта низкоуровневого парсера, с разумным распределением, чего на уровне платформы сделать, а что должно быть в виде стандартной библиотеки.
В простых проигрывателях с этим возни быть не должно, т.к. они реализуют один язык. Каким его зададите, такую поддержку на уровне проигрывателя и обеспечиваете.
Отредактировано Eten (07.12.2010 12:07)
Неактивен
uux написал:
Для "дальше" и "вперед" можно ввести специальные свойства-направления для локации.
Либо, как вариант, продолжать двигаться по этим командам в том направлении, в котором до этого шел игрок.
Очень грамотное решение.
Стандартные отеты:
- Ты не знаешь какое направление в данном случае соответстует движению вперед.
- Ты попытался продолжить идти на север, и обнаружил, что дальше пройти нельзя.
Неактивен
ASBer написал:
Да это понятно что очень многое можно сделать прописав специальнае свойства и запрограммировав их обработку, только вся эта рутина опять навалится на автора, а ему и так не сладко.
Хотелось бы чтобы такие действия обрабатывались на уровне платформы/ст.библиотеки.
Это работа, которую по идее достаточно сделать один раз, а потом использовать везде.
Кстати, пришла свежая мысль про "вперед": тут не все так гладко. Как только игра начнет понимать "вперед", игрок начнет вводить "назад", "вправо" и "влево". Правда, на этот случай можно ввести такой ответ:
> вправо
Шаг вправо-влево считается побегом.
Отредактировано uux (07.12.2010 20:54)
Неактивен
uux написал:
Как только игра начнет понимать "вперед", игрок начнет вводить "назад", "вправо" и "влево"
Ну да, про "вправо" "влево" много уже копий сломано, хотя я не понимаю почему.
Если игра будет помнить направление движения ГГ, вперед/назад/вправо/влево элементарно вычисляется из ю-в-с-з
Неактивен
ASBer написал:
uux написал:
Как только игра начнет понимать "вперед", игрок начнет вводить "назад", "вправо" и "влево"
Ну да, про "вправо" "влево" много уже копий сломано, хотя я не понимаю почему.
Если игра будет помнить направление движения ГГ, вперед/назад/вправо/влево элементарно вычисляется из ю-в-с-з
А если мы летим в открытом космосе? Добавить "вверх" и "вниз" ?)
Неактивен
"Вверх" и "вниз" это стандартные команды перемещения, они заложены в любую уважающую себя платформу. Летим ли мы в открытом космосе или ходим между этажами (например в игре "Башня между мирами"), они должны работать. Разумеется, если ландшафт локации предусматривает такие плоскости.
Неактивен
ASBer написал:
Если игра будет помнить направление движения ГГ, вперед/назад/вправо/влево элементарно вычисляется из ю-в-с-з
В том-то и проблема. Представляешь, какой это гемор для автора 9игры или платформы - неважно)? Хорошо, если игрок просто перемещается, а если он еще и поворачивается, стоя в локации?
Отредактировано uux (09.12.2010 00:11)
Неактивен
uux написал:
В том-то и проблема.
Проблема в ТОМ, что естественный язык содержит в себе массу понятий (можно сказать переменных), значение которых меняется в зависимости от ситуации. Причём каждое по своим правилам...
"Парсер мечты" должен знать все эти понятия и постоянно отслеживать их значения.
Вот например команда:
>осмотри собеседника
Неактивен
Nex написал:
>согласиться
>отказаться
Синонимично "да" и "нет", что уже реализовано сто лет как.
Неактивен
ASBer написал:
>осмотри собеседника
Надо просто давать всем персонажам в игре, с кем можно поговорить, очень короткие имена, чтобы игроку не взбрело в голову такое набирать;).
И еще одна мысль: самые отпетые извращенцы могут додуматься в момент диалога с кем-нибудь набрать "осм собеседника собеседника" вместо "осм себя".
Отредактировано uux (10.12.2010 00:44)
Неактивен
uux написал:
"осм собеседника собеседника" вместо "осм себя".
Если уж говорить про действительно усложненный парсер, то возможен вариант, когда ваш собеседник в процессе диалога отвлёкся на другого собеседника, не прервав текущий диалог с вами.
Тогда "осм собеседника собеседника" вполне осмысленное действие.
Неактивен
> вспомнить шутку
Неактивен
ASBer написал:
uux написал:
"осм собеседника собеседника" вместо "осм себя".
Если уж говорить про действительно усложненный парсер, то возможен вариант, когда ваш собеседник в процессе диалога отвлёкся на другого собеседника, не прервав текущий диалог с вами.
Тогда "осм собеседника собеседника" вполне осмысленное действие.
Сомневаюсь, что в англоязычных платформах разработчики заморачивались поддержкой фраз типа "Buffalo buffalo Buffalo buffalo buffalo buffalo Buffalo buffalo" (википедия), однако под эти платформы пишутся отличные игры (и в них даже упешно играют).
Неактивен
Имхо нормальное решение - реализовать парсер + меню.
В парсере все по старому глагол+существительное. (можно и сложнее, но не нужно)
А в меню высвечивается на каждой локации перечень тривиальных команд, а также появляются возможные конечные варианты ответов.
Через меню решаются все проблемы перемещения: пойди, иди дальше, зайди, вернись и т.д. Причем на каждой локации можно разнообразить действия перемещения: Выйти на улицу, пойти по тропинке, спуститься в трюм (никаких север, юго-запад, вверх и т.п.)
Второй плюс меню конечные варианты ответов которые могут возникнуть при диалогах или применении объектов.
На вопросы по сюжету "- вы согласны запустить реактор? " в меню появляется стандартные варианты - да запускаем, -нет, я не уверен в надежности узлов.
При использовании предметов по сюжету "Вы коснулись сенсоров информационного терминала. Экран ожил предоставив список тем на выбор:" Вот этот список и выбор темы также удобно реализовать через меню.
Неактивен
Наличие меню сводит полезность парсера к нулю.
Потому что игра превращается из думаний «а что сейчас делать» в думания «а какой глагол выбрать». Это уже менюшная игра, а не парсерная.
Неактивен
Ну мы можем проверить, если не согласен. Надо?
В Leisure Suit Larry 7 было меню, в котором высвечивались все команды, которые сработали у игрока. Плюс стандартные типа «осмотреть».
Неактивен
Oreolek, это совершенно не то, о чем говорил HIman.
См. https://forum.ifiction.ru/viewtopic.php … 182#p14182
P.S. здесь действительно пошел оффтоп, начиная с сообщения Хаймена. Был бы здесь нормальный модератор - выделил бы обсуждение в другую тему.
Отредактировано Nex (18.12.2010 08:12)
Неактивен
Oreolek, это совершенно не то, о чем говорил HIman.
Вот пусть он и объясняет. Я понял фразу «парсер + меню» в самом прямом смысле (см. Spellcaster 101).
P.S. здесь действительно пошел оффтоп, начиная с сообщения Хаймена. Был бы здесь нормальный модератор - выделил бы обсуждение в другую тему.
Это будет тема «Упрощение традиционного парсера». :-)
Основную тему никто не поддерживает, зачем же плодить сущности?
Неактивен
Вообще-то Хитман скорее всего промахнулся и не попал в мою тему.
А как в парсерах герой реагирует на команду
> сделай уже сам что-нибудь
?)
Неактивен
Жаль
Неактивен
Dark[Ol(U23)leneri] написал:
А как в парсерах герой реагирует на команду
> сделай уже сам что-нибудь
?)
Сделать реакцию адекватнее, чем она может быть в реальной жизни, все равно не получится.
Неактивен
Комбинированный парсерно-менюшный подход я давно уже обдумывал, и даже сделал пару намёток.
Вот, например. (это эскиз на основе одной локации. для запуска - шмякнуть 6dayz.exe и выбрать koldoon.lua, или просто в командной строке ввести 6dayz.exe koldoon.lua. Файл кросс-платформенный, пойдёт и под виндой, а на маке и под линухами)
чтобы самому адекватно оценить такой "смешанный" жанр я даже ввёл отдельной пимпочкой "отключить парсер" и "включить парсер", т.е. в любой момент можно вообще освободить экран от парсера и оперировать строго мышкой.
Но честно говоря, после всех этих экспериментов я понял что всё-таки чистый парсер рулит.
Менюшное управление - это уже как бы графический квест, и я сам стал ловить себя на том, что играя думаю уже не над тем, что делать, а скорее, куда тыкать курсором.
Впрочем, будет очень интересно услышать и другие мнения.
Отредактировано oleksus6 (29.12.2010 20:23)
Неактивен
Меню само по себе не ограничивает свободу игрока — оно лишь делает границы видимыми.
Неактивен