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

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



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

Чтобы записать в числовую переменную числовое значение, мы просто пишем имя переменной, знак = и число:



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



Если мы попытаемся записать в текстовую переменную числовое значение, плеер автоматически преобразует число в текст, и в текстовой переменной окажется текстовое значение:



Если мы попытаемся присвоить числовой переменной текстовое значение, плеер попытается преобразовать текстовое значение в числовое, но если преобразование невозможно, на экране появится ошибка.


только для команды 2 не удастся выполнить преобразование типа


так выглядит ошибка, если попытаться засунуть текстовое значение в числовую переменную

Всё становится гораздо интереснее, если мы имеем дело не с отдельными значениями, а с выражениями.

Например, если мы попытаемся сложить два числа, то результатом сложения будет третье число:



Если мы попытаемся «сложить» две строки, то мы их просто «склеим» (в программировании это называется конкатенация):



Но что будет, если мы попытаемся сложить число и строку?

А тут произойдёт вот что.

Если хотя бы одно из значений в выражении — числовое, плеер попытается все значения преобразовать в числовые и вычислить выражение:



Если преобразование не удастся, то выполняется конкатенация:



Строки можно только «складывать» или сравнивать, поэтому если вы попытаетесь проделать с ними какие-то другие штуки, плеер выдаст ошибку о несоответствии типов данных:



Однако, если возможно преобразование всех строк в числа, то можно сделать так:



Таким образом, плеер обязательно преобразует тип к необходимому, если это возможно, особенно для операций присвоения.

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

Старайтесь не использовать строковые и числовые значения в одном выражении, либо приводите их к требуемому типу с помощью функций $str и val:



Не забывайте пользоваться подвыражениями, если нужно вставить значение в строку:



Оригинал статьи в вк.

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. И вот я добрался.

О, как же было здорово!

Визуальное оформление, звуковое… мне нравится всё. Краткие, лаконичные, но объёмные рельефные описания локаций. Ни разу не заблудился, не почувствовал, что чего-то не понимаю. Были небольшие грешки с опечатками и встретилось несколько речевых ошибок, но это всё ерунда. Я кликал каждый объект. Я проверял взаимодействие всех объектов друг с другом. Хотелось бы больше отыгрыша в случае, если делаешь очевидную глупость, но это тоже мелочь. Говорящий череп прописан изумительно. Один из ярчайших персонажей текстовых игр, которых я помню. Врезался в память навсегда.

Прекрасно передана атмосфера мрачной цитадели. Рядом с нашей тюремной камерой есть другие тюремные камеры, которые приоткрывают некоторые детали, из которых мы, в свою очередь, как пазл, складываем собственную картину мира. Мы пытаемся понять, где мы оказались, и что здесь произошло, и сама игра через окружение, через нарратив, преподносит нам историю и события. Без кат-сцен, без длинных разъясняющих диалогов, мы узнаём что-то новое. Прекрасная подача, такова и должна быть подача в хороших играх. И эта же подача стимулирует нас двигаться по игре, изучать всё вокруг. Мы ещё даже не в сюжете, мы только в экспозиции, где нас знакомят с механиками, логикой и темпом прохождения, а мы уже втянулись в процесс, мы уже стремимся идти всё дальше и дальше, и уже требуем активности, событий. Пусть событий, происшедших несколько лет, часов, минут назад, но событий.

Эх, я мог бы часами петь дифирамбы "Тёмной цитадели", но у игры есть один существенный недостаток: она катастрофически коротка!

Я хочу больше. Прям, вот хочу. Аж до слёз хочу. Не хочу быть тридцатислишнимлетним дядькой, хочу, чтоб Svartberg написал полную версию игры. Хочу узнать в конце концов, где я, и что здесь произошло?

