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"

qSpider - плеер для запуска QSP игр в браузере



Этот проект начался просто как проверка возможности запуска C кода в броузере с помощью WebAssembly.
Потом было понимание, что в связи со «смертью» Flash, скоро перестанет работать AeroQSP плеер, и было бы неплохо сделать возможность запуска игр сделаных под AeroQSP.
И вот пришло время его альфа-релиза.

Страница с релизами

https://github.com/qspfoundation/qspider/releases
Новые релизы будут появлятся на ней по мере выхода.

Демо игра

Сказочка на ночь

Поддерживаются только новые версии браузеров (поддержки Internet Explorer нет и не будет).

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

Ее основные отличия от 5.7.0
  • операторы работы с модулями переименваны -ADDQST в INCLIB и KILLQST в FREELIB
  • в ряде функций (напрмер ARRPOS и ARRCOMP) необязательный параметр перенесен с первого места на третье
  • добавлены локальные переменные
  • добавлены циклы
  • изменена логика работы массивов — если раньше в одном элементе массива могли одновременно находиться и числовое, и строковое значение, то сейчас будет храниться всего лишь одно с признаком типа.

Отличия qSpider от Классического плеера:

  • пути к ресурсам (картинкам/аудио файлам) регистрозависимы — то есть если файл называется 'image.jpg' а в файле игры записано 'Image.jpg' или 'image.JPG' то плеер не сможет показать такую картинку
  • для проигрования аудио используются встроенные средства браузера, поэтому рекомендованый формат для плеера — mp3 как самый поддерживаемый (хорошая альтернатива — webm, у него меньше размер при том же качестве, но чуть хуже с поддержкой браузеров)
  • есть возможность пропуска wait (кликом по странице)
  • сохранения хранятся в браузере

Внешний вид пока не финализирован — критика и предложения по улучшению очень приветствуются.


Планы на ближайшее будущее:

  • загрузка игры из архива и по внешней ссылке
  • экспорт/импорт сохранений — для переносов между браузерами
  • возможность запуска Aero игр

Запуск плеера на компьютере
Из-за ограничений безопасности плеер нельзя запустить просто открыв index.html файл в браузере.
Поэтому для запуска необходим локально запущенный сервер — можно использовать один из списка или же расширение хрома Web Server for Chrome.

В дальнейших инструкциях я буду использовать расширение:

  • устанавливаем Web Server for Chrome
  • скачиваем и распаковываем qspider-player.zip с страницы релизов
  • открываем в хроме chrome://apps/ и выбираем в списке Web Server
  • в открывшемся попапе выбираем папку, в которую распаковали плеер и запускаем сревер
  • там же в попапе будет ссылка
По умолчанию вместе с плеером упакована игра «Сказочка на ночь».

Для запуска другой игры:
  • копируем игру в подпапку `game`
  • редактируем в той же папке файл `game.cfg`
    • id — уникальный идентификатор игры (используется для сохранений)
    • title — название игры (будет показано в заголовке плеера)
    • folder — путь к папке с игрой относительно папки game
    • file — название файла с игрой

Преобразование типов в QSP

Эта статья поможет вам разобраться в таком сложном вопросе, как преобразование типов в операции присвоения, или в выражениях.

В QSP существует всего два типа значений: числовой и текстовый. Числовой означает любое целочисленное число в пределах от -2147483648 до 2147483647; а текстовый — любую строку текста (нет, на самом деле любую. Ограничения для строк — 2 Гб текста).

Вот как выглядят такие значения:



Для хранения значений мы используем переменные или массивы. И точно так же массивы и переменные (далее просто — переменные) бывают двух типов.
Читать дальше

QSP как язык программирования

Добрый день!

Меня спрашивают, почему у QSP свой язык программирования и почему бы не использовать что-либо существующее (Python, например). На мой взгляд, вопрос вполне понятный, особенно для тех, кто не знаком (или плохо знаком) с QSP.
Причин несколько.

Во-первых, QSP появился до того, как Python стал популярен.
Во-вторых, QSP проще Python'а в изучении (это важно, так как платформа ориентирована на начинающих).
В-третьих, свой интерпретатор позволяет сделать синтаксис более специализированным.
В-четвертых, интерпретатор QSP легче Python (Python — монстр при встраивании, во всяком случае так было раньше). Здесь только LUA может быть конкурентом.
В-пятых, я не люблю идею вездесущих отступов для корректности программ (в теории это требование делает код более понятным, но мне, к примеру, сложно ориентироваться в Python-коде).
В-шестых, более специализированный движок упрощает портирование на разные платформы.
В-седьмых, QSP более изолирован от окружения, что делает его безопаснее для исполнения на машинах (по идее, невозможно написать QSP-код, который поломает что-то в системе).
В-восьмых, легче что-то изменить, в случае чего. В самом Python что-то менять было бы сложно (нужно писать транслятор из какого-то другого языка в Python).

Ну и, конечно же, изначально хотелось поэкспериментировать с синтаксисом и интерпретацией :)

Объявлены результаты QSP Compo 2020



Результаты конкурса QSP-Compo были вывешены в группе ВКонтакте.


Игры «Три рыцаря» и «The Lain Project» были переведены во внеконкурсную номинацию в связи с просьбой их авторов.

Обсуждение результатов конкурса идёт на форуме QSP и в Дискорде.

The Dark Citadel. Автор: Savrtberg. Платформа: QSP

Это основательно переработанный отзыв со страниц темы обсуждения конкурса "QSP-Compo 2020" http://qsp.su/index.php...p27842

"TDC" попала в меня. Я уже видел демки Svartberg`а, и потому откладывал эту игру напоследок, в первую очередь осваивая другие игры QSP-Compo 2020. И вот я добрался.

О, как же было здорово!
Читать дальше

Путь крови и плоти. Автор: D31M0S. Платформа: QSP

Это расширенная и видоизменённая версия отзыва с конкурса QSP-Compo 2020. Оригинал можно найти здесь http://qsp.su/index.php?option...#p27842

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

Перед нами весьма недурственно написанная интерактивная книга, где мы играем за полиморфное существо по имени Багрянец. Ещё его называют Красная Глина. Он (оно) может принимать любую форму, сжиматься и растягиваться, и жаждет лишь одного — пожирать.
Читать дальше