Protoparser.js – легковесный веб-движок (библиотека) для интерактивных текстовых игр с вводом команд («парсеров»).
Приставка «прото» в названии движка, в переводе с древнегреческого, означает «первый». Интерфейс командной строки протопарсера оперирует всего двумя понятиями: ГЛАГОЛ и СУЩЕСТВИТЕЛЬНОЕ. В этом он похож на первые текстовые игры-приключения. Вот основные особенности и возможности протопарсера:
🎮 Демо-игра «Фантазия» (онлайн)
📖 Руководство автора
📜 Список игр, написанных на protoparser.js
🗃️ protoparser.js в ifarchive (версия 8)
В архиве для скачивания есть руководство с примером создания игры, а также демо-игра.
Отредактировано johnbrown (03.09.2022 13:01)
Неактивен
Привет Антон! Спасибо за интерес к проекту.
>Согласен. Только вот на небольшом экране смартфона, при включении поля ввода получается дикий масштаб и надо потом уменьшать экран, чтобы увидеть результат.
Да, я заметил на разных смартфонах игра отображается со своими нюансами. Иногда это даже зависит от того включён интернет или нет, хотя движок полностью автономен. Пока главное что запускается, юзерэкспириенс будем допиливать после )
Автотестирование это громко сказано. Скорее система проигрывания записанных команд, как в тадс и информ. Нашел случайно в исходниках как включить - в var game, свойство tests поставить true. Может описать эту процедуру в помощи + создание рядом скрипта команд?
Это все есть. В руководстве этому целая глава посвящена. Скрипты для тестирования тоже есть. В папке с игрой. Если его включить игра сама себя пройдёт. Ну, и в корневой тоже, для удобства автора.
>Как это сделать? Нет реакции на сохранить, загрузить игру.
Реакция должна быть. Хотя бы "Ошибка при загрузке/сохранении". Пишите "сохранить названиефайласохранения", например: сохранить фантазия1
Посмотрел код, это скорее библиотека для JS, позволяющая организовать парсерную игру, чем целая платформа. Потому что без знания javascript не получиться написать игру для авторами
Инстед игры тоже пишутся на скриптовом языке - луа. Чем сложнее твоя игра тем больше ты должен знать. В обоих случаях знание базового синтаксиса необходимо.
Понятно, что по описанию она не стремится тягаться со "взрослыми" парсерными платформами, однако есть некий минимум для обработки - больше двух слов. Надо разрешить такие конструкции как "поговорить со стариком", "залезть на дерево".
В мире минюшек есть очень много платформ от казуальных до навороченых объектно-ориентированных, типа инстеда. Почему-то считается, что парсерки должны быть больше, выше, сильнее, обязательно все понимать, и вообще работать на нейронке. У меня немножко другой подход, устаревший ) Возможно он изменится, но возможно и нет.
Что меня привлекает в платформе: клиентский код в браузере, легковесный.
< 30 КБ
PS: а куда можно отправить лог по игре фантазия?
Логи можно слать в личку. Кстати, спасибо.
Неактивен
Sonic написал:
Движок интересный. Будут новые релизы - пиши сюда, что важное в них. И жду новых демо-игр.
PS. Может даже попробую свою игру написать.
Спасибо! Да, конечно, о релизах буду сообщать. Думаю, новые фичи буду просто добавлять в Фантазию.
Неактивен
Версия 2(93)
Полный список изменений
спойлер…
Неактивен
ВЕРСИЯ 3(104)
Так получилось, что третий релиз, в основном, посвящен работе над ошибками и улучшению внутренней логики программы. Из-за этого не получилось добавить те фичи, которые я изначально планировал. Зато появились фичи, которые я вообще не планировал Итак, что нового:
Во-первых, продолжена начатая в прошлой версии работа над кастомизацией стандартных сообщений системы. В этой версии я сосредоточился на интерфейсе командной строки.
- теперь у автора появилась возможность установить символьное представления курсора, частоту и режим мигания;
- появилась возможность добавлять в строку ввода команду по-умолчанию. Это когда в командной строке уже находится какая-то команда. Разумеется, пользователь может удалить, отредактировать или выполнить ее. Я вижу применение этой функции, например, в организации интерактивного обучения или когда автор хочет дать игроку прямую подсказку;
- в командной строке появился симпатичный символ ">" - приглашение командной строки. Как и другие элементы командной строки его можно менять и отключать. Вообще, он задумывался для организации статус-бара - области командной строки, слева от поля ввода, куда могли бы выводиться игровые переменные, например, ходы, здоровье и все, что автор сочтет нужным. Кстати, в игре «Фантазия» появился пример такого статус-бара.
Вторая главная фича этого релиза - «горячие клавиши». Игрой теперь можно управлять не только набирая команды, но и используя специально определенные клавиши (пока это нумпад и пара функциональных клавиш). По-умолчанию, на них повешены наиболее часто употребляемые команды: передвижение, просмотр инвентаря, осмотр и пр. Все эти команды легко можно переназначить, исходя из особенностей своей игры.
В руководство добавились несколько новых разделов; информация в имеющихся обновлена, в соответствии с последними изменениями. Также обновлена игра «Фантазия». Все изменения можно протестировать прямо в ней.
Полный список изменений:
спойлер…
Неактивен
Неактивен
ВЕРСИЯ 4(114)
В этой версии не произошло каких-то глобальных изменений, но кое-что, все-таки, появилось.
Большинство изменений можно посмотреть в демо-игре "Фантазия".
П.С. Руководство тоже обновлено
Полный список изменений
спойлер…
Неактивен
ВЕРСИЯ 5(127)
В пятую юбилейную версию protoparser.js вошло несколько очень важных нововведений.
Полный список изменений
спойлер…
Неактивен
ВЕРСИЯ 6(145)
Первый осенний релиз принес несколько интересных фич, которые, я думаю, будут интересны как авторам, так и игрокам. Одна из них, кстати, появилась еще в прошлой версии, но, случайно, осталась без внимания. Итак!
Длинный коридор
Серые каменные стены коридора, кажется, покрыты пылью многих веков. На севере расположена невысокая дверь. Каменная спиральная лестница поднимается высоко вверх. Возле стены, стоит полный рыцарский доспех с опущенным забралом. Вас не покидает чувство, что за вами наблюдают.
> о дверь
Тяжелая дубовая дверь, кажется, помнит еще те времена, когда слово «рыцарь» было не просто красивым эпитетом.
> вв
После полумрака коридора яркий дневной свет на несколько секунд ослепляет вас. Открывшаяся вашему взору картина завораживает.
Башня
Открытая площадка башни позволяет видеть округу на много километров. В отдалении на севере блестит небольшое озеро и виднеется выход из парка. Вниз ведет лестница.
Здесь есть: шляпа.
> о шляпу
Серая широкополая шляпа выглядит весьма помятой. Сбоку к шляпе приколота какая-то лента с надписью.
> локации
1. Длинный коридор
Вы осмотрели: дверь.
2. Башня
Вы осмотрели: шляпу.
> о доспех
Ничем не примечательный доспех.
> о дос
Ничем не примечательный доспех.
> о до
Ничем не примечательный доспех.
И, даже так
> о пех
Ничем не примечательный доспех.
Вводить существительное можно начиная с любой его части: с начала, с середины, с конца. Обычно, достаточно трехбуквенного сокращения. Двухбуквенные тоже работают, но могут быть быть ошибки из-за того, что данный набор букв встречается в названии какого-то другого объекта.
function sleep() { t.print('Вам не хочется спать.') }
Стало
var game = { // свойство 1 sleep: 'Вам не хочется спать.' // свойство n }
Как обычно, обновлены руководство и демо-игра «Фантазия» в которой можно проверить работу новых фич.
Полный список изменений
спойлер…
Неактивен
Это шикарно! Целых две концовки, даже больше, чем в "Фантазии"
Огромное спасибо за работу! У самого были мысли реализовать эту игру, но как-то руки не дошли...
Никита, можно включить ваш скрипт в дистрибутив протопарсера?
Неактивен
Навскидку, что успел заметить:
- game.commandTemplate, game.cursor, game.fireCursorInterval, game.prompt, game.shouldBlinkCursor - интерфейс командной строки отсутствует. При надевании часов вместо > должно было появится текущее время. Хотелось бы сохранить возможность кастомизации командной строки.
- после загрузки страницы нет никакой игровой информации, кроме строки ввода. Она появляется только если обновить страницу
- по команде "лог" открывается пустая страница
- при переходе из коридора в башню и обратно не происходит смены темы
Тестировал на android 8.1.0, браузер Chrome 68.0.3440.91
Хотелось бы ещё попробовать запустить оффлайн. 6 версия у меня на телефоне не запустилась.
Пока то, что заметил. Буду тестировать дальше. К сожалению, пока только с телефона.
Отредактировано johnbrown (29.12.2018 14:45)
Неактивен
Вроде как командной строки больше нет. Есть поле ввода. Можно кастомизировать то, что отображается в пустом поле ввода, или выводить что-то перед полем....
Да, я заметил, так правильнее. Просто хотелось бы чтобы все параметры, которые были сохранились. Только теперь это видимо будет задаваться через стили.
Очевидно произошла ошибка. Что в консоле браузера?
Не уверен, что в мобильном хроме есть режим разработчика. Приложил скрин.
Похоже, ошибка возникает только, если в настройке включена "мобильная версия".
Возможно лог лучше выдавать в консоль?
Потеряется форматирование. И потом это не очень user-friendly. Если только как дополнительный вариант.
Отредактировано johnbrown (30.12.2018 08:02)
Неактивен
Кстати, если terminal.js больше не планируется использовать, нужно добавить в движок обработчик хоткеев.
Отредактировано johnbrown (07.01.2019 17:38)
Неактивен
Не сочтите за злонамеренную девальвацию ценности вашего вклада, но может быть использовать менее хипстерский JS, а то поддержка старых браузеров отваливается, например, Internet Explorer 11, который не может отрисовать такую страницу?
Хорошее предложение. Когда я писал пп, то всегда тестировал его на своем старом HTC с андроидом 2.3.6. Там тоже было не все гладко, но хотя бы играть можно было. Согласен с тем, что нужно сохранить максимальную совместимость с большинством браузеров. Возможно, хорошей идеей будет прогнать код через какой-нибудь babel. С другой стороны, тот код, который есть сейчас требует серьезного рефакторинга, а мои познания в современном js весьма скромны. Очень хорошо, что человек взялся за это дело.
Решение по перехвату многих из них игрой представляется не самым удачным
Интересная мысль, я об этом не задумывался. Наверное потому, что никогда не использую эти клавиши. А многие ли используют? А если у человека какой-нибудь Autohotkey запущен? Вариант с дополнительной клавишей мне не очень нравится, это неудобно.
Ещё хочу вот что добавить. Пп - такое же приложение, как Word или Excel, только ОС для него браузер. Ворд и Эксель не волнует, что там думает Windows или Mac по поводу F1. Почему с пп должно быть по-другому? Никто не запрещает пользователю переключиться в другую вкладку и сделать свои дела.
Отредактировано johnbrown (07.01.2019 21:03)
Неактивен
Вы привели убедительные доводы. Возможно, действительно стоит пересмотреть "клавишную" политику. Но, с другой стороны, раз эти возможности поддерживаются браузерами, значит их тоже кто-то использует, ведь можно было просто запретить вешать события на функциональные клавиши.
Например, есть у нас эмулятор какого-нибудь условного Спектрума на js. Естественно, там будут работать ф-клавиши. Не думаю, что кого-то это сильно смутит. В разных программах ф-клавиши, да и вообще горячие клавиши ведут себя по-разному. Есть какие-то негласные соглашения, что F1 это справка, а F5 обновить. Но, если человеку нужно попасть в режим разработчика, значит этот человек знает на что идёт ) и он и без F12 туда попадет.
Отредактировано johnbrown (07.01.2019 23:03)
Неактивен
Я не знаю, честно. Наверное, надо спросить мнение какого-нибудь "продуктового" веб-разработчика. Мне просто хочется, чтобы пп максимально использовал возможности браузера.
Вот, кстати, насчёт эмулятора. Интересно, а как у Инстеда в онлайне работают ф-клавиши?
P.S. ну, и для ясности: клавиши F3, F4, F5, F10, F11, F12 я не переопределял.
Отредактировано johnbrown (08.01.2019 08:02)
Неактивен
Vladimir написал:
Поиграл в Плащ тьмы. Всё нормально, но есть неудобство: когда вводишь команды ВОЗЬМИ КРЮЧОК, ПОВЕСЬ ПЛАЩ, то парсер не понимает это, а жаль...
Работают команды
> взять крючок > повесить плащ
Глаголы в повелительном наклонении я не включал в стандартную библиотеку и не планирую, но если кому-то нужно, то они легко добавляются в самом игровом файле.
Отредактировано johnbrown (06.02.2021 10:35)
Неактивен
johnbrown написал:
Глаголы в повелительном наклонении я не включал в стандартную библиотеку и не планирую...
Добавил задачу. Спасибо за замечание.
Неактивен
Nikita написал:
Вообще повелительное наклонение имеет смысл, если платформа поддерживает функциональность управления персонажами,
В тадсе 2 это работает и для управления протагонистом, на других платформах не проверял.
Nikita написал:
В ситуации базового управления и типового повествования от второго лица мы командами в инфинитиве отвечаем на вопрос "что делать?", а не отдаём приказ персонажу, так как персонаж - это мы сами.
Я примерно также думал вначале, но, переспав с этим ночь, решил не загонять игрока в рамки "традиций". Ещё вопрос на сколько игрок готов ассоциировать себя с персонажем, но это тема отдельного топика.
Неактивен
Парсеры сами по себе хардкор Мысли такие проскальзывали, но, практически, в эту сторону не копал. Я, вообще, за открытость кода. А, кроме того, шифрование, наверняка потребует подключения дополнительных библиотек, чего бы мне не хотелось. Мне нравится идея минималистичности пп.
Неактивен
gloomy написал:
Я по ошибке не туда написал сообщение.
Про инстед, так можно сказать уже. Есть чат боты, Борис Тимофеев пилит стендалон приложение на андроиде...
Ok, разобрался Нет, я имел в виду на js. Типа instead.js только без node. Но, это, наверное, вопрос к Technix.
МП для андроида это интересно. Дашь знать когда выйдет?
Отредактировано johnbrown (23.03.2019 18:34)
Неактивен
С удивлением узнал, что кто-то пишет на пп, и даже делает патчи (привет Oreolek, Nikita!). Это приятно!
Последние изменения в код я вносил больше года назад. Я планировал включить их в 7 версию. Планов было много, но за время работы над движком интерес к нему постепенно иссякал. Новые вещи перестали быть новыми, старые стали скучными, а повторяться не хочется. Но, мне также не хочется, чтобы наработки для 7 версии пылились где-то в тестовой ветке, поэтому я влил ее в основную. Это следовало сделать еще год назад, но лучше поздно, чем никогда.
ВЕРСИЯ 7
спойлер…
Также хочу дать ссылку на форк Ореолека. В нем он поработал над стилями и сделал отвязку от terminal.js.
Пользуйтесь чем вам больше нравится!
Неактивен
ВЕРСИЯ 8
В новой версии протопарсер получил отвязку от единственной сторонней библиотеки terminal.js, отвечавшей за ввод/вывод. Функционал библиотеки (командная строка, горячие клавиши, история команд и пр.) перенесен в движок.
Упрощена html-разметка в индексном файле, переработан дефолтный стиль оформления. На мобильных и настольных устройствах должно улучшиться отображение.
Полностью переделана система логирования. Теперь по команде лог
и по окончанию игры появляется ссылка на скачивание файла-транскрипта (генерируется локально в браузере пользователя). Полный лог доступен и после очистки экрана.
Добавлен запрос-подтверждение на закрытие окна с игрой (если пользователь совершал какие-либо действия).
Исправлен баг с появлением удаленного предмета при загрузке сохранения.
Добавлена поддержка работы с программами чтения с экрана (автоозвучка). Вообще говоря, я так и не понял как работает эта система. На разных устройствах что-то озвучивалось, что-то нет. Более-менее рабочие результаты удалось получить при использовании NVDA на Windows.
Полный список изменений:
спойлер…
Отредактировано johnbrown (30.08.2022 14:46)
Неактивен