LINUX.ORG.RU

МЕТАПАРСЕР: каталог минималистичных парсерных игр

 , , ,


5

5

Привет!

Сегодня я запустил небольшой онлайн-каталог парсерных игр https://metaparser.syscall.ru/

Для тех кто не знает. Это такие игры, в которых текст надо вводить с клавиатуры.

Игры работают на облегчённой версии интерпретатора INSTEAD (модуль МЕТАПАРСЕР-3), выглядят просто и запускаются быстро (на компьютере и вашем смартфоне). Никакой графики (хотя, движок их поддерживает), музыки, авто-подсказок, дополнения по клавише «таб» и прочей мишуры.

Зачем?

Сложно сказать. После долгого марафона развития INSTEAD3 мне захотелось вернуться к кристальной простоте настоящей интерактивной литературы. А настоящая интерактивная литература это, все-таки, игры с текстовым вводом. И ничего кроме текста и фантазии. Впрочем, как и в настоящей литературе.

Отдаю себе отчёт, что вряд-ли библиотека привлечёт к себе много внимания, но… Кто знает, может быть я не одинок.

Версия JS-метапарсера, который используется в библиотеке, будет выпущен одновременно с метапарсером 1.4.

Парсер, живи! :)

А пока, добро пожаловать! https://metaparser.syscall.ru/

P.S. Также сделал приложение для vk: https://vk.com/app6934806_85944929

И пользуясь случаем, приглашаю всех заинтересованных в телеграм чат проекта: https://t.me/insteadtalk

★★

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

anonymous ()

моё прохождение судного дня. может пригодится для правки игры или расширения команд.

https://pastebin.com/yfYxtfJ9

пропущена буква в слове «строки»

Ты нажал на кнопку и на экране консоли побежали _стоки_ текста.

anonymous ()

Посмотрел исходники на луа - много кода надо делать при написании игры. Как-то надо всё это свести до тотального описалова всего что есть в игре на [полу]литературном языке в простых структурах данных типа json. Я как-то начинал пилить движок, уткнулся в архитектурные промахи, надо переделывать, но сейчас время совсем нету. У меня получилось, по сути, тоже самое, только ввод кнопками.

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от crutch_master

Прикол в том, что алгоритм все-таки проще писать на яп, а не на естественном языке. А так, конечно, можно и кросс-компиляцию сделать и кодо-генерацию.

gloomy ★★ ()
Ответ на: комментарий от gloomy

Ну да. Алгоритм он по-любому на ЯП. Просто можно сделать набор алгоритмов на все случаи жизни и уже их описывать на языке близком к естественному. Зачем, например, писать каждый раз обработчик для работы с предметами, когда можно загнать тег и движок уже будет знать, как с такими вещами работать. Прочую не сложную логику основанную на действиях-триггерах тоже можно организовать алогичным образом. Останутся какие-то частные случаи, которые таки надо будет кодить, но это - 2% от всей работы.

crutch_master ★★★★★ ()
Ответ на: комментарий от gloomy

У меня было так: актор, действие и n объектов над которыми оно происходит. Каждый объект в игре может быть актором. Каждый объект может что-то делать. Над каждым объектом можно что-то делать. У каждого действия есть условия его совершения и колбек этого самого действия. Движок все это переваривает, ты даешь ему объекты и актора, а он выдаёт тебе варианты действий для этого актора. Даешь ему действие, он меняет состояние объектов. Если у тебя описано достаточно действий, то всё можно загнать в литературный json, переварить его и скормить движку. Для других акторов можно приделать такие же скрипты с триггерами аля ИИ.

crutch_master ★★★★★ ()
Ответ на: комментарий от crutch_master

Интересно было бы посмотреть. Я, честно говоря, не понимаю как можно простыми правилами сделать сложную игру. Даже алгоритмом частенько получается сложно (даже, чтобы его осмыслить просто). Но над кросскомпиляцией с некоторого высокоуровневого языка думаю давно. Есть, кстати, Inform 7. Но мне, как программисту, проще все-таки на lua писать, чем на «человекоподобном». :)

gloomy ★★ ()
Ответ на: комментарий от gloomy

Так сейчас оно примерно так и есть

Ну как...

