RU

Пакет QSP для Sublime Text (подсветка синтаксиса и билдер)

Aleks Versus Moderator 16.03.2021 15:42 23 comments 9410 views

Всем привет.

В общем, тут как-то звёзды сошлись.

Вопросы Викара и попытка редизайнить свой сайт заставили ознакомиться с git и github; перелопачивание старого QSP-кода заставило пожалеть об отсутствии системы контроля версий в Qgen; а Pseudopod показал, что оказывается можно разрабатывать игры на QSP и не в QGen. Ещё до кучи я возобновил своё знакомство с Python, ну а поскольку моим любимым текстовым редактором уже многие годы остаётся Sublime Text, всё это вылилось в попытку написать скрипт вроде того, что предлагал evp когда-то (https://qsp.org/forum/777-sovmestnaa-razrabotka).
И к моему удивлению заработал сначала скрипт, а потом мне даже удалось превратить это в почти самостоятельную Build System (ну, конечно, многое придётся прописать руками).
Получился QSP-Builder for Sublime Text и умеет он: собирать из разрозненных файлов в формате TXT2GAM файлы “.qsp” и запускать их в плеере. Таким образом осуществляется как бы прямой запуск игры (на основе только что написанных файлов) из Sublime Text.

Сейчас для установки вам достаточно:
1. Скачать архив с последним релизом со страницы релизов https://github.com/AleksVersus/JAD_for_QSP/releases
2. Распаковать архив и скопировать файл QSP.sublime-package в папку Packages в месте установки Sublime Text (Например, в C:\Program Files\Sublime Text\Packages)
3. Profit. Подсветка синтаксиса QSP и билдер установлены в Sublime Text.

Предварительно должен быть установлен по особому пути плеер, либо в файле проекта прописан путь к нужному плееру. Внимательно читайте документацию: https://github.com/AleksVersus/JAD_for_QSP#readme

https://github.com/AleksVersus/JAD_for_QSP

О проблемах, замечаниях и предложениях просьба отписываться сюда, или на aleksversus@mail.ru. За остальными ресурсами мне тяжело будет следить.

Что даёт QSP-Builder для Sublime Text:

  • Контроль версий. Поскольку все части игры хранятся в виде текстовых файлов (исходного кода), они легко обрабатываются системами контроля версий, например GIT. Таким образом, вы можете проследить все этапы создания вашей игры, и быстрее находить ошибки.
  • Совместная разработка. Вы можете организовать общий репозиторий, например на GitHub, и разрабатывать игру командой, при этом видя, кто и какие изменения вносит в проект.
  • Удобство модульной разработки. Вы можете одновременно в одной программе работать над всеми модулями вашей игры, или открывать для каждого модуля своё окно, или пользоваться любыми иными возможностями Sublime Text, а затем собрать и запустить игру, нажав всего одну комбинацию клавиш. QBST соберёт все нужные вам файлы “.qsp” и запустит игру в плеере по нажатию пары клавиш.
  • Один редактор - много плееров. В специальном файле проекта можно для каждой игры указать собственный плеер. Таким образом, одну игру вы можете разрабатывать например для qSpider, одну для Quest Navigator, а другую для классики. И вам не придётся ставить себе три Quest Generator с разными настройками для плееров.
  • Sublime Text. Sublime Text умеет подсвечивать HTML, JavaScript и CSS, что очень сильно облегчает разработку игр для Quest Navigator и qSpider. Если вам сильно не хватало проверки орфографии в QGen, то здесь вы можете себе её сделать. Поиск и замена лишь по определённым файлам и папкам (а значит и локациям)? В Sublime Text есть и это. Сложно придумать, что умеет QGen и не умеет Sublime Text — гораздо проще придумать, что умеет ST и не умеет Quest Generator.

В конечном счёте всё превратилось в рекламу Sublime Text, но я и правда фанат этой программы.

Edited at 06.06.2023 15:07 (2 years ago)
Aleks Versus Moderator 05.04.2021 10:58 (4 years ago)

Новости на сегодняшний день:
1. Билдер собирает файлы игр QSP из текстовых файлов в кодировке utf-8 и с раcширениями .qsps, .qsp-txt, .txt-qsp.
2. Написана основная часть подсветки синтаксиса QSP для Sublime Text. Неплохо справляется со всеми моими файлами:
* Мне очень нравится, как подсвечиваются комментарии, проверял на очень сложных — работает прекрасно
* Вменяемо подсвечиваются начало и конец локаций, их содержимое.
* Сейчас идёт борьба за рекурсивную подсветку во вложенных выражениях и скобках.
* Многие синтаксические ошибки уже подсвечиваются довольно адекватно.
3. Добавил скрины в шапку.

Aleks Versus,
В планах есть как-то подсвечивать html? Ибо он в строках и всё это сливается в одно сплошное месиво :(

Aleks Versus Moderator 11.04.2021 12:45 (4 years ago)

Oliver,
На самом деле я только вчера добавил включение подсветки HTML.
(В принципе можно любую уже имеющуюся в sublime text подсветку таким же макаром встраивать. Например, сам HTML поддерживает встраивание подсветки кода JS и CSS. Единственная проблема это адекватные маркеры начала и конца таких фрагментов кода)

Что умеет подсветка синтаксиса сейчас

1. Подсветка текста между локациями, как комментариев. Так как весь этот текст игнорируется при экспорте в QSP.
2. Распознавание начала и конца локации и соответственно подсветка этих элементов.
3. Подсветка сложных многострочных комментариев.
4. Подсветка строковых констант.
5. Подсветка числовых констант, системных переменных, операторов и функций.
6. Подсветка вложенных выражений (подвыражений) в строках.
7. Подсветка основных синтаксических ошибок:
* Лишний `$` перед именами числовых системных переменных или функций.
* Отсутствие `$` перед именами текстовых системынх переменных и функций.
* Звёздочка `*` перед именем операторов, кроме `*pl`, `*p`, `*nl`, `*clr`.
* Неверное число операндов у операций типа `+`, `-`, `*`, `<`, `>` и т.д.
* Подсветка неправильных имён переменных типа `123build`.
* Разрыв строки кода внутри вложенного выражения.
* Подсветка лишнего `end`, а так же `else` и `elseif` вне конструкций условий.
* Подсветка неправильной записи `else` и `elseif` в многострочном условий.
* Незакрытый многострочный `act` или `if` вызывает подсветку элемента “конец локации”, как ошибки.
8. Подсветка HTML-кода в фигурных скобках и строках при вставке тегов `<html>`, `</html>`.

Автоматический включение подсветки QSP-кода

Подсветка автоматически включается для файлов с расширениями “.qsps”, “.qsp-txt”, или “.txt-qsp”. Если Вам нужно чтобы подсветка QSP-кода автоматически включалась для файлов с другими расширениями, пропишите в начале таких файлов строку:

QSP-Game

После слова `Game` можно поставить пробел и добавить ещё какой либо текст, например название игры или модуля.

Aleks Versus,
О, красота. Спасибо за работу!

Aleks Versus Moderator 02.05.2021 14:44 (4 years ago)

Совершенно забыл поделиться новостями, так как отписывался в дискорде, и всё вылетело из головы. Но в соседней теме sal0mander напомнил.
Чтобы экспортировать проект из Quest Generator в текстовый вид (чтобы локации были разбиты на отдельные файлы и рассортированы по папкам), в формате TXT2GAM, был разработан скрипт на Python.
Лежит этот скрипт здесь: github/JAD_for_QSP/QBST/spliter

Разделитель для QSP-игр в формате TXT2GAM
Данный скрипт предназначен в первую очередь для того, чтобы разделять большие файлы игр, написанных в формате TXT2GAM, на локации.

Требования к файлам
Исходный файл, который будет разбиваться на различные файлы, должен быть в идеале экспортированным из Quest Generator в формате TXT2GAM.

В идеале кодировка UTF-16 с BOM-символом в начале. Либо кодировка UTF-8.

Начало локации должно записываться как:

# название_локации

Конец локации обязательно должен записываться как

--- название_локации ---------------------------------

Как использовать
Экспортируйте игру в текстовый файл формата TXT2GAM. Можно сделать это прямо из Quest Generator’а: меню “Игра - Экспорт - Текстовый файл формата TXT2GAM…”
Скопируйте получившийся текстовый файл в папку со скриптом, туда же скопируйте файл проекта с расширением .qproj. Данный файл служит опорным файлом для размещения локаций по папкам.
И экспортированный текстовый файл и файл проекта переименуйте в game.txt и game.qproj соответственно.
Запустите скрипт. На данном этапе у вас наверняка уже установлен Python, и файлы .py ассоциированы с ним. Поэтому достаточно просто попытаться открыть файл, как вы это делаете с любым другим. Если файлы скриптов не ассоциированы с Python, попробуйте щёлкнуть правой кнопкой мыши по файлу скрипта, выберите пункт “Открыть с помощью… - Выбрать другое приложение” и укажите путь к интерпретатору Python.
Может открыться окно командной строки и ненадолго зависнуть.
Результат
По завершении работы скрипта в папке со скриптом появится папка export_game, в которой будут лежать все файлы локаций, рассортированные по папкам, как это было в Quest Generator.

Имена файлов при этом будут сгенерированы автоматически из имён локаций, все запрещённые символы будут заменены на символ нижнего подчёркивания _.

Если в результате работы скрипта получатся совпадающие имена файлов, к именам файлов будут добавлены числа. То же самое касается случая, когда вы повторно запускаете скрипт в папке с уже разбитыми на файлы локациями.

Aleks Versus Moderator 05.06.2021 19:43 (4 years ago)

Добавлены сниппеты:

Сниппеты — это стандартные фрагменты кода, которые можно вставить, набрав ключевое слово, или часть строки кода, и нажав клавишу Tab. Переключаться между полями вставленного фрагмента так же можно с помощью клавиши Tab.

Вот какие сниппеты вы можете использовать:

newloc или последовательный ввод # (диез и пробел) - добавляет новую локацию:

# название_локации
 !@ Код, выполняемый при посещении локации
 --- название_локации ---------------------------------

addobj - добавляет одну из строк кода:

addobj "Название предмета","путь к файлу картинки/picture.jpg",позиция
 addobj "Название предмета"

act - добавляет действие:

act "Название действия":
 	!@ Код действия
 end

if - добавляет конструкцию условия:

if условие_выполнено:
 !@ Если условие выполнено
 	!@ Код, который выполняется, если условие выполнено
 end

ifelse - добавляет условие с ветвлением:

if условие_выполнено:
 !@ Если условие выполнено
 	!@ Код, который выполняется, если условие выполнено
 else:
 !@ Если условие не выполнено
 	!@ Код, который выполняется, если условие не выполнено
 end

JAD_QBST v.0.3

Aleks Versus Moderator 07.06.2021 13:12 (4 years ago)

Внёс кое-какие изменения, но пока что только в исходники.
1. Теперь доступна вставка стандартных HTML-тегов вокруг выделенного текста по нажатию одной-дух клавиш.
2. Можно нажать Ctrl+R и это вызовет меню GOTO, которое позволит переместиться к любой локации в текущем файле (локации подтягиваются в список), или к метке (так же подтягиваются в список).
3. Можно нажать Ctrl+Shift+R и переместиться к любой локации в проекте.
4. Так же добавлена автоматическая вставка отступов, если пишешь act, loop if и т.п., а затем после двоеточия нажимаешь Enter. end напротив сокращает отступ. Таким образом автоматизируется “правильное” преформатирование.

До очередного релиза переписывать README особо не буду, но чуть-чуть поправил, так как установка теперь слегка изменилась. Горячие клавиши и система сборки теперь будут размещаться рядом со схемой подсветки, т.е. в QSP.sublime-package.

Буду думать, как автоматизировать установку.

Отличная работа, Алекс. Продолжай в том же духе, упрощай авторам жизнь!

Aleks Versus Moderator 11.06.2021 11:17 (4 years ago)

Oliver,
спасибо. Если будут идеи, что добавить, или может о чём рассказать по Билдеру/Сниппетам/Подсветке, жду их здесь, в этой теме.

Aleks Versus Moderator 29.06.2021 18:40 (4 years ago)

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

Команды препроцессора и спец.комментарии будут выделяться при подсветке.

JAD_QSP v.0.4

Так же рекомендую внимательно перечитать файл README.md, так как порядок установки теперь изменился.

Тем, у кого установлена старая версия:
1. Можно удалить файл qsp.sublime-build из Packages/User (Меню Preferences -> Browse Packages - открыть папку User). Этот файл теперь лежит в QSP.sublime-package. Именно оттуда его нужно извлечь, изменить пути к интерпретатору python, и к файлу main.py билдера, а затем упаковать обратно.
2. Можно удалить сочетания клавиш из Packages/User/Default(Windows).sublime-keymap (Меню Preferences -> Key Bindigs), так как эти сочетания теперь прописаны в файле Default.sublime-keymap в QSP.sublime-package.
3. Нужно заменить старый QSP.sublime-package на новый. Само собой файлы билдера (main.py, function.py, pp.py) так же нужно заменить на новые.

Aleks Versus Moderator 20.10.2021 10:27 (4 years ago)

Опубликовано видео, в котором некоторым образом освещаются способы бэкапа проектов, но основная часть уделена написанию игр в Sublime Text и установке QBST и QSP-пакета в Sublime Text.
YouTube: jgAnP4Hrfvk

Aleks Versus Moderator 31.05.2022 07:41 (3 years ago)

Новый релиз QSP-Builder. v.0.5

JAD_for_QSP/v.0.5

Изменения в поведении подсветки синтаксиса и поведении редактора Sublime Text:

  • [2021.07.03] Добавлено поведение: При нажатии Ctrl+/ все выделенные строки помечаются, как однострочные комментарии. При нажатии Ctrl+Shift+/ весь выделенный текст помещается в блок комментария ! .
  • [2021.07.03] Добавлен сниппет в привязке к горячим клавишам. При нажатии alt+/ вставляется строка комментария & !@ без текста.
  • [2021.07.03] Багфикс подсветки. Неверно вытеснялись scope внутри локации, все подменялись на meta.diff.
  • [2022.02.16] Изменён тег выделения html-кода внутри строк QSP-кода на <qhtml></qhtml>. В таких плеерах, как Quest Navigator и qSpider недопустимо в дереве DOM наличие ещё одних тегов <html></html>.

Изменения в работе Билдера:

  • [2022.05.27] Добавлена возможность проводить собственную постпроцессорную обработку с помощью python-скриптов, подключаемых через project.json. При этом можно повесить неограниченное количество скриптов, при этом набор скриптов можно использовать как общий для всех собранных файлов формата txt2gam, так и для каждого отдельного такого собранного файла. В этот раз решено отказаться от лишнего вложения словарей с “path” в список, а все пути просто перечисляются элементами в списке.
  • [2022.05.27] Добавлен упрощённый запуск простых файлов. Если вы написали qsps файл, который лежит не в папке проекта, вы можете запустить его без создания project.json, а точнее project.json будет создан автоматически. При этом в папке C:\Program Files\QSP\converter обязательно должен лежать свежий txt2gam.exe, а в папке C:\Program Files\QSP\qsp570 классический плеер, и в частности файл qspsgui.exe. Заменить классический плеер на иной можно, отредактировав в main.py билдера путь в переменной player_exe (12-ая строчка программы), заменив его на свой.
  • [2022.05.28] Добавлен параметр “scans”, который позволяет автоматически встроить в игру локацию, содержащую список требуемых для игры файлов. Список файлов так же составляется автоматически на основе списка “исследуемых” папок и файлов. В локацию уже встроен механизм проверки, достаточно передать на неё путь, который требуется проверить, в качестве аргумента, и она вернёт 1 (если путь в списке есть) или 0 (если пути в списке нет). Все пути, добавляемые на локацию, будут относительным, и выстраиваются относительно файла .qsp, прописанного в параметре “start”. Пути, которые невозможно прописать относительно этого файла, игнорируются и не добавляются в список.

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

Aleks Versus,
Честно говоря, не хватает словарного запаса для большей выборки комплиментарных реплик в сторону твоей персоны за то, что продолжаешь работу над улучшением действительно полезного для всего комьюнити продукта. Поэтому скажу (точнее напишу) простое человеческое спасибо :)

Aleks Versus Moderator 12.06.2022 16:37 (3 years ago)

Oliver,
спасибо за тёплые слова. =)

