Forum.iFiction.Ru

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

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

Вы не зашли.

   #1
04.12.2014 00:56

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Парсер и метапарсер на INSTEAD

Решил начать здесь ветку для парсерных игр в INSTEDe, проблем парсерных модулей. Надеюсь, модератор не удалит.

Я нашел в старом модуле парсера (не метапарсер) такую досаду: у меня в словарной базе есть два глагола:

up = "поднимись, вверх, наверх";
take = "подними, возьми, взять, поднять";

На введёную фразу "поднимись" игра находит в ней якобы два глагола, хотя ПОДНИМИСЬ  отличается от ПОДНИМИ. Если убрать слово "подними" из take, то подняться можно и наоборот, если убрать "поднимись" из up, то станет возможным поднять предмет словом ПОДНИМИ. У меня вопрос к Петру: МОЖНО ЛИ УСОВЕРШЕНСТВОВАТЬ ДАННЫЙ ПАРСЕРНЫЙ МОДУЛЬ, ЧТОБЫ ПРОГРАММА ПОНИМАЛА ОБА ЭТИХ СЛОВА? Ввожу же не два глагола, а одно. И они по-разному заканчиваются. Пример игры с парсерным модулем прилагаю. Команда поднимись нужна во второй локации. Из первой во вторую - спустись или вниз. Во второй локации работает глагол вверх или наверх.

Вот ссылка на пример: http://adventuru.jimdo.com/instead/%D1% … /?logout=1

Отредактировано Vladimir (04.12.2014 01:48)

Неактивен

   #2
04.12.2014 10:11

gloomy
Модератор (+164, -54)
Зарегистрирован: 21.02.2009
Сообщений: 345

http://instead.syscall.ru

Re: Парсер и метапарсер на INSTEAD

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

В метапарсере эти проблемы были решены, да и код игр на нем проще. Документация по метапарсеру также кктуальна, поэтому я предлагаю перейти к использованию мп.
Старый концепт мне сложно доработать, я его практически не помню. Можно двигать это направление, конечно (примерно как адрифт будет) но повторюсь, метапарсер показал себя с гораздо лучшей стороны.

Вот документация: http://instead.syscall.ru/wiki/ru/gamed … метапарсер

Процитирую сам себя:

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

- игрок по прежнему думает, что парсер понимает все;

- парсер слишком широко понимает игрока, в итоге возникают казусы, когда игрок получает совсем неожиданную реакцию на свои действия;

- парсер не понимает ввод и вывод неудачных реакций не информативен;

- писать игру очень сложно, так как не так просто написать правильные, непротиворечивые шаблоны

------
Вот последний пункт, это оно. smile

Так что в метапарсере был учтен предыдущий опыт.

Неактивен

   #3
04.12.2014 12:34

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: Парсер и метапарсер на INSTEAD

По старому парсеру. Я нашёл, как исправить ошибку. Теперь у меня всё работает. И поднимись, и понимись на гору, и подними канат, и поднимись наверх, и вверх, и идите наверх, и идите на скалы. Я решил сделать цикл уроков по парсерным играм. Там будет и платформа Instead. Сначала сделаю на простом парсере уроки, затем, когда разберусь с метапарсером - попробую и с ним уроки сделать.

Неактивен

   #4
04.12.2014 12:58

gloomy
Модератор (+164, -54)
Зарегистрирован: 21.02.2009
Сообщений: 345

http://instead.syscall.ru

Re: Парсер и метапарсер на INSTEAD

С одной стороны, не могу не радоваться популяризации инстеда, с другой стороны,
тот вариант парсера оказался, как не крути, ущербным. МП по коду игры оказывается даже проще,
и для него (в отличие от старой реализации) есть документация. И главное, старый вариант не развивается
(и не поддерживается) разработчиком.

Поэтому, двоякие чувства. smile

Понимаю, что с МП нужно разбираться, а статью по старой реализации можно написать уже сейчас.
Но я бы в данном случае порекомендовал бы не писать статью на эту тему вообще, а в будущем (если останется запал) освоить и написать про МП.

Неактивен

   #5
05.12.2014 05:22

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: Парсер и метапарсер на INSTEAD

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