room {
	nam = 'main';
	noparser = false;
	OnError = function(s)
		mp:clear()
		std.pclr()
	end;
	title = "{$fmt y,40%}{$fmt c|Внимание}";
	dsc = [[{$fmt y,60%}{$fmt c|В этой игре вам придётся вводить фразы с помощью клавиатуры.^
Если вы согласны, наберите "да" и нажмите <ввод>.}]];
	before_Default = function(s)
		mp:clear()
		me():need_scene(true)
	end;
	before_No = function(s)
		s.noparser = true
		p [[До свидания!]]
	end;
	before_Yes = function(s)
		fading.set {"fadeblack", max = FADE_LONG }
		game:reaction(false)
		walk 'маячная комната 0'
	end;
	hint_verbs_only = { "#Yes", "#No" };
}:attr 'noprompt'
Все эти onError, $fmt, тригерры с колбеками. Они нафиг не нужны, каждый раз каждому их писать. Такие понятия укатать бы в объекты движка и задокументировать.
room {
	-"шлюз,модул*,отсек*";
	nam = 'шлюз';
	examined = false;
	onenter = function(s)
		dark_theme()
	end;
	before_Exam = function(s, w)
		if w ~= pl or here().examined then
			return false
		end
		_'скафандр':before_Exam()
	end;
	out_to = 'люк';
	in_to = function(s)
		p [[Ты собрался изучить окрестности базы, а не возвращаться на базу.]]
	end;
	dsc = function(s)
		if s:once() then
			pn [[Итак, первые две недели на Марсе подошли к концу. Все это время экипаж трудился не покладая рук, собирая модули из запчастей, которые были доставлены грузовым автоматическим кораблем до прибытия миссии.^^
Марс оказался именно таким каким он и должен был быть -- безжизненным и недружелюбным, обдуваемыми ураганными ветрами из разреженного воздуха, наполненного проклятой марсианской пылью.
И все-таки, желающих отправиться сюда было достаточно.^]]
		end
		p [[Ты стоишь в шлюзовом отсеке жилого модуля и готовишься выйти наружу, чтобы сделать небольшую вылазку и изучить окрестности базы.]];
	end;
}
Тут как бы описание, но всё равно кода много, который можно просто засунуть в реализацию самой локации, которую перевести к общему виду. И описывать уже всякие входы/выходы, обстановку и что сделать/написать при каком-то действии, причём это делать не колбеком на яп, а именно описывать на языке близком к естественному. Например:
{
...
    комнаты : {
        шлюз : {
            выход : {через : люк, на : двор}
            люк : {это : дверь, открытые : рычагом}
            рычаг : {это : кнопка}
        }
    }
...
    сообщения : {
        перемещения : {
            "шлюз-двор" : {
                впервые : "......",
                "второй день" : "......",
                "третий день, ровер починен" : "....."
                 //ключи - набор триггеров
            }
    }
...
}
etc
Это - валидный js, но можно поменять на json или сварить json из чего-то более читаемого и толерантного к ошибкам.

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Ну ты взял пример конкретной игры. Я могу показать проще :)

room {
	-"чаща|лес";
	nam = "forest";
	title = "В лесной чаще";
	dsc = [[На западе, сквозь густую листву, можно разглядеть небольшое строение.^
            Тропинка ведет на северо-восток.]];
	w_to = 'before_cottage';
	ne_to = 'clearing';
	obj = { 'bird' };
}

obj {
	-"птенчик,птенец|птица,птичка|детёныш";
	nam = "bird";
	description = "Слишком мал, чтобы летать, птенец беспомощно попискивает.";
	before_Listen = "Жалобный писк испуганной птички разрывает тебе сердце.^Надо помочь!";
}: attr '~animate'

room {
	-"полянка,поляна";
	nam = "clearing";
	title = "Полянка";
        dsc = [[Посреди полянки стоит высокий платан.
             Тропинка вьется меж деревьев, уводя на юго-запад.]];
        sw_to = 'forest';
        u_to = 'top_of_tree';
	obj = { 'nest', 'tree' };
}

obj {
	-"гнездо|мох|прутики,прутья";
	nam = "nest";
	description = function(s)
		p "Гнездо сплетено из прутиков и аккуратно устлано мхом.";
		mp:content(s)
	end;
}: attr 'container,open'

