Кратко о PolyQuest:
PolyQuest является модификацией проекта UrqW:
https://github.com/narmiel/UrqW/ и, соответственно, обладает всеми возможностями UrqW.
Дополнительные возможности PolyQuest обеспечивают:
- Поддержку веб-разметки через тэги <html>...</html>.
Можно использовать все те же возможности html, что и для операторов
печати, плюс гиперссылки в стиле AkURQ:
<a href="btn:метка">
(подробнее см. здесь:
http://urq.plut.info/system/files/AkURQ.rar)
Поддержку выполнения кода JavaScript, который заключается внутри
тэгов <script>...</script>. Все описываемые тэги могут
находиться на месте очередного оператора URQL.
Возможность изменения html-содержимого текущей (работающей)
странички. Реализуется несколькими возможными тэгами: <appendContent
... > ... </appendContent>, <appendScript ... > ...
</appendScript>, <appendStyle ... > ...
</appendStyle>, добавляющими к указанному элементу,
соответственно, html-код, js-код и css-разметку. Внутри открывающего
тэга указывается один из двух текстовых атрибутов: либо element,
значением которого может быть "head" или "body", либо elementId,
указывающий id конкретного элемента страницы, к которому добавляется
содержимое, расположенное между открывающим и закрывающим тэгами.
Возможность внедрения переменных URQL в выполняемые фрагменты
JavaScript. Объявляются такие переменные с помощью нового оператора let,
имеющего вид:
let <переменная>=<значение>
или
let <переменная>
- При каждом создании такой переменной её имя заносится в список
переменных, доступных для js-кода. При входе в выполняемый участок js-
кода значения всех таких переменных передаются внутри JavaScript, а при
выходе из него результирующие значения вновь заносятся в одноимённые
переменные URQL. Также переменные URQL и JavaScript синхронизируются при
каждом входе в поток выполнения кода URQL (в направлении JavaScript
-> URQL) и при выходе из него и передаче управления пользователю (в
обратном направлении URQL -> JavaScript).
Возможность управления последовательностью проигрывания музыки. С
этой целью введена системная локация endmusicloop, заход на которую
осуществляется в момент окончания проигрывания музыкальной композиции (с
помощью оператора music или js-метода MusicPlay - см. ниже). Таким
образом можно зациклить не одну музыкальную композицию, а сразу
несколько, выбирая каждую следующую последовательно или случайным
образом.
Возможность осуществления дополнительных действий при сохранении и
загрузке игры. Заход на локацию onsave осуществляется до момента
сохранения, а заход на локацию onload -- до момента восстановления
состояния игры, соответственно. После выполнения всех действий по
восстановлению состояния также может осуществляться заход на локацию
afterload. Целью подобных действий может быть, например, инициализация
каких-то переменных внутри JavaScript, прорисовка графического инвентаря
и др.
Ряд вспомогательных функций JavaScript, осуществляющих взаимодействие с URQL-частью. К ним относятся
readParagraph -- переход на локацию;
UrqExec -- выполнение заданного в качестве параметра кода URQL;
UrqEval -- оценка значения URQL-выражения, заданного в качестве параметра. Работает аналогично выражению if, но внутри скрипта;
MusicPlay -- проигрывание музыкальной композиции (если указан параметр); возобновление проигрывания музыки (если без параметра);
MusicStop -- остановка музыки;
SoundPlay -- проигрывание звукового фрагмента;
SoundStop -- остановка звука.
Надо отметить, что музыка и звуки проигрываются двумя различными
потоками. При каждом начале проигрывания звукового фрагмента (оператором
sound или js-функцией SoundPlay) музыка приостанавливается, а по его
окончании возобновляется вновь.