RU

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

werewolf999 #2495 07.10.2020 20:14 26 comments 16885 views

Я уже какое-то время уже разрабатываю плеер, который позволял бы запускать QSP игры в браузере.
И наконец-то пришло время альфа релиза.

Демо игра - Сказочка на ночь
Страница с релизами - https://github.com/qspfoundation/qspider/releases
Новые релизы будут появлятся на ней по мере выхода.

Поддерживаются только новые версии браузеров (поддержки Internet Explorer нет и не будет).
Но проверял я в основном в Chrome и немного в Firefox - так что если у кого-то будет возможность проверить в других браузерах я буду очень благодарен за репорты об ошибках.

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

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

Известные проблемы:
- неправильно определяются пути к ресурсам если используется оператор openqst
- нет выбора act с клавиатуры
- у элементов системного интерфейса нет переводов

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

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

Запуск плеера на компьютере
Из-за ограничений безопасности плеер нельзя запустить просто открыв index.html файл в браузере
Поэтому для запуска необходим локально запущенные сервер - можно использовать один из https://gist.github.com/willurd/5720255 или же расширение хрома https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb
в дальнейших инструкциях я буду использовать расширение
- устанавливаем https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb
- скачиваем и распаковываем qspider-player.zip с страницы релизов
- открываем в хроме chrome://apps/ и выбираем в списке Web Server
- в открывшемся попапе выбираем папку в которую распаковали плеер и запускаем сревер
- там же в попапе будет ссылка

по умолчанию вместе с плеером упакована игра “Сказочка на ночь”
для запуска другой игры
- копируем игру в подпапку `game`
- редактируем в той же папке файл `game.cfg`
* id - уникальный идентификатор игры (используется для сохранений)
* title - название игры (будет показано в заголовке плеера)
* folder - путь к папке с игрой относительно папки game
* file - название файла с игрой

Рад, что теперь можно будет запускать игры в браузере без Flash.
werewolf молодец, плеер выглядит отлично (учитывая, что это ещё и альфа-версия) :)

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

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

Попробовал также на майкрософтовском Edge. Опять таки полет нормальный. Но из за английской локали в коде каждый раз настойчиво предлагает перевести страницу:)

На FireFox запустил для галочки. Проблем не выявлено.

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

на уровне плеера теперь поддерживаеются
- клавиши от 1 до 9 - выбирают действие с тем же индексом (как в класическом плеере)
- пробел - если действие в списке всего одно то выдирает его (как в класическом плеере)
- ctrl+s - открывает диалог сохранения
- ctrl+o - открывает диалог загрузки сохранения
- ctrl+r - перезапускает игру
- F5 - быстрое сохранение
- F9 - быстрая загрузка
- PageUp - увеличение громкости
- PageDown - уменьшение громкости
- Home - unmute
- End - mute

Я не до конца еще уверен в управлении зкуком - может у кого будут другие предложения по горячим клавишам для этого?

Так же теперь есть возможно определить для игры кастромные горячие клавиши.
Пример и описание того как это сделать - demo.zip

В планах еще сделать диалог со справкой (по F1) с этим списком, чтобы у игрока всегда была возможность его посмотреть

Aleks Versus Moderator 10.10.2020 17:11 (5 years ago)

Отпишусь здесь.
Запускал в опере, отлично работает и демо-версия, и с локального сервера.

В окне основного описания побаловался с CSS — само собой всё отлично работает, браузер же.)

Понимаю так, что в index.html можно засунуть ссылку на собственный CSS-файл и использовать в игре стили оттуда. А можно ли так подменять стили оформления, которые навешаны на интерфейс?

Aleks Versus:

Понимаю так, что в index.html можно засунуть ссылку на собственный CSS-файл и использовать в игре стили оттуда. А можно ли так подменять стили оформления, которые навешаны на интерфейс?

сейчас скорее всего не получится - там css классы автогнеренные и могут менятся от версии к версии
но вообще кастомизация интерфейса в планах
скорее всего можно будет
- подключить через конфиг css файл
- подключить через конфиг кастомный шрифт
- настроить расположение панелей (сейчас можно исползьовать qspgui.cfg файл как в классике но там не самая гибкая настройка) - я пока еще не решил как это лучше сделать, хотелось бы менять его в процессе игры
- настроить внешний вид плеера в принципе - тоже еще в раздумьях как это лучше сделать
- воможно сделать механизм плагинов - чтобы можно было подключать какие-то js библиотеки

вышла новая версия - 0.9.0
статья с описанием изменений - https://ifhub.club/2020/10/18/qspider-090.html

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

werewolf999,
Плеер классный, с большими возможностями кастомизации интерфейса через исходники.
Правда актуален только для “Классических” игр, и постоянно ощущается большой упущенный потенциал.
И у меня возник вопрос – не подумывал-ли ты из “web-плеера” сделать локальный плеер? Web плеер конечно хорошая идея, ибо у всех есть браузер чтоб его открыть – но установка “локального сервера” убивает всю доступность.
С другой стороны, можно пойти другим путём и использовать не браузер, а NW.js или Electron как локальную платформу – Это решило бы все вопросы с “доступностью”, да и NWjs и Electron имеет встроенный NodeJS что означает возможность работать с локальными файлами.

(Хотел бы пояснить смысл – как локальный плеер, Qspider мог быть стать хорошей (и что самое главное более гибкой) альтернативой плееру от Sonnix, если добавить не замороченную возможность работы c JS из QSP кода – в этом случае ещё и более динамичной.
Сам QSP прост и как следствие хорош для “Логики” игр, но имеет большие проблемы с визуалом и динамикой, хороший и не замороченный плеер мог бы решить эту проблему.)

Но и самое главное (по крайней мере для меня) – было-бы круто увидеть возможность использовать JS функции в QSP коде, т.е. что-то типа моста как в плеере от Sonnix.

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

Upd:
Поковырявшись с плеером, я понял, что взаимодействия JS-CSS (т.е. динамическая смена классов, например) может быть с лёгкостью выполнена через дифолтный QSP, т.к. в этом случае сам плеер занимается только интерпретацией и отрисовкой HTML, и как следствие получает код в виде стринги, с уже сгенерированными и раскрытыми переменными из QSP, т.е. классы DIVок могут быть динамически назначаться напрямую из QSP а на выходе – CSS будет отрисовывать всё на их основе.
(Также можно триггерить JS функции через проверку имени класса, если это нужно)

И поскольку плеер выполнен на реакте, gt $curloc не “обновляет” страницу в классическом понимании, т.е. сохраняется “позиция” скролла и всё прочие и не происходит назойливых мерцаний, но “изменённый” или “обновлённый” контент – обновляется.

Естественно, это не заменяет JS, с помощью которого можно делать намного больше, но даже в таком виде – это неплохо.

Upd:
Вопрос к тем, кто тестил этот плеер на более-менее больших проектах – Нет ли у вас проблем с загрузкой сохранений?
Дело в том, что – на демо играх всё работает хорошо, но это и не удивительно, они крошечные.
Но насколько я понял, система сохранений не очень ладит с большим кол-вом переменных, у меня кидает ошибку при попытке загрузится -
Тестил на 2х разных играх, одна весом 6mb вторая 10mb – обе сохраняются/загружаются на начальных экранах, но после начального init’а переменных – игра просто отказывается загружаться.

Поправка, потестил вторую “Демку”(Куртуазная Баллада), просто покликал наугад, чтоб набрать больше информации для сэйва – сохранился, попробовал загрузится – та же самая ошибка.
Т.е. система сохранений поломана.
Без сохранений – плеер бесполезен, хотя автор проделал большую работу над ним. Печаль:(

l0stetrnity:

И у меня возник вопрос – не подумывал-ли ты из “web-плеера” сделать локальный плеер? Web плеер конечно хорошая идея, ибо у всех есть браузер чтоб его открыть – но установка “локального сервера” убивает всю доступность.

это в планах, или на Electron (он мне не нравится из-за большого размера, получается 100mb электрона и 5mb плеера) или на https://tauri.studio/

подключение js к игре и взаимодействие с ним через exec тоже в планах

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

werewolf999:

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

Отлично! А то я уже почти потерял надежду, ведь этот плеер по факту более гибкий чем всё другое что доступно сейчас.
Да и возможность кастомизировать/изменять отображение контента через исходники – это круто.

werewolf999:

это в планах, или на Electron (он мне не нравится из-за большого размера, получается 100mb электрона и 5mb плеера) или на https://tauri.studio/

Единственная проблема это с дистом, т.к. попробуй объяснить “среднему-пользователю” что нужно устанавливать доп-расширения для локального сервера, для некоторых это сложнее чем квантовая физика.
Ну если мы сравниваем с классическим-плеером, так-то да, но нужно учитывать тот факт, что сейчас 2021 на дворе и у большинства если не опитка, так 4G – так что я не думаю, что дополнительные 100мб плеера кого-то испугают.
(Хотя по факту, в конечном итоге единственное что важно – это доступность и функционал, а не название.)

Но у себя я тестил плеер на NWjs (ибо для быстрых тестов он подходит лучше, чем Electron) – всё работает отлично, и даже становится не “Case Sensitive” (Т.е. пути к ресурсам, картинки итд.)

Aleks Versus Moderator 05.05.2021 10:59 (4 years ago)

l0stetrnity:

что дополнительные 100мб плеера кого-то испугают.

Не испугают, но будут ли они того стоить? Если качать такой плеер, чтобы поиграть в “Хронику борьбы с тараканами”, то оно того не стоит. А вот если в таком плеере будет полка игр со всеми играми QSP, которые есть на сайте, это уже интереснее.

Aleks Versus,
В этом вся суть, если нужно поиграть в “Хронику борьбы с тараканами” – то можно ведь использовать классический плеер? Т.е. если не используется дополнительный функционал, который предоставляет данный плеер – то выбор очевиден.
Т.е. в дополнительных 100мб по большей части поддержка JS(в перспективе), CSS, видео, аудио и работа с локальными файлами(в перспективе), если они не требуются для проекта – то можно использовать классический плеер и не заморачиваться.
Как-то так.

Вот если взять в пример плеер от Sonnix – Плеер сам по себе неплохой, с возможностью подключать CSS и JS – Но он уже не обновлялся в течении нескольких лет, веб-движок в нём устарел и многие CSS функции не поддерживаются, как например возможность использовать фильтры в кейфреймах.
Или, например регэкспы критуют на x64 версии плеера. (Я уже молчу о багах с интерфейсом)
А у него вес – чуть меньше 100мб и он активно используется, даже при всех косяках.
Почему? - Нет достойной альтернативы.

Upd:
Ну и опять-же, 100мб это если мы говорим об Электроне, но как werewolf999 отметил выше, можно использовать https://tauri.studio - А он по сути компайлится из модулей и ненужные модули можно просто напросто выкинуть, тем самым снизив вес диста.

Aleks Versus Moderator 05.05.2021 16:21 (4 years ago)

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

Ок, давай по пунктам.

Пункт первый – что делает плеер “Локальным”? Разве он сейчас НЕ локальный? Т.е. на данный момент, для его запуска на локальной машине – ты должен установить локальный сервер (или расширение для браузера, которое работает как локальный сервер)
Т.е. по факту, сам плеер НИКОГДА не будет полностью «Локальным», в противном случае его нужно писать на .cpp, Java или ещё чём-то компилируемом.

Пункт второй - Electron, NWjs, Tauri – По факту являются лишь “Браузерами” со встроенным NodeJS, но плеер к ним никаким образом НЕ привязан (И не ограничен), и сможет свободно работать как он работает сейчас.
Далее, никто никого НЕ ограничивает в выборе той или иной платформы или ЛИШЬ одним методом, вариантов всегда может быть несколько.

И последнее, “Немного” – понятие относительное, и он будет весить столько сколько нужно, всё что я перечислил включает в себя JS, CSS, графику и видео – это в любом случае компоненты на которых сам плеер построен, и “локальная версия” в любом случае будет их включать(Если она вообще будет), т.к. без них, сам плеер работать не сможет.

Upd:
Это можно воспринимать как бинарный рантайм, не более. На данный момент, ты можешь запросто скомпилировать плеер, засунуть его в NWjs или Electron и свободно запустить, делает-ли это плеер «локальным»? – Я так не думаю, более того, это даже не меняет его принцип работы.
Возможно, в дальнейшем при компиляции “локальной” версии, будут использоваться NodeJS методы для сэйвов и прочего, но кто сказал, что нужно убирать “Веб-версию” с localStorage? Разве они не могут существовать параллельно? (Учитывая, что веб-версия уже написана)

Log in or Register to post comments.