obj {
	-"платан|дерево|ствол";
	nam = 'tree';
	description = [[Величавое дерево стоит посреди поляны.
        Кажется, по его стволу будет несложно влезть наверх.]];
	before_Climb = function(s)
		move(me(), 'top_of_tree');
	end
} : attr 'scenery'

https://github.com/instead-hub/stead3-modules/blob/master/metaparser/demos/he...

Конкретно по примеру, что ты прислал. Там многое не нужно, так как связано с оформлением графической версии игры отсюда: https://instead.itch.io/mars

gloomy ★★ ()
Ответ на: комментарий от gloomy

Но вот синтаксис да, можно было бы упростить до какого то dsl. Но не так это просто. Кроме препроцессора какого-то, который упростил бы описание объектов, ничего в голову не приходит.

gloomy ★★ ()
Ответ на: комментарий от gloomy

Я могу показать проще :)

Ну, это понятно. Можно запилить интерпритатор с правилами и записать всё еще проще без полей, и описаний типа

//все, что в {} парсится как локация первая строчка - название, через после " ака " псевдонимы через запятую всё, что после // обрезается, дальше обычный json объект с автоматической расстановкой кавычек в начале, конце строки, между первым двоеточием и обрезкой пробелов.
локации : {
  лес ака чаща, тайга //етц
  //nam не нужен, т.к. nam == лес
  мы : в лесной чаще; На западе, сквозь густую листву, можно разглядеть небольшое строение.
//мы - ключ для описания локации, ; - разделитель между кратким и полным описанием
  восток : перед домом,
  тут есть : птичка
}
Можно еще извратиться и сделать автоподстановку двоеточий и обрезку тире для известных ключей типа сторон света или «тут есть».
Конечно, самый большой изврат будет с проверкой при компилянии этого всего, чтобы автор не наделал ошибок, а если наделал, то быстро их нашел.
А на выходе будет валидный json, который скормится кому надо.

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 3)
Ответ на: комментарий от crutch_master

Причём этот json будет независимым датасетом, который можно скормить любому движку, который понимает данную спецификацию.

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

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

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от crutch_master

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

gloomy ★★ ()
Последнее исправление: gloomy (всего исправлений: 2)
Ответ на: комментарий от gloomy

Ну у меня это всё в полуготовом состоянии валяется, может будет время заняться в отпуске или на выходных. Тебе интересен литературный вело-json? Я вот тоже сейчас подумал, что было бы не сделать интерпретатор, а не как у меня сейчас объекты с массивами. По крайней мере это будет забавно читать описания типа «в случае удара ногой в лицо гуманоид теряет сознание».

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

У меня профессиональная деформация. Мне реально проще писать историю на Lua. Поэтому, например, я не оценил идею Inform 7. Так как мне понятней и конкретней чётко видеть конструкции языка, а не выковыривать их из «человеко-ориентированных» описаний.

Но сама тема мне интересна с «научной» тз. А вдруг что получится? Но сам я такое не смогу написать. Я уже немного думал и понял, что не могу придумать одновременно лаконично и функционально. Сначала кажется просто, потом я начинаю понимать что не хватает того, этого. Или особенности русского языка приходится учитывать. Ну и поехало... Вот в качестве примера есть Inform6. Язык мне нравится. Он как раз dsl. Но в плане объема кода, мои примеры демок переписанные с Inform занимают не больше (а часто — меньше) объема по коду. Поэтому ничего, кроме препроцессора для минимизации скобочек и прочих элементов языка я так и не придумал.

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

gloomy ★★ ()
Ответ на: комментарий от gloomy

У меня профессиональная деформация. Мне реально проще писать историю на Lua.

Тут ты не пишешь историю. Тут будет в любом декларативщина и нудные описания всего на свете со всеми ветками, если они будут. Функционала будет ровно столько же, сколько позволяет движок. Описания не позволят придумывать какие-то свои действия более того, что я привёл в примере про битьё ногами по лицу. Но оно и не нужно, если всё загнать в движок и выдать список, а литературным языком это всё просто линковать.
Я думаю, смогу сделать за выходные что-то простое чисто поржать, а то я замахивался на время действия, порядок и прочие связанные с этим пляски.