А то картинка по этому фрагменту выводится, а текст Пролог выводится только в текстовом окне.

main = cutscene {
    attr [[ ~intro ]];
    nam = 'Пролог';
    pic = 'image/location_02.png';
    dsc = {[[Добро пожаловать в приключенческую игру "Иван Царевич"]]}
.....

Хотелось бы, чтобы было примерно так (Картинка находится в графическом окне. Название сцены перенёс из текстового окна в графическое в фотошопе):

http://u.jimdo.com/www52/o/sbae8ba0c541c08f7/img/ib772d7d81c59aeba/1417747799/std/image.jpg

Отредактировано Vladimir (05.12.2014 05:55)

Неактивен

   #6
05.12.2014 08:21

gloomy
Модератор (+164, -54)
Зарегистрирован: 21.02.2009
Сообщений: 345

http://instead.syscall.ru

Re: Парсер и метапарсер на INSTEAD

Картинка красивая.

Вообще стандартный способ вставки картинок в игру для МП -- это gfx -  в документации он упомянут. При этом картинка встраивается прямо в текст, показываясь 1 раз при попадании на эту сцену.

Название сцены в зоне картинке -- это конкретный прием в игре Иван Царевич (которая как документация была перенесена с ZX).

Сделать как на картинке, как я понимаю, можно, сделав два шага:

- задать в теме режим графики как fixed, а не float или embedded. При этом картинка будет фиксирована над текстом, а над картинкой будет название сцены;
- задать свою функцию отображения титра игры (если не нравится стандартная), например:


Код:

instead.get_title = function(s)
            if parser.notitle then
                       return
            end
            local scene = stead.dispof(stead.here());
            if type(scene) ~= 'string' then
                     scene = ''
            end
            return txtb(scene)
end

Надеюсь, это поможет.

Неактивен

   #7
05.12.2014 11:46

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: Парсер и метапарсер на INSTEAD

http://u.jimdo.com/www52/o/sbae8ba0c541c08f7/img/ice15eb827e775f12/1417769135/std/image.jpg  Может вы не совсем меня поняли. Картинку статическую я хотел бы иметь во всех сценах (и конечно разные). Это я сделал. Но названия сцен выводятся под картинкой в текстовом окне. Я видел в Иване Царевиче, что можно в графическое окно помещать текст. Но это помещается вместо картинки. Либо название сцены либо картинка.
В theme.ini у меня стоит: scr.gfx.mode = float-middle-center
Экран scr вверху, win экран расположен ниже, inv экран под win экраном. Все работает нормально, картинки стоят, текст сколлируется. Единственный недостаток - названия сцен в текстовом win. Я по вашему совету изменил scr.gfx.mode = fixed. Запустил. Картинка встроилась в текстовой экран (по центру), не двигалась. Текста не было видно. Одни стрелки стояли. Приподнял координаты win экрана к верху. И все осталось по-прежнему. Как и раньше: картинки стоят, текст скролируется под картинками, но названия сцен в тексте. Пробовал вставить код приведённый выше - ничего не изменилось. Вот игра: http://adventuru.jimdo.com/app/download … 1417770298

Ага! Понял! Я сейчас сделал начало игры по шаблону, данному в интернете и всё получилось вместе с вашим кодом. Спасибо.

Отредактировано Vladimir (05.12.2014 12:52)

Неактивен

   #8
05.12.2014 13:26

gloomy
Модератор (+164, -54)
Зарегистрирован: 21.02.2009
Сообщений: 345

http://instead.syscall.ru

Re: Парсер и метапарсер на INSTEAD

Да, там надо было поменять в теме режим картинки на fixed + определить свою функцию title, может я правда что то еще забыл...

На самом деле, может быть лучше gfx использовать?
Просто обычно картинка место занимает, и в парсере кажется лучше, чтоб она уезжала в историю после просмотра, но это на усмотрение автора, конечно.

Неактивен

   #9
05.12.2014 13:32

gloomy
Модератор (+164, -54)
Зарегистрирован: 21.02.2009
Сообщений: 345

http://instead.syscall.ru

Re: Парсер и метапарсер на INSTEAD

А, понял!
В игре стояло parser.notitle = true,
его надо было убрать.

еще заметил, что словарь не создан для игры (вернее взят из игры про ивана-царевича)
А в игре прописаны все формы существительного 'кремень'.

Советую прочитать начало документации по МП
, иначе так придется для всех слов писать падежи (для тех, которых не было в иване царевиче), а этого не нужно делать!!!

P.S. Если уж так не хочется читать документацию - просто нажмите во время игры f11 - и по мере написания игры нажимайте снова - это будет обновлять словарь.

Неактивен

   #10
05.12.2014 14:57

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: Парсер и метапарсер на INSTEAD

gloomy написал:


Советую прочитать начало документации по МП
, иначе так придется для всех слов писать падежи (для тех, которых не было в иване царевиче), а этого не нужно делать!!!

P.S. Если уж так не хочется читать документацию - просто нажмите во время игры f11 - и по мере написания игры нажимайте снова - это будет обновлять словарь.

Понял, уже начал читать.

Неактивен

   #11
07.12.2014 02:59

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: Парсер и метапарсер на INSTEAD

У меня вопрос по настройкам  шрифтов окна
Запись в теме выглядит так, например: win.fnt.name = {theme/libs-b.ttf,  theme/Bookman.otf,  theme/palette.ttf,   theme/arial.ttf}


С первыми тремя я разобрался: {основной текст,  название сцен,  приглашение к действию,   ?   }

А четвертый шрифт нигде не проявляет себя. Он где выводится?

Неактивен

   #12
07.12.2014 11:23

gloomy
Модератор (+164, -54)
Зарегистрирован: 21.02.2009
Сообщений: 345

http://instead.syscall.ru

Re: Парсер и метапарсер на INSTEAD

Копирую из документации:
http://instead.syscall.ru/wiki/ru/gamed … dl-instead
win.fnt.name = путь к файлу-шрифту (строка). Здесь и далее, шрифт может содержать описание всех начертаний, например: {sans,sans-b,sans-i,sans-bi}.ttf (заданы начертания для regular, bold, italic и bold-italic). Вы можете опускать какие-то начертания, и движок сам сгенерирует их на основе обычного начертания, например: {sans,,sans-i}.ttf (заданы только regular и italic);

Так что это начертание шрифта, а как он применяется в игре - дело уже автора и движка. И, вообще говоря, предполагалось что там один шрифт с разным начертанием, а не разные шрифты. smile

Неактивен

   #13
08.12.2014 06:14

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: Парсер и метапарсер на INSTEAD

С шрифтами я понял. Нр у меня тут проблемка ещё возникла. Сделал две темы адвентюрно-метапарсерной. Одна светлая, другая темная. Хотел сделать в программе изменение тем налету. Смена фонов на лету получилась, а вот со сменой цвета текста что-то не выходит.
Написал так:

theme.win.color ( white, white, white );

Может не правильно написал? В документации так: theme.win.color(fg, link, alink)

Поставил так:
theme.win.color(0, 0, 0);

И тоже не меняет.

Отредактировано Vladimir (08.12.2014 06:45)

Неактивен

   #14
08.12.2014 13:05

gloomy
Модератор (+164, -54)
Зарегистрирован: 21.02.2009
Сообщений: 345

http://instead.syscall.ru

Re: Парсер и метапарсер на INSTEAD

Vladimir написал:

Смена фонов на лету получилась, а вот со сменой цвета текста что-то не выходит.
Написал так:

theme.win.color ( white, white, white );

Либо:

Код:

theme.win.color ( 'white', 'white', 'white' );

Либо:

Код:

theme.win.color ( '#ffffff', '#ffffff', '#ffffff' );

Неактивен

   #15
09.12.2014 13:02

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: Парсер и метапарсер на INSTEAD

Спасибо. Понял. Было бы лучше в документации иметь примеры ко всем командам (по одному, два), тогда таких вопросов бы не было. Тут у меня еще одно предложение по метапарсеру. Просмотрел НАСТРОЙКИ МЕТАПАРСЕРА и не нашёл отключение подсказок в виде выводимых глаголов при ручном вводе, которые имеются в игре. А то Было бы как в классическом варианте. Играющий вводит глагол, и если он имеется в словарной базе глаголов и синонимов, то он пишется в инпут строке, но как только встретилась буква, которая отсутствует в глаголах (базе) - просто вывести знак вопроса "?". Можно так сделать? Наверняка много исправлять придется в модуле. А фишка хорошая. Можно было бы кучу  навводить синонимов и не видеть их в инвентарном окне. Можно было бы ввести "в" и дальше спокойно вводить и "взять", и "возьми", и "возьмите" и не видеть на экране этих синонимов. Сделайте, пожалуйста, этот параметр для метапарсера. Назвать его можно HIDEPROMPT (скрыть подсказки)

Неактивен

   #16
09.12.2014 16:27

gloomy
Модератор (+164, -54)
Зарегистрирован: 21.02.2009
Сообщений: 345

http://instead.syscall.ru

Re: Парсер и метапарсер на INSTEAD

Вообще, насколько я помню все это есть.
Возможно, документацию надо доработать,
Как я помню, параметр называется:

Код:

parser.hideverbs = true

Но и без него, в глаголах если писать ~ в начале (ну и в словах это работает, не только в глаголах), будет то что нужно.


C ? тоже есть - я сейчас не помню параметр, но если нужно - посмотрю.
Причем можно и блокировать ввод неверных фраз и давать их ввести (но сообщать что именно не понял парсер).


Вообще в метапарсере масса вариантов использования, например, в игре Лидия он применяется своим способом, и т.д. Он обкатан уже неплохо.

P.S.

Вспомнил про ?:

Код:

parser.empty_warning = '?'
parser.err_filter = true -- если хотим запретить ввод заведомо неверных фраз

Неактивен

   #17
10.12.2014 03:33

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: Парсер и метапарсер на INSTEAD

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

НО Я ХОТЕЛ БЫ ЧТОБЫ ПРИ РУЧНОМ ВВОДЕ НЕ ВЫВОДИЛИСЬ НИКАКИЕ ГЛАГОЛЫ ПОД КУРСОРОМ.

ЧТОБЫ ПОД КУРСОРОМ БЫЛА ЧИСТАЯ СТРОКА. И ТОЛЬКО ИНОГДА ПОЯВЛЯЛСЯ БЫ ЗНАК "?",

КОГДА ВВОДИЛСЯ БЫ НЕ ИЗВЕСТНЫЙ ГЛАГОЛ.

Неактивен

   #18
10.12.2014 08:52

gloomy
Модератор (+164, -54)
Зарегистрирован: 21.02.2009
Сообщений: 345

http://instead.syscall.ru

Re: Парсер и метапарсер на INSTEAD

А, понятно. Это можно, наверное, приделать, но правда тогда идея метапарсера теряется и вернутся недостатки, от которых я как раз уходил. А так - просто гасить вывод, наверное даже переписывать ничего не придется.

Неактивен

   #19
10.12.2014 08:54

gloomy
Модератор (+164, -54)
Зарегистрирован: 21.02.2009
Сообщений: 345

http://instead.syscall.ru

Re: Парсер и метапарсер на INSTEAD

А вообще попробовал, прикольно!
Так как и табуляция остается и вопрос - не так уж все и страшно,
Сделаю такую настройку и приведу здесь.

Неактивен

   #20
10.12.2014 09:01

gloomy
Модератор (+164, -54)
Зарегистрирован: 21.02.2009
Сообщений: 345

http://instead.syscall.ru

Re: Парсер и метапарсер на INSTEAD

В общем:

Код:

 paser.hohints = true

Брать тут: http://sourceforge.net/p/instead-games/ … er/parser/

Неактивен

   #21
10.12.2014 11:22

Vladimir
Участник (+154, -182)
Откуда: Владивосток
Зарегистрирован: 01.09.2012
Сообщений: 270
Вебсайт

Re: Парсер и метапарсер на INSTEAD

gloomy написал:

В общем:

Код:

 paser.hohints = true

Скопировал код, и вставил в игру.... Ошибка. Не понял. А когда заглянул в изменения метапарсера, то смотрю, а там написан код с parser.nohints
Всё заработало. Спасибо. Теперь настоящая классика.

Неактивен

Powered by PunBB
© copyright 2001–2018 iFiction.Ru