Aleks Versus Moderator 19.02.2023 14:29 (3 years ago)

Я несколько выпал из комьюнити, и из изучения python. Разработка установщика поэтому несколько затянулась. Однако я переписал скрипт конвертера Вервольфа (https://codepen.io/srg-kostyrko/full/QWqdwxv) на python, в результате чего был улучшен splitter - дополнительный скрипт, который ранее разбивал на части большой qsps-файл.

Теперь в папке converter-splitter лежат три файла скриптов.

  • qsp_to_qsps - скрипт конвертера. Может использоваться самостоятельно. прописываете в нём путь до QSP-файла, запускаете, появляется файл qsps-формата (TXT2GAM, но в кодировке UTF-8)
  • splitter - для его запуска требуется наличие скрипта qsp_to_qsps. Это скрипт разделителя, которому можно скармливать как QSP-файл, так и qsps-файл. Разделитель разбивает исходный файл на отдельные qsps-файлы локаций.
  • main_cs - скрипт простого запуска. Работает только при наличии предыдущих двух скриптов. Поместите рядом с этим скриптом файл игры и её модулей, а так же одноимённые файлы “.qproj”, и запустите скрипт. Он автоматически сконвертирует все QSP-файлы в qsps, разобьёт на отдельные файлы-локации и разместит по папкам.

converter-splitter

Релиз пока не делаю. Думаю написать python-аналог утилиты txt2gam, чтобы её не приходилось устанавливать и прописывать в проекте. Т.е. это будет конвертер, который работает по умолчанию без дополнительных приложений. Таким образом необходимо будет указывать только путь к плееру в project.json. Вот тогда, надеюсь, и сделаю новый релиз.

Log in or Register to post comments.