crutch_master ★★★★★ ()

Прошу прощения! А что, тут действительно никто не в курсе о MUD?

Вы же развиваетесь как раз в эту сторону, насколько я вижу.

Так давайте, ставьте Mudlet, и, к примеру, к нам, на arda.pp.ru:4000 :о)

Borifed ()
Ответ на: комментарий от Borifed

MUD это другое, все-таки :) Но что касается моделирования, есть близкие элементы, наверное.

multiplayer real-time virtual world

Интерактивная литература:

- не multiplayer

- не realtime

а виртуальный мир нужен для повествования :)

gloomy ★★ ()
Последнее исправление: gloomy (всего исправлений: 1)
Ответ на: комментарий от crutch_master

Как-то надо всё это свести до тотального описалова всего что есть в игре на [полу]литературном языке в простых структурах данных типа json.

Хрень получится. Много раз уже пробовали. Всё скатывается в нытьё авторов с просьбами запилить нужную им фичу. Гораздо продуктивнее изучить азы Lua. А больше для старта и не требуется).

anonymous ()
Ответ на: комментарий от crutch_master

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

skiminok1986 ★★★★ ()
Ответ на: комментарий от gloomy

MUD это другое, все-таки :)

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

Более того. Почитал я тут ваши логи. Это прямо-таки один в один то, как лично я играю в мады :о)

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

Borifed ()

О, здоровская у вас дискуссия. Можно мои три копейки?

Кроме самого́ языка, упрощающего написание игры, было бы очень полезным иметь свой редактор, позволяющий легко вписывать и компоновать, или хотя-бы подсветку синтаксиса для основных текстовых редакторов. Вот есть «Сценарист», редактор для сценаристов. Его автор как-то говорил, что об использовании его редактора для написания текстовых игр можно и подумать. Вот бы вы и сошлись.

Большинство из нас имеют какие-то идейки, наталкиваются на такой вот движок и утопают в изучении всяких нюансов и пропадает всякое желание (тем более, что кто в игру будет играть? сам, жена, да пара друзей, которых удастся наручниками к . А хотелось бы клепать текст, да расставлять комнаты и «ловушки» и комбинации всякие. Вот.

С превеликим уважением к автору Инстеда и всем соавторам.

Я.

ChekPuk ()
Ответ на: комментарий от ChekPuk

Большинство из нас имеют какие-то идейки, наталкиваются на такой вот движок и утопают в изучении всяких нюансов и пропадает всякое желание (тем более, что кто в игру будет играть? сам, жена, да пара друзей, которых удастся наручниками к . А хотелось бы клепать текст, да расставлять комнаты и «ловушки» и комбинации всякие. Вот.

Да, действительно.

Как здорово было бы, если б кто-нибудь написал движок, чтоб вам нужно было только придумать сюжет, описание комнат, предметов, их свойства, взаимодействие, и все такое. И не париться с техническими нюансами, а оставить себе только творчество.

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

И чтоб желающие могли зарегистрироваться, и сами побродить-поразгадывать.

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

WAIT! AH SHI...

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

Добро пожаловать в мир MUD'ов! ;о)

Borifed ()
Ответ на: комментарий от anonymous

Месье уже назойлив до неприличия.

Извините.

Больше не буду сам лезть, честно.

Не могу без боли смотреть на то, как в муках рожают велосипед ;о)


P.S. Но если меня будут прямо спрашивать, отвечать-то можно, надеюсь?

Borifed ()
Ответ на: комментарий от Borifed

Все уже поняли за мады. Нет, парсерные игры это не мады. Вообще не мады. Совсем. Там, по ссылке в топике можно поиграть. И потом уже сам реши, можно ли такую игру, такую. как она есть, воткнуть квестом в мад? (Нет)

anonymous ()
Ответ на: комментарий от anonymous

Плагины с подсветкой/подсказками именно синтаксиса Инстеда? Не встречал. Просветите, пожалуйста.

А PyIGE я когда-то пробовал (от него действительно небыло толку), а теперь оно не хочет собираться, ругается на отсутствие pyqt4 (хотя он стоит). Да и старый он, как оно мамонта, наверное? Он с последней версией инстеда справится?

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

ChekPuk ()
Ответ на: комментарий от ChekPuk

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

А то звучит как «но в моей жизни не стоит цели потратить несколько лет жизни ради написания хомпейджа-визитки». Ну или придумайте сами что-то такое же простое и на 15кб кода.

MUDозвоны, ваши муды совсем другое. Плавали-знаем. Звените уже в другом месте.

anonymous ()
Ответ на: комментарий от ChekPuk

Хех, я не самый умный на свете человек, и мне понадобилось для написания инстедоигр: 1) Шпаргалка по Lua - 1 шт. https://learnxinyminutes.com/docs/ru-ru/lua-ru/ 2) Свежая дока по инстеду и модулям. 3) 1 месяц от идеи до релиза.

