Массивы уже не те, или Изменение в логике работы массивов в QSP

Как ведут себя массивы сейчас

Начать следует с того, что в «классическом» плеере версии 5.7.0 и ниже, а так же в Quest Navigator 0.0.28 и AeroQSP, в одном элементе массива можно хранить как текстовое, так и числовое значение. Вот как это выглядит:
код 1
При этом мы спокойно можем получить и числовое, и текстовое значение по указанному индексу:
код 2
Правда это создаёт ряд дополнительных трудностей.
Читать дальше

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 Гб текста).

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



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

Паровозик-6, опять обзоры

«Дальше», techniX
Игры про то, как мы бежим-бежим-бежим, почему-то популярны на этом паровозике. И тут то же самое. Нас сажают на мотоцикл, выдают ценный кейс и мы пытаемся этот кейс куда-то доставить. Процессом мы не управляем, единственная кнопка в игре это «Дальше». Однако история не линейная, как можно подумать. Поездка может закончиться на любом из шагов, это зависит от («нужно всего лишь...» ©)…

В целом плюс автору за идею «геймплея». Но жирный минус за то, что механика эта затмевает полностью саму историю, пусть простенькую. Когда разгадываешь секрет, перестаёшь читать текст и игра превращается в тетрис. И ещё не понравилось, что так и не сказали, чего это я такое вёз.

«Потвора — История первая», MAlishka
Мелкая игра-рассказ на Инстеде. В деревне недавно появилась страшная бабка и к ней укатился мячик местных мальчишек. Собственно, это и есть завязка. Далее, традиционным для каноничного Инстеда методом, тыкаем на всё и применяем детей тоже на всё подряд. Это было прохождение. Простите за спойлеры.

Игра короткая. Из плюсов — хороший текст, который не портит даже некоторое количество стилистических и орфографических ошибок. Из минусов — тема вообще не раскрыта. Игра вроде как про Потвору, но самой Потворы в игре нет (кстати, я глянул, это правда такое имя). Скудное описание старушки, развешивающей свежевыстиранное бельё, как-то не тянет на раскрытие персонажа. Кто она, почему переехала в эту деревню, правдивы ли (хотя бы отчасти) слухи — нет ни-фи-га. И это расстраивает, да.

«Библиотека 2: Сигнал», Андрей Лобанов
О, а вот это крупняк. Ну, паровозный крупняк. Игра с более чем одной загадкой, сюжетом и неплохим текстом. Является продолжением предыдущей «Библиотеки», которую я так и не прошёл из-за бага. Но, в принципе, знакомство с ней не обязательно. И так всё понятно. Восстание машин, мы в меньшинстве и надо срочно предупредить человечество, чтобы оно вмешалось и немедленно прекратило безобразие.

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

К недостаткам отнесу крайне назойливый звук клика (можно выключить), а также загадку с ящиком. Не надо так делать, я считаю. Но, в любом случае, игру рекомендую к прохождению, не пожалейте 15-20 минут. Один совет — записывайтесь почаще.

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

Добрый день!

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

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

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