qSpider 1.1.0

Вышла новая версия qSpider — 1.1.0.

Новые фичи:
— standalone сборка игры (плеер без полки игр и загрузкой игры из конфига)
— в online версию добавлена возможность использовать ссылку на игру из каталога
— улучшено отображение горячих клавиш в меню паузы (вместо meta теперь отображается название клавиши в зависимости от платформы (Ctrl на Window и ⌘ на Mac)

Список исправлений:
— исправлена работа savegame/opengame команд и их работа при nosave=1
— исправлен запуск aero игр в десктоп версии
— исправлена работа тега center в названии действий, предметов и пунктов меню
— исправлена поддержка загрузки лейаута из qspgui.cfg
— исправлено закрытие view панели
— исправлена поддержка кирилицы в названии файлов внутри zip архивов созданных в Windows
— исправлено падение плеера если горячая клавиша была нажата при открытом msg/input
— исправлено сохранение по имени (savegame '1') в десктоп версии
— исправлена поддержка gt без пробелов вокруг (&‌gt'loc') внутри ссылок

Ссылки на игры из каталога в online версии
Теперь к ссылке на онлайн версию можно добавить параметр catalogId.
Например https://qspfoundation.github.io/qspider/?catalogId=125 — игра сказочка на ночь
Если игры еще нет на полке — она будет автоматически добавлена.
Когда игра на полке — она будет запущена.
Соотвествующий id можно взять из ссылки на qsp каталог — qsp.org/index.php?option=com_sobi2&sobi2Task=sobi2Details&sobi2Id=126&Itemid=55
необходимо взять значение параметра sobi2Id (126 в примере)

Standalone версия плеера

Для тех кто хочет опубликовать свою игру онлайн без полки игр или же собрать desktop версию своей игры была добавлена standalone версия плеера (без полки игр и загрузкой игры из файла конфига).

Особенности standalone сборки:
  • если в файле конфига описано несколько игр — будет запущена первая из списка
  • не поддерживаются архивы игр — их надо распаковать

В релиз теперь включается архив с standalone версией — qspider-player-standalone.zip
Игру вместе с файлом конфига game.cfg необходимо поместить в папку game.
После этого игру вместе с плеером можно публиковать online.

Для создания desktop версии игры подготовлен шаблон репозитория с необходимыми скриптами для сборки. Будет необходим аккаунт на github.com и минимальные навыки работы с git.

Создание репозитория
  • заходим в репозиторий https://github.com/QSPFoundation/qspider-standalone-game-template
  • в правом верхнем углу нажимаем Use this template и Create a new repository
  • обязательно отмечаем Include all branches
  • вводим название репозитория, выбираем public (необходимо для использования Github Pages для онлайн версии и файла автоапдейтов)
  • создаем репозиторий

Добавление файлов игры и минимальные настройки для online публикации
  • клонируем репозиторий
  • копируем файлы игры в папку репозитория (в дальнейшем лучше разработку вести в ней)
  • если у игры не было game.cfg файла — заполняем пустой файл из репозитория, указывая id, название и путь к qsp(или qsps) файлу игры
  • коммитим файлы и пушим

Публикация только онлайн версии
  • заходим на вкладку Actions в репозитории
  • в левой панели выбираем Update github pages (game only)
  • в правом верхнем углу таблицы нажимаем Run workflow и нажимаем кнопку Run workflow в появившейся панели
  • выбираем All workflows в левой панели
  • Ждем пока Update github pages (game only) и pages build and deployment (появится после завершения (Update github pages (game only))) завершатся

Ссылку на игру можно найти в вкладке Settings -> Pages.

Настройка desktop сборки

Генерация ключей для подписи автоапдейтов игры
Для этого шага необходимо установить NodeJS
  • открываем консоль (в windows это можно сделать нажав win + R и набрав cmd)
  • запускаем команду
    npx @tauri-apps/cli signer generate
  • вводим пароль для нашего ключа
  • копируем публичный ключ из вывода в консоли (строка случайных символов после слов Your public key was generated successfully:)
  • открываем файл game.build.conf.json в папке репозитория и вставляем ключ в поле pubkey
  • копируем приватный ключ из вывода в консоли (строка случайных символов после слов Your secret key was generated successfully — Keep it secret!)
  • открываем вкладку Settings репозитория
  • в левой панели выбираем Secrets and Variables — Actions
  • в секции Repository secrets добавляем 2 записи:
    1. TAURI_PRIVATE_KEY, в значение вставляем скопированный приватный ключ
    2. TAURI_KEY_PASSWORD, в значение вводим пароль использованный при генерации ключей

Заполнение данных для десктоп сборки
  • меняем иконку игры game-icon.png — размер 1024х1024 пикселей png с прозрачностью
  • открываем файл game.build.conf.json в папке репозитория
  • вводим название игры в поле package.productName
  • изменяем версию в package.version если необходимо
  • изменяем идентификатор сборки в поле tauri.bundle.identifier — только английские буквы разделенные точкой
  • заполняем поля tauri.bundle.publisher, tauri.bundle.copyright, tauri.bundle.shortDescription и tauri.bundle.longDescription
  • в поле tauri.updater.endpoints добавляем ссылку на github pages репозитория с /updater.json в конце
  • настраиваем окно игры в секции tauri.window
  • коммитим и пушим изменения

Создание релиза игры
  • открываем вкладку Actions в репозитории
  • в левой панели выбираем Game release
  • в правом верхнем углу таблицы нажимаем Run workflow и нажимаем кнопку Run workflow в появившейся панели
  • выбираем All workflows в левой панели
  • ждем пока Game release успешно завершиться (может занять минут 10)
  • в левой панели выбираем Update github pages (game and updater)
  • в правом верхнем углу таблицы нажимаем Run workflow и нажимаем кнопку Run workflow в появившейся панели
  • Ждем пока Update github pages (game and updater) и pages build and deployment (появится после завершения (Update github pages (game and updater))) завершатся

Ссылка на последний релиз будет доступна в правом сайдбаре на вкладке Code.

Для созданий новых релизов вместе с изменением файлов игры необходимо изменить версию в файле game.build.conf.json.

Пакет QSP для Sublime Text

Когда-то я публиковал пост о начале работы над билдером QSP-игр для Sublime Text. С тех пор много печенья съедено, и много сухарей насушено.

Теперь Билдер не является основной частью проекта, а только лишь одной из составляющих полноценного пакета для Sublime Text. Теперь внутрь пакета упакованы и сам билдер и различные вспомогательные скрипты, подсветка синтаксиса и небольшая коллекция полезных сниппетов, и много чего ещё.

Установка пакета сократилась до нескольких простых действий:
  • Качаете последний релиз со страницы релизов.
  • Распаковываете скачанный архив.
  • Копируете файл
    QSP.sublime-package
    в папку Packages рядом с установленным Sublime Text (Например, в
    C:\Program Files\Sublime Text\Packages\
    ).
  • Подсветка синтаксиса, плагины и прочее заработают при следующем запуске Sublime Text.

Более подробная информация о том, как работать с пакетом и встроенным в него билдером, представлена на гитхабе.

Есть и инструкция для быстрого старта: github.com/AleksVersus/JAD_for_QSP/blob/master/siaiz.md

Буду рад любым замечаниям по работе пакета. Спасибо, если пользуетесь.

qSpider 0.13.0

Вышла новая версия плеера qSpider — 0.13.0

Новые фичи:
  • msg и input больше не закрываются по клику вне модалки, улучшена поддержка клавиатуры — закрытие по Esc, кнопка в msg теперь фокусируется при открытию (соответственно нажатие пробела или Enter аналогично клику на кнопку)
  • в браузерную версию добавлена возможность открытия файла с списком игр или отдельной игры через URL — например https://qspfoundation.github.io/qspider/?config=https://qspfoundation.github.io/qspider/game/game.cfg загрузит файл конфига, а https://qspfoundation.github.io/qspider/?game=https://qspfoundation.github.io/qspider/game/skazka/skazka.qsp — то есть теперь можно просто выложить файл игры на какой-то сервер и запускать через qspfoundation.github.io/qspider, здесь пока есть ограничение — на сервере должна быть включена поддержка CORS (я занимаюсь возможностью обойти это ограничение)
  • добавлена поддержка запуска игры в текстовом формате qsp — для этого файл должен быть с расширением `.qsps`, поддерживаются кодировки utf-8 и utf-16le (qgen экспортирует в этой кодировке), но я рекомендую utf-8 поскольку файл будет значительно меньше по сравнению с utf-16le
  • для запуска плеера из qgen больше не нужен дополнительный bat файл
  • в десктоп плеере теперь доступна панель разработчика как в обычном браузере

Исправлены следующие баги:
  • сепаратор в меню выводился отдельным пунктом меню
  • исправлена поддержка 4-го недокументированного параметра в rgb функции отвечающего за альфа канал (прозрачность)
  • исправлен первый запуск (иногда при запуске из qgen не открывалась игра)
  • исправлена поддержка html — теперь все аттрибуты тегов должны сохраняться (раньше большая часть терялась при отрисовке)
  • исправлено отображение названия игры в toolbar — раньше длинное название ломало отображение
  • исправлен креш плеера при использование ряда тегов

В процессе работы часть кода была вынесена в отдельные npm пакеты, доступные без плеера
@qsp/converters — в пакете содержатся функции для конвертации из текстового формата qsp в бинарный и обратно
@qsp/cli — консольная утилита для конвертации аналогичная txt2gam (требует наличия усnановленой NodeJS, но может запускаться на linux и mac)
@qsp/wasm-engine — ядро QSP собранное в WebAssembly и JavaScript обвязка для запуска игр, пакет специально собран таким образом что его можно запускать как в браузере так на NodeJS сервере

qSpider 0.12.0

Вышла новая версия плеера qSpider — 0.12.0

В этой версии добавлена desktop версия плеера для 3 основных платформ
Windows
MacOs
— Linux — deb пакет и AppImage формат

Основные изменения в desktop версии:
— возможность открыть qsp игру из папки (в отличии от web версии, где можно открыть только архив)
— открытие игры через drag-n-drop файла игры на окно плеера
— открытие игры через консоль (с помошью параметра --file)
— загрузка файла конфига из папки с игрой
— дополнительная секция в файле конфига для настройки окна desktop плеера
— автоматической обновление desktop плеера при выходе новой версии

Исправлены следующие баги:
— не поддерживался html в диалоге input
— в aero режиме убран лишний отступ при HIDE_SCROLL_ARROWS=1
— исправлен тег center для большего соответвия classic плееру

Настройка окна desktop плеера
В конфиг файле добавлена новая секция
[game.window]
width = 1280
height = 960
resizable = true
minWidth = 1024
minHeight = 768
width и height задают размер окна при старте игры, minWidth и minHeight дают возможность задать минимально возможные размеры при resize окна, а resizable параметр позмоляет запретить изменения размера в принципе (автоматически включается в aero редиме)

Запуск плеера из qgen
Из-за бага в используемой библиотеке сделать плеер напрямую совместимым с qgen не получилось, надеюсь в ближайшее время баг будет исправлен и тогда плеер можно будет просто выбрать в настройках qgen.
Пока же для запуска можно использовать простенький bat файл
SET QSPIDER=C:\Program Files\qSpider\qSpider.exe
SET DESTPATH=%~f1
start "" "%QSPIDER%" "--file=%DESTPATH%"
Меняем путь установки если он отличается от стандартного, сохраняем в виде .bat файла и потом выбираем этот файл в настройках qgen.

qSpider 0.11.1

Вышла новая версия плеера qSpider — 0.11.1

Исправлены следующие баги:
  • добавлены data-qsp аттрибуты, упущенные в прошлой версии
  • исправлен баг с неправильными путями к ресурсам после загрзуки qsp модуля из папки
  • исправлена минимальная высота контента у панелей (основное и дополнительное описание) — раньше высота зависела только от контента и абсолютно спозиционированные элементы могли распологаться некоректно, теперь внутренний блок панели занимает как минимум всю высоту панели
  • исправлена поддержка svg тегов

qSpider 0.11.0

Вышла новая версия плеера qSpider — 0.11.0
Демо — https://qspfoundation.github.io/qspider/

Новые фичи:
  • подержка игр в AeroQSP формате
  • поддержка style аттрибута в тегах
  • к основным элементам интерфейса добавлен data-qsp аттрибут (data-qsp=«main», data-qsp=«actions» и тд)
Исправлены следующие баги:
  • кнопки сохранения/загрузки теперь будут спрятаны, если в игре установлен nosave=1
  • исправлен align аттрибут в таблицах
  • исправлен вызов onactsel (в прошлых версиях поведение отличалось от классического плеера)
Поддержка игр в AeroQSP формате
Собственно этот функционал так и затянул выход новой версии. Я старался добиться, чтобы как можно больше AeroQSP игр можно было запускать без дополнительных изменений самой игры. Оказалось что HTML движок в флеш версии AeroQSP достаточно специфичен и не всегда совпадает с тем как работает браузер.

Вот список особенностей и отличий:
  • несколько игр использовали синтаксис, который поменялся в 5.8.0 (порядок аргументов в INSTR, ARRCOMP, ARRPOS) и в qSpider будут выдавать ошибку о несовпадении типов данных
  • в AeroQSP шрифты подключались в формате swf, использовать такой формат больше нет возможности, поэтому если игра использует нестандартные шрифты — их необходимо будет подключать через файл конфига в секции game.resources
  • в qSpider не поддерживаются эффекты pixels, h_blinds и v_blinds, остальные эффекты могут немного отличаться от того как работала флеш версия
  • не поддерживается переменная SCROLL_SPEED (хотя я вроде и не видел чтобы она использовалась хоть в одной игре)
  • обработка клика в флеше отличается от браузера — если на блоке нет обработчика то он не перехватывает клик даже если размещен поверх другого, в ряде игр это привело к тому что неспрятанные панельки (пустые и не видимые) в qSpider блокируют клики по линкам под ними. Пример — игра Новогодние сказки где кнопка Играть почти полностью перекрыта пустой на этот момент панелькой действий. Лечится небольшими изменениями игры — отключением неиспользуемых панелей.
  • в флеше тег center внутри таблиц растягивает таблицу на всю ширину, при этом еще размеры ячеек без явно указанной ширины в этом случае считаються не как в браузере, чаще всего заметно в действиях — для форматирования по умолчанию используется таблица, и если в названии действия использовать тег center, то в флеш версии текст будет по середине панели, а в qSpider — нет. Лечиться добавлением width=100% в такую таблицу. Я не смог сделать это на уровне плеера поскольку в ряде игр это ломало отображение.

Пример подключения
Для подключения AeroQSP игры через конфиг необходимо в основной секции добавить mode = «aero», и если используеться размер игры отличающийся от дефолтного 800х600 — добавить секцию с размерами

[[game]]
id = "c2cb4b5b-6a1c-482e-bb47-9ef207fb0dcd"
title = "Чашка кофе"
mode = "aero"
file = "aero_coffee.aqsp"

[game.aero]
width = 504
height = 680
При этом можно использовать как aqsp архив, так и распаковать его и прописать ссылку на qsp файл в папке.

ВАЖНОЕ ЗАМЕЧАНИЕ:
Я не собираюсь развивать и поддерживать (кроме багфиксов) формат AeroQSP, поэтому не советую начинать новые игры с его использованием. В планах добавить в qspider возможность упавления темой игры, но пока конкретной даты нет.

qSpider 0.10.0

Вышла новая версия плеера qSpider — 0.10.0

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

Исправлены следующие баги:
— неправильно создавался файл сохранений размером > 64кб (любая более-менее крупная игра), загрузка такого сохранения в дальнейшем выдывала ошибку
— ошибка в qsp коде не отображалась, если перед ней был использовался оператор взаимодействующий с вводом-выводом (`msg`,`input`, `inclib`)
— если аудио файл уже проигрывался, при вызове `play` он запускался снова
— отсутствовал hover на элементах списка игр и слотах сохранений

Новые фичи:
— поддержка тега `video`
— подключение к игре дополнительных ресурсов — шрифты, css и js

Подключение к игре дополнительных ресурсов
в файле конфигурации добавилась новая секция с описанием дополнительных ресурсов
[game.resources]
styles = [
  "https://fonts.googleapis.com/css?family=Sofia",
  "styles.css"
]
scripts = [
  "script.js"
]
fonts = [
  ["Shelter", "fonts/shelter.woff2"]
]
icon = "icon.png"
В `styles` подключаем дополнительные css файлы — это могут быть как внешние ссылки, так и файлы из папки с игрой.

В `scripts` подключаем JavaScript файлы. Поскольку нет возможности автоматически удалить JS код из памяти (при переключении на другую игру например) — это надо делать вручную. Дальше будет пример файла. Добавлена возможность создавать специальное событие на объекте `window` из кода игры с помощью `exec`.
exec('qspider.event: test_event')
exec('qspider.event: event_with_args[1, "test"]')
Возможности вызвать код игры из JS пока нет — это в планах.
// записываем весь наш код в специальную переменную, чтобы потом можно было удалить
window.custom_game_script = {
  // обработчик игровых событий
  on_event(e) {
    // в e.detail.name будет имя события (test_event или event_with_args из примере выше)
    // в e.detail.args будeт массив дополнительных аргументов (в event_with_args это [1, "test"])
  },
  // обработчик выгрузки игры
  unload() {
    // отписываемся от событий
    window.removeEventListener('game-unload', window.custom_game_script.unload);
    window.removeEventListener("qspider-event", window.custom_game_script.on_event);
    // удаляем переменную
    delete window.custom_game_script;
  },
};
// добавляем слушатель на специальное событие, вызываемое при выгрузке игры
window.addEventListener('game-unload', window.custom_game_script.unload);
// добавляем слушатель на событие, вызываемое из игры через exec
window.addEventListener("qspider-event", window.custom_game_script.on_event);
В `fonts` подключаем дополнительные шрифты. Рекомендуемый формат — woff2, он поддерживается всеми современными браузерами. В сети полно онлайн конверторов из ttf в woff2.
Если у шрифта есть Bold, Italic и BoldItalic варианты в отдельных файлах, то подключение будет выглядеть вот так
fonts = [
  ["Shelter", "fonts/shelter.woff2"],
  ["Shelter", "fonts/shelter-bold.woff2", "bold"],
  ["Shelter", "fonts/shelter-italic.woff2", "normal", "italic"],
  ["Shelter", "fonts/shelter-bold-italic.woff2", "bold", "italic"]
]
`icon` дает возможность заменить иконку в табке браузера, т.н. favicon. По умолчанию там лого QSP.

qSpider 0.9.1

Вышла новая версия плеера qSpider — 0.9.1

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

Для загрузки архива qsp файл игры должен находится в корне архива (не в подпапке) и должен быть только один qsp файл в корне (если используются дополнительные qsp файлы, то они должны быть расположены в подпапке).

В планах на следующую версию — добавить поддержку AeroQSP игр.

qSpider 0.9.0

Вышла новая версия плеера qSpider — 0.9.0
Демо — https://qspfoundation.github.io/qspider/

В этой версии появилась возможнось определить список игр в конфиге плеера. Если было определено несколько игр — на старте плеера будет предложена возможность выбрать игру из списка. И в плеере добавится дополнительная кнопка, чтобы диалог выбора игры можно было вызвать позже. Если игра была определена всего одна — она автоматически запуститься.
Также добавлена возможность загружать игры по внешней ссылке (раньше плеер работал только с одной папкой). Здесь необходимо помнить о ряде ограничений связанных с ограничениями браузера:
  • с https страницы нельзя загрузить http ссылку
  • у сервера, где находится игра, должны быть настроены CORS заголовки
В связи с этим поменялся немного формат конфиг файла

[[game]]
id = "7466df3b-4236-4668-b0df-2a70477da67b"
title = "Сказочка на ночь"
description = """Ночью в полнолуние закрывай засов.
Не ходи к колодцу, коль услышал зов.
Чей бы голос ни был - дева ли, старик
Не ходи к колодцу, коль услышал крик ... (с)"""
file = "skazka/skazka.qsp"
  • перед описанием новой игры необходимо добавлять заголовок [[game]]
  • добавлено необязательное поле description — оно используется в списке игр
  • поле folder удалено, а в поле file путь нужно прописывать путь относительно папки конфига, или же он должен содержать внешнюю ссылку (например file = «qspfoundation.github.io/qspider/game/skazka/skazka.qsp»)
  • для определения горяцих клавиш игры необходимо использовать заголовок [game.hotkeys] (раньше он был [hotkeys])

qSpider HotKeys

Вчера вышла новая версия плеера qSpider — 0.8.1.
В ней, помимо небольшого баг фикса и добавления горячих клавиш в сам плеер, появилась возможность автору игры добавлять собственные сочетания горячих клавиш.

Архив с примером

Для добавления сочетания клавиш в игру необходимо прописать дополнительную секцию [hotkeys] в конфиге, где ключем будет сочетание клавиш, а значением — название локации в игре, которая будет вызвана при нажатии.

Поддерживаемые клавиши:


Модификаторы

  • shift
  • ctrl
  • alt
  • meta — для поддержки на macOs лучше использовать этот модификатор вместо ctrl

Специальные клавиши

  • backspace
  • tab
  • enter
  • capslock
  • esc
  • space
  • pageup
  • pagedown
  • end
  • home
  • left
  • up
  • right
  • down
  • ins
  • del
  • plus
  • f1-f19

Остальные клавиши можно определять просто по имени a, $, *, или =

Определять можно:

  • нажатие единичной клавиши — например i
  • одновременное нажатие — перечисляем клавиши через +, например alt+s
  • последовательное нажатие — перечисляем через пробел, например "g o enter"