anonymous ()
Ответ на: комментарий от anonymous

Нет, я, конечно преувеличиваю, говоря про годы, но есть какие-то общие знания, которые много где пригодятся - читать, писать, программировать *в общем понимании), а есть частности - программировать в узконаправленном Инстедовском движке. Для этого должно быть слишком много свободного времени.

ChekPuk ()
Ответ на: комментарий от ChekPuk

Хобби - оно такое. Подъедает всё свободное время. Главное - какое именно это хобби. Можно писать игры на инстеде, но можно и ныть в камментах на лоре. Все понимающе кивают и никто не осуждает.

anonymous ()
Ответ на: комментарий от anonymous

Ножом вырещаю себу на лбу - «Никогда не спорить с анонимами!»

Я люблю Инстед. Но этого не достаточно, чтобы захотеть писать на нём игры.

Больше не мешаю тишине в этом топике.

ChekPuk ()
Ответ на: комментарий от ChekPuk

Это не спор а именно что нытьё. К примеру движок Godot. Приползает расслабленное туловище в чятик и начинает гундеть «У вас тут GDScript. Нихачю тратить на него время. Дайте мне язык, по которому я книжку прочёл, а вот в Юнити сишарп...» и прочая такая ахинея. Если чел тупой, занятой и расслабленый, какой смысл в беседе с ним? Мотивирующего флуда и оффтопика в тему нагнать? Развлечь его беседой? (Это риторические вопросы).

anonymous ()
Ответ на: комментарий от ChekPuk

Тут поглядел на ваш разговор, решил вставить немного. Не как одна из сторон спора. Просто «за жизнь».

В IT вообще (кмк) не так важно чем ты занимаешься, так как ты заранее не знаешь, что тебе пригодится. И вообще, лучше заниматься разными вещами. Например, Lua я стал широко использовать в своей работе. И наоборот - наработки с работы уходят в движок. Ну и вообще моя работа - выросла из увлечений детства (писать игры, дизассемблировать игры, ломать игры) - хотя я никаким боком с геймдевом не связан. :)

Пока я занимался парсером, тоже узнал массу интересных вещей. Все это расширяет кругозор. Я по работе никогда бы не узнал, например, про wasm. Ну, короче, долго можно продолжать.

gloomy ★★ ()
Ответ на: комментарий от gloomy

Тут я не спорю. Когда это смежные области, то довольно быстро всё набивается и пользу имеет.

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

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

Твой движок облегчает многие вещи, но если сравнивать с современным подходом - кругом «проводники» и «диалоги», они не дадут ошибиться новичку, напомнят такому как я, который раз в пятилетку садится переписать заново недоначатый проект, что и как, а опытный пользователь может быстро набросать прототип и потом стамеской довести до ума. Но всё это должно быть не как в Скратче, или «визуальное программирование» в Годоте, потому что бессмысленно кидать «кирпичики» «if», «for», нет, это не то. Людям больше нужно «Создать персонаж», «создать комнату», «Добавить объект», список свойств, зависимостей. Возможность графически всё это увидеть. Сменив последовательность, или переместив объекты увидеть поломанные связи и пр. Вот чем хорош «современный подход».

Наисердечнейше желаю успехов.

ChekPuk ()
Ответ на: комментарий от ChekPuk

Согласен, в общем и целом. Я вообще даже не стал бы агитировать писать что-то на моём движке, мне гораздо важнее что я сам могу на нём писать, и что у меня есть какая никакая (камерная) аудитория. :) Спасибо ей за это.

gloomy ★★ ()