Компилятор QSP в Javascript и плеер
Компилятор по-умолчанию делает монолитный html файл (без зависимостей), но есть варианты.
Сорцы здесь: https://code.rhodecode.com/u/naryl/qsp-txt2web/summary
Демка взята отсюда: http://qsp.su/index.php?option=com_content&view=article&id=91%3A-qsp-&catid=35%3A2009-02-19-06-11-10&Itemid=76&showall=1
Собственно демка: https://ave.maria.si/txt2gam-game.html
Пока реализованы не все стандартные функции, и нет сборки доступной для скачивания. Баг репорты пока слать не нужно. :)
Собственно, компилятор написан с полного нуля и использует формальный копилятор компиляторов на основе packrat… короче, мне очень легко менять синтаксис, вводить новые возможности и т.д. На данный момент в планах сделать его полностью совместимым с Qqsp. Большинство отличий продиктованы тем что это именно компилятор, а не интерпретатор:
- ** - это не строка, а блок кода. Их нельзя склеивать операторами +.
- DYNAMIC/DYNEVAL могут выполнить только блок кода, а не произвольную строку.
- $CURACTS возвращает блок, а не строку.
- В <a href=“exec:…”> не работают <<подвыражения>>. В этом всё равно нет смысла и никто так не делал, т.к. там и так код на QSP, а не JS, но в классике работало.
И ответы на вопросы заданные в ВК (где меня нет и не будет):
- Сохранения похоже будут кешироваться в браузере, а это значит, что стерев куки прогресс потеряется. У браузеров нет доступа к папкам пользователя, поэтому сохранять прогресс куда либо кроме как силами браузера не получится.
Сохранение сделано в файлы, в точности как в SugarCube (формат квестов для Twine). В демке есть.
Еще вопрос по поводу графического наполнения. Все данные хранятся на сервере и передаются клиенту. Это постоянные подгрузки, даже с учетом хранения куки файлов… если проект большой, нужно постояннно тратить трафик. Некоторым это не нравится.
Данные (в т.ч. графику) можно делать частью html, но тогда много трафика будет тратиться при первом открытии. Если игра имеет слишком много графики - можно просто скачать исходник (.qsp) и играть на любом стандартном интерпретаторе (более стандартном чем AeroQSP или Quest Navigator. Т.е. qspgui или Qqsp).
вопрос, как это храниться всё будет, и можно ли будет экспортировать во внешний файл
Ну, демку можно просто сохранить Ctrl+S и потом открыть без сети. Соответственно, на усмотрение автора можно либо всё хранить в одном файле (как в демке), либо использовать ссылки в сеть на картинки, звуки, js-библиотеки и т.д.
Вопроса не было, но добавлю что для разработки можно использовать либо Qgen, либо писать сразу в txt. Компилятор понимает только txt, но Qgen умеет в него экспортировать.
Ещё вопрос был
Будет ли поддержка wait, input и msg, так как в Навигаторе её нет
INPUT будет, MSG есть.
UPD: Теперь есть все.
можно ли sql базу подключить
Можно использовать произвольный javascript код как и в Qqsp и в Навигаторе. Соответственно с sql базой на сервере можно говорить ajax-ом. И вроде бы это должно было работать и раньше с Qqsp и с Навигатором.
Приветствую.
У меня запоздалый вопрос.
Есть ли возможность обратной конвертации (из Javascript в текстовый файл с кодом QSP)?
Garrett Fletcher,
В смысле? Я 4 пункт делал, очень даже часто, можно сказать на постоянной основе. Потом конечно перешёл на dymamic.
Приветствую!
В общем, не получилось у меня заставить эту штуку работать на Windows 10.
Скачал exe-шник отсюда: https://code.rhodecode.com/u/naryl/qsp-txt2web/artifacts/
Ввожу в командной строке: txt2web test.txt
И получаю такое:
At
# begin
'Hello World!'
^ (Line 2, Column 14, Position 23)
In context STATEMENT-END:
While parsing STATEMENT-END-BLOCK-CLOSE. Expected:
the character } (RIGHT_CURLY_BRACKET)
While parsing STATEMENT-END-REAL. Expected:
the character Newline
or the character & (AMPERSAND)
Складывается впечатление, что он не понимает, что перенос строки - это перенос строки. Может, с кодировкой что-то?
Файлик прикладываю. test.txt