Однозначно призываю всех поиграть и испытать на себе всю красоту, атмосферность и изящество игры от Svartberg`а.

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

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

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

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

Три рыцаря. Автор: студия "The CostumeS". Платформа: QSP

Это несколько видоизменённая версия отзыва, опубликованного здесь http://qsp.su/index.php?option=com_agora&task=topic&id=1282&p=2&prc=25&Itemid=57#p27841

"Три рыцаря" были созданы целой командой — The CostumeS. Однако, поскольку наибольший вклад в игру сделал Миоирель, и сама игра исключительно в его стиле, местами я обращаюсь к нему.

Должен сразу оговориться, что на момент прохождения "Трёх рыцарей" я напрочь забыл о "Гринде", и если бы не упоминание Миоиреля, вряд ли взглянул на эти две игры в сравнении, и уж тем более не заподозрил бы "Трёх рыцарей" в том, что они продолжают "Гринд".

А забыл я о "Гринде" потому, что кроме фирменного стиля Миоиреля меня в этой игре ничего не привлекло. Я понял, что игра сублимирует такое явление, как гринд (что и следует из названия), ну и собственно всё. В своё время я убил на неё пару часов, добился воскрешения девушки, а потом не нашёл в себе силы вернуться. Видимо я не являюсь фанатом гринда, мне подавай что-то ещё.

Взявшись за "Трёх рыцарей", я не подозревал, насколько буду обескуражен. С одной стороны я оказался в мистическом мире с довольно абстрактным описанием бытия, где ты сам создаёшь собственное представление о вселенной, опираясь на скупые (но тем не менее очень живые и яркие) детали, что я, так же, очень ценю в играх Миоиреля; а с другой стороны — я оказался в адском котле беспощадных случайностей, которые уничтожают тебя раз за разом, потому что боги нашей грешной Земли не наградили удачей.

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

Я всё время дох от яда; мне каким-то чудом удалось накликать два аркана, тупо нажимая «Атаку»; для чего нужны заклинания, я не понял, но теперь я знаю ещё три непростительных заклятья помимо «Авады Кедавры», «Круцио» и «Империо».

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

Что мы получаем от такой игры? Давайте попробуем разобраться.

Заядлый игрок всяких казино, лотерей и «ставок на спорт» получает удовольствие, потому что делает ставку и предвкушает выигрыш. Именно предвкушение создаёт заядлых игроков, поскольку в момент, когда на рулетке выпадает число, или диктор объявляет выигрышные номера, или один боксёр отправляет другого в нокдаун, выброс гормонов удовольствия в мозг заставляет человека чувствовать себя почти победителем. Вне зависимости от того, выигрывает человек или проигрывает, ощущения перед объявлением результата одинаковы.

Попробуйте поставить три автомата: один позволяет играть без ставок, другой — с виртуальными ставками, третий — с реальными. Какой соберёт больше игроков? А вот ещё эксперимент — поставьте три автомата с реальными ставками и задайте разные проценты выигрыша: 75% случаев, 50% случаев и 25% случаев. Снова, какой соберёт больше игроков?

Отсюда не сложно сделать вывод, что притягательность игры для игрока складывается в основном из двух составляющих: ценности ставки и труднодоступности выигрыша. Чем существеннее вклад игрока в игру и чем тяжелее ему достаётся победа, тем притягательнее и ценнее игра. Не сама победа, нет. А именно игра, потому что, как мы видим, игроку важны не выигрыши, а предвкушение выигрыша. Победа — лишь задаёт вектор, стимул к движению. Да, она тоже приносит удовольствие, но предвкушение победы намного слаще самой победы.

Однако, чтобы победа была действительно победой, чтобы нам хотелось к ней двигаться, она должна не только отбивать ставку, но и намного превосходить её по своей субъективной цене.

И вот у нас "Три рыцаря", и ставка в этой игре — наше время. Как много времени мы готовы потратить, чтобы победить, и что мы получим в награду? "Три рыцаря" не показывают нам этой награды, и хотя Миоирель пишет, что "Три рыцаря" вроде как продолжают "Гринд", это вовсе не так. Из-за того, что "Гринд" сублимирует гринд, Миоирелю пришлось ещё на старте обозначить для нас доступные награды. Мы занимаемся тем же, чем и в "Трёх рыцарях", вкладывая наше время в клики по кнопке «Атака», но только в "Гринде" наши победы близко, мы видим рост по цифрам в статах, мы предвкушаем каждую нашу победу и нам не жаль потраченного времени даже если мы не выполним все квесты, не раскроем все секреты игры и по факту проиграем. К тому же, реально проиграть, вернуться к изначальной точке, с которой ты стартовал, в "Гринде" невозможно, и от этого победы становятся ещё ближе. Чего не скажешь о "Трёх рыцарях".

Здесь работает обратный эффект. Мы чаще проигрываем, чем выигрываем, мы не видим, к чему стремимся, и не ощущаем, что наша ставка может сыграть. И вместо предвкушения победы, через какое-то время мы начинаем предвкушать поражение, что пробуждает страх, непонимание и отталкивает нас от игры. И самое неприятное, что кроме нашего времени мы больше ничего вложить в эту игру не можем (по крайней мере я не нашёл, что вложить). Нельзя оценить тактику, нельзя понять, как действуют рыцари, нельзя подкопить ресурсов (у меня не получилось), которые однозначно помогут. А большая часть действий приводит к поражению, или вообще к чему-то непонятному. Поэтому нельзя сказать, что "Три рыцаря" продолжают "Гринд". "Три рыцаря" — это травести на "Гринд". Причём, если так и задумывалось — перевернуть всё, создать гнетущее чувство расползающегося под твоими пальцами мира, который ты не можешь контролировать от слова «вообще», — моё почтение.

Игра и правда отталкивает, в отличие от "Гринда", и я не знаю, как вернуть ей притягательность, не превратив в "Гринд 2". Не хочется видеть самоповтор игры, так как в "Гринде", по сути, кроме гринда ничего больше нет (опустим высший смысл, недоступный моему недалёкому разуму). Попытка слегка изменить механику и дать игроку новые ощущения — это логичный шаг, но если игрокам это не просто не зашло, но и оттолкнуло их от игры, значит поворот был сделан не в том направлении. Поскольку я ни одно начинание не довёл до конца, я даже представить не могу, каково это разрабатывать вторую часть игры, чтобы сделать её столь же занимательной, как первую, и при этом не сплагиатить самого себя. Так что, моё почтение, Миоирель. Несмотря ни на что, моё почтение.

Страница игры «Гринд».
«Три рыцаря» в архиве QSP-Compo 2020

Впечатления от игры "Dictator"

автор игры: NickoAilus
участник конкурса: Паровозик-2018
карточка игры: здесь

Что понравилось:

• Игра небольшая.
• Адекватное для меня соотношение количества концовок к объему текста.
• К одной и той же концовке можно прийти разными путями.
• Можно использовать хитрость — говорить одно, а делать другое.
• Загадочность и недосказанность.
• Отличная авторская музыка.

Что осложняло игру:

• Почти полное отсутствие применения типографики, чтение строчек шириной в целый экран не самое легкое занятие, изменение размеров окна игры не спасало.
• Слишком большие картинки, они часто несоразмерны нескольким строчкам текста, которые можно просто не заметить, забыв прокрутить скролл вниз.
• Не все музыкальные треки зациклены «без швов», иногда были отчетливо слышны стыки, что немного отвлекало.

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

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

Пролог, завязку и часть сюжета я более или менее понял. Остальное, что не понял, списываю на загадочность и атмосферность НФ-сеттинга. Концовки и подводка игрока к ним, на мой взгляд, скорее удалась, чем нет. Общее впечатление от игры хорошее. Если она будет доработана и/или выйдет продолжение, то я постараюсь поиграть и в них — короткий жанр мне в последнее время близок.