RU

Квест Навигатор против хлама

Nex Moderator 12.11.2016 05:23 14 comments 12854 views

Пора урезать возможности QSP. Нет, вы не ослышались )

Крутые фишки QSP… не нужны.

С тех пор, как я занялся портированием плеера на разные платформы, это первое, что мне не давало покоя. Адские MSG и INPUT - из-за них простая логика интерпретатора превращалась в кошмарную. WAIT тоже кровушки попил. И прочее.

В Навигаторе я старался сохранить все “прибамбасы” QSP, чтобы обеспечить воспроизводимость всех “старых” игр на новом плеере. Сейчас, спустя годы, вижу, что старался зря. Любители “олдскула” всё равно будут запускать старые игры на классической версии плеера. А в новом плеере эти примочки не нужны.

Кросплатформенности нет.

Ну, серьёзно. Прошло 15 лет с создания QSP. Где наша хвалёная “кроссплатформенность”? Она до сих пор лишь в проекте. На андроиде - есть порт плеера, на айфоне - нет порта, только Навигатор (с урезанными возможностями от классики). На линуксе что-то позабытое и позаброшенное всеми. Windows Phone? Нет порта. Браузер? “Аэра” тормозная только на флэше и всё. Причём она один фиг отличается от классического плеера по оформлению, полной совместимости нет. Какой яваскрипт, забудьте.

Всё вразнобой, нет ни одного кроссплатформенного стандарта. Переносить плеер на новую платформу и пытаться в ней сохранить всё многообразие фишек QSP и ухищрения авторов - это крайне тяжёлый труд. Потому и нет портов. Байт этого 15 лет назад не предусмотрел, да и не мог в принципе знать. Что все новые “крутые фичи”, которые тогда были прорывом по сравнению с уркой, не выдержат проверки временем и станут тяжкой обузой. Что вся эта крутая многофункциональность будет тормозить развитие.

Вы используете эти фичи?

За всё это время достаточно было игр, чтобы распробовать все фичи на вкус. Стали игры круче от WAIT? Да, одна-две игры, использовали его по назначению. Сделали анимационные эффекты и украсили свои игры. Все остальные - пытались вэйтом наказывать игрока. Стоит ли WAIT сохранять и ждать от него новых чудес? Или забить на него уже насовсем?

MSG, INPUT - в Навигаторе можно обойтись и без этих операторов. А ввести информацию и вывести сообщение игроку другими способами. Через яваскрипт и функцию опроса плеера.

От классического оформления я уже отказался. Оно не только отличается на Аэре, но ещё и мешает своей заточенностью на классический плеер. Для мобильника его принципы просто не подойдут. Слишком ограничен набор настроек, чтобы сделать полноценный мобильный интерфейс, да и на десктопе мало кого устраивает. Только отказавшись от поддержки классического оформления, получилось сделать более-менее работающую версию Навигатора.

Пора двигаться дальше.

WAIT, MSG, INPUT я сохранил ради портируемости старых игр на Навигатор. Стоило мне это не только сил и нервов, потраченного времени. Из-за поддержки таких фич, которые сильно влияют на логику выполнения, код плеера стал сложным и запутанным. А за ним стало запутанным и API, и разработка оформления. Вся поддержка старья вылилась в тяжёлые последствия.

Пора от этого избавиться. Плеер должен быть с минимальным набором фич, обеспечивающим всё, что действительно необходимо. Всё остальное - за борт.

Что осталось?

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

COUNTER под вопросом. Сейчас он используется в основном для плейлиста. Если проигрывание музыки будет через яваскрипт, то зацикливание будет сразу встроено. А периодическое выполнение локации можно будет сделать на яваскрипте - всё равно редко используется. Поэтому особой необходимости в нём нет.

Зачем это всё?

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

Edited at 12.11.2016 12:04 (9 years ago)

Жду комментариев, возражений, одобрений, проклятий на мою голову и бурных дискуссий )

Aleks Versus Moderator 12.11.2016 11:51 (9 years ago)

Насчёт msg и wait согласен. Авторы злоупотребляют ими и превращают игры в какое-то мракобесие. Даже с минимумом возможностей классического плеера msg, например, можно не использовать.

Spoiler

“Вы съели пирожок”
“ок”
“Вы съели пирожок”
“ок”
“Вы съели пирожок”
“а не пошёл бы ты уже”

То же и с wait. Через counter можно любые реалтайм-события сделать.

А вот input, если им не злоупотреблять помогает. Это правильное диалоговое окно

Spoiler

“Введите имя вашего героя?”
“Вася”
“Ок”

“Сколько вы хотите забрать?”
“7”
“Ок”

Это удобно. Я не представляю, чем заменить input в этих случаях.

За counter. У меня на него много планов. Хотя в основном это всякие визуальные эффекты, вроде титров, заставок, которые можно пропускать, визуальных задержек.

Насчёт музыки тоже что-то я не уверен. Насколько сложным для автора станет воспроизведение музыки? Если раньше я в коде мог написать play ‘music.mp3’ и оно играло, то в навигаторе как будет? Через JS, но что это значит? Придётся лезть в скин и править там js файлы?

Вот взять простую вещь: цвет гиперссылок. В классике достаточно было сделать lcolor = rgb() и цвет менялся. В навигаторе мне придётся заранее предопределить классы для каждого изменения цвета. Т.е. залезть в css. Можно и тегом font, но это тоже громоздко. Я понимаю, что изменять цвет гиперссылок нужно не так уж часто, и невелика потеря в сравнении с тем, какие возможности для оформления открылись, но это для примера. В навигаторе это сделать сложнее.

Так вот как? Не приведёт ли отмена фич к усложнению разработки игр для авторов?

А input мне правда очень жалко. Жальче, чем всё остальное вместе взятое. Может я просто к нему привык. Обойтись-то можно, но жаль. Удобный.

Я не представляю, чем заменить input в этих случаях.

Технически всё вполне реализуемо. Из игры в Навигаторе можно выполнить любой код на яваскрипте. Делаем локацию “Герой_имя” для обработки входных данных, из яваскрипта вызываем:

EXEC: GS 'Герой_имя', 'Зелепупий Аристархович'

Дальше обрабатываем в игре ввод текста как обычно.

Неудобно? Согласен. Оператором удобнее. Но во скольких играх этот ввод реально необходим? Таких игр очень мало, не вижу особой проблемы для автора научиться пользоваться новым методом для обработки такого диалога.

Вместо одного оператора автору нужно будет:
1. Вызвать функцию FUNC(’js.input’, ‘Герой_имя’, ‘Введите имя вашего героя’)
2. Обработать результат в локации “Герой_имя”.

Ну а для пользователя никакой разницы вообще не будет.

Есть и ещё один момент. В яваскриптовом диалоге мы можем ввести не только строку текста, но и сделать, например, “чисто цифровой ввод”, или выбор из выпадающего списка. Возможностей становится даже больше.

За counter. У меня на него много планов. Хотя в основном это всякие визуальные эффекты, вроде титров, заставок, которые можно пропускать, визуальных задержек.

Это относится к оформительской части - анимация, переходы. Для каждой игры это сугубо индивидуально.

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

Aleks Versus Moderator 12.11.2016 12:31 (9 years ago)

Nex,
нет, а сам диалог как сделать? Я например не знаю. Команда типа EXEC(’JS:…’) ?
Ведь если я просто где-нибудь в игре воткну <script …> … </script> меня попросту пошлют с отпиской: ошибка выполнения js.

И потом, я вообще не представляю, как передать значение из js самой игре.

А то, что функционала больше, так это здорово. Уметь бы ещё пользоваться)))

Насколько сложным для автора станет воспроизведение музыки? Если раньше я в коде мог написать play ‘music.mp3’ и оно играло, то в навигаторе как будет? Через JS, но что это значит? Придётся лезть в скин и править там js файлы?

На уровне JS код сделаю я ) Он будет идти в комплекте с плеером, подключать отдельно не придётся.

Плюс сделаю QSP-обёртку для яваскриптовых вызовов, если они будут не очень удобными сами по себе. Я уже подзабыл, какой там синтаксис.

Автору останется положить музыку в папку игры и вызвать что-то вроде:

GS 'js.play', 'Yippie-Ki-Yay.mp3'

Цвет гиперссылок. В классике достаточно было сделать lcolor = rgb() и цвет менялся. В навигаторе мне придётся заранее предопределить классы для каждого изменения цвета. Т.е. залезть в css.

Не особо понимаю, в какой игре это нужно, но это тоже можно при желании навесить на яваскрипт.

Написать одну функцию, в игре её вызывать одной строкой. Передавать цвет хоть в rgb, хоть в чём угодно.

а сам диалог как сделать? Я например не знаю. Команда типа EXEC(’JS:…’) ?

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

Автору нужно будет сделать как я выше описал, а вникать в детали ему без надобности.

Знание JS потребуется только тем авторам, кто захочет расширить функционал. Тем, кому стандартных возможностей будет мало.

Aleks Versus Moderator 12.11.2016 13:13 (9 years ago)

Nex:

На уровне JS код сделаю я ) Он будет идти в комплекте с плеером, подключать отдельно не придётся.

о. Так это просто замечательно! Тогда я всеми руками за. :D

Прочитал всё обсуждение. В принципе со всем согласен, хотя тоже поначалу было жалко оператор INPUT. Но как и Alex я не понял как ты заменишь этот оператор другими средствами. Я создал бы что-то вроде всплывающего окошка со строкой ввода, а потом бы просто обработал текст, который ввел игрок.

А периодическое выполнение локации можно будет сделать на яваскрипте…

А вот это как? Разве JavaScript может вызвать какую-любо игровую локацию прописанную в QSP файле? Когда-то я спрашивал за обратную взаимосвязь JavaScript с кодом QSP. С кода QSP можно легко вызывать функции JavaScript. А наоборот? Nex, ты тогда упомянул про какие-то обходные пути. Или ты хочешь добавить полноценное влияние из JavaScript на код QSP?

Storm,
всё верно.

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

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

В любом случае, если кому-то что-то не понравится в нововведениях, всегда можно остаться на старых версиях. Вот честно, меня полностью устраивает его функционал и в определенных моментах с классикой гораздо легче работать. При желании, все фишки можно реализовать и на нем (Я серьезно, абсолютно все, что вам необходимо для хорошей игры). Даже тот же интерфейс игры, при грамотной работе можно спокойно настроить под себя.
В качестве небольшого примера:

Spoiler

Пойду проповедовать у староверов, в общем=)

Svartberg,
+1

Nex, тогда с нетерпением буду ждать обновления Навигатора! :)

Log in or Register to post comments.