FireURQ
a) Есть оператор <> (не равно).
b) Можно производить операцию сложения над строками. Т.е. можно сделать zz = xx + "urq" – и это будет работать, при условии, что xx — строковая переменная.
c) Числовое представление строки — всегда число: длина этой строки. Это касается всех арифметических операций. Строковое представление числовой переменной — пустая строка (как в досурке).
Работают только в пределах одного оператора. Т.е. вставить if с помощью подстановки — не получится, т.к. if...then...else — это конструкция языка, а не оператор.
При переходах (операторы proc, btn и goto) возможно передать параметры на метку, на которую происходит переход. Синтаксис:
goto <метка>[(param1, param2, ...)]
proc <метка>[(param1, param2, ...)]
btn <метка>[(param1, param2, ...)], <текст на кнопке>
В качестве параметров могут быть использованы любые выражения. Параметры при этом попадают в переменные <метка>_1, <метка>_2 и так далее. Все старые значения "переменных с параметрами" — удаляются (даже если в прошлый раз было больше параметров).
Важное замечание: при использовании параметров в операторе btn подстановки (#...$ и #%...$) раскрываются ПРИ ДОБАВЛЕНИИ КНОПКИ, а вычисление выражений в параметрах производится ПРИ НАЖАТИИ НА КНОПКУ.
Пример:
btn mylabel(2+2, "четыре"), Кнопка с параметрами
При нажатии на эту кнопку переменная mylabel_1 примет числовое значение 4, а переменная mylabel_2 — строковое значение "четыре".
FireURQ поддерживает множество форматов музыки и звука. Командой play можно воспроизводить звуки. Музыка воспроизводится командой music.
Синтаксис:
play <имя файла>[, <громкость>]
имя файла – это имя файла
формата WAV/AIFF/MP3/MP2/MP1/OGG
громкость – может принимать значения от 0 до 255
music <имя файла>|stop[, <время в миллисекундах>]
имя файла – это имя файла формата WAV/AIFF/MP3/MP2/MP1/OGG, плюс форматы трекерной музыки: XM,
IT, S3M, MOD, MTM, UMX. Кроме того, воспроизводится и MIDI-музыка (файлы MID).
Также поддерживается формат MO3 (трекерная музыка с OGG-упакованными
семплами). Конвертер для превращения любого трекерного формата в MO3 можно
скачать с сайта http://un4seen.com/. Если
требуется остановить воспроизведение, то вместо имени файла указывается stop.
время в миллисекундах – время, в течении которого музыка будет нарастать (или угасать – в зависимости
от того, включаем мы воспроизведение, или выключаем).
Для регулировки громкости музыки используется переменная music_volume, которая может принимать значения от 0 до 255.
Кроме того, для музыки поддерживается переменная music_looped, которая принимает два значения: 1 и 0. Эта переменная указывает, будет ли воспроизводимая музыка зациклена или проиграет один раз и остановится. По умолчанию равна 1 (музыка зацикливается).
Важное замечание: некоторые файлы трекерной музыки зациклены сами по себе, с помощью внутренних команд формата. Такие файлы будут играть по кругу вне зависимости от переменной music_looped.
FireURQ позволяет вставлять изображения в текст квеста. Для этого служит команда image. Синтаксис:
image <имя файла>[, X, Y, ширина, высота]
· имя файла – это имя файла изображения в формате JPEG, PNG или TGA.
· Дополнительные параметры позволяют вывести не все изображение, а его часть. При этом X и Y задают верхний левый угол окна, а ширина и высота – размеры «вырезаемого» кусочка.
Изображение вставляются в текст и ведут себя как обычные буквы. Альфа для вставляемого изображения берется из цвета текста (переменная textcolor – см. ниже).
FireURQ позволяет выравнивать текст влево, вправо или по центру. Для установки нужного режима выравнивания текста служит переменная textalign. Она может принимать следующие значения:
· 1 – текст выравнивается влево
· 2 – текст выравнивается вправо
· 3 – текст выравнивается по центру
Естественно, выравнивание работает лишь внутри одного «абзаца». Если вы выводили текст командой print (без переноса), затем сменили выравнивание и попытались что-то вывести в той же строке, то текст с другим выравниванием будет перенесен на другую строку автоматически.
Для определения цвета выводимого текста служит переменная textcolor. Цвет в FireURQ задается шестнадцатиричным числом в формате 0xAARRGGBB. То есть четыре составляющих: альфа, красный, зеленый и синий. При этом альфу можно опускать, т.е. цвет 0xFF7F05BB и 0x7F05BB – равнозначны. Также, для обратной совместимости поддерживается переменная Style_dos_textcolor, которая работает так же, как и в DOS_URQ. Цвет фона менять нельзя, только цвет букв.
Для определения шрифта, которым будет выводиться текст, используется переменная textfont. В нее в виде строкового значения следует записать имя файла шрифта. FireURQ использует растровые шрифты формата HGE Font (заимствовано из библиотеки HGE). Редактор, позволяющий конвертировать шрифты, установленные в Windows, в формат HGE Font, входит в дистрибутив (папка fonted). Чтобы вернуться к шрифту по умолчанию, следует выполнить textfont = “_sysfont”.
Важное замечание: вполне возможно писать разными шрифтами внутри одного абзаца текста. Но этого не рекомендуется делать со шрифтами разных размеров. Формат HGE Font не предусматривает такое понятие, как «базовая линия». Поэтому, куски текста, написанные разными шрифтами, будут «прыгать» относительно друг друга.
FireURQ поддерживает свой собственный формат квеста – упакованный квест (QST Zipped). QSZ-файл – это, по сути, zip-архив, в котором лежит сам файл квеста (qst, qs1 или qs2) и все ресурсы, необходимые для работы игры (изображения и музыка). Данный формат очень удобен, если ваша игра использует мультимедиа.
Важное замечание: имя файла квеста в архиве и имя самого QSZ-файла должны совпадать, иначе FireURQ не сможет открыть игру. Другими словами, если имя файла квеста myquest.qst, то QSZ-файл должен называться myquest.qsz.
Режим отладки включается с помощью ключа -d в командной строке. При включенном режиме отладки все ошибки в коде квеста выводятся прямо в текст. Кроме того, в режиме отладки работает полезная комбинация Ctrl +R, позволяющая перезагрузить исходный текст квеста с диска. Происходит сохранение игры, перезагрузка исходного текста и загрузка сохраненного состояния с переходом на ту же локацию, что и до перезагрузки. Это позволяет править исходный текст и сразу же смотреть результаты изменений.
Существует возможность скрывать действия над предметами. Для этого необходимо использовать специальные переменные. Имя переменной формируется как имя локации-действия над предметом инвентаря, плюс «_hide». Например, если выполнить Use_Топор_Рубить дерево_hide = 1, то действие “Рубить дерево» у предмета инвентаря «Топор» будет скрыто до тех пор, пока вы не присвоите этой же переменной значение 0.
С помощью такого приема можно скрывать действия над предметами на тех локациях, на которых их по сюжету невозможно выполнить.
Также возможно поменять отображение предмета в списке инвентаря. Для этого используются переменные вида idisp_предмет, например:
idisp_Бутылка = "Бутылка с водой"
При этом важно понимать, что idsip_-переменные влияют только на отображение предмета в списке инвентаря. В операторах inv+ и inv-, а также при обращении к счетчикам предметов через inv_-переменные, следует использовать изначальное название («Бутылка» в примере):
inv- Бутылка
if inv_Бутылка > 1 then pln У вас несколько бутылок…
В FireURQ предусмотрены предопределенные функции, которые вызываются с помощью оператора proc. Результат возвращается в переменной _result. Существуют следующие предопределенные функции:
_sin(x), _cos(x) и _tan(x) – позволяют вычислить соответственно синус, косинус и тангенс числа x, представленного в радианах.
_color([a,] r, g, b) – позволяет получить значение цвета из его составляющих. Если
составляющая прозрачности (a) не указана, то она принимается равной 255 (т.е. полностью видимый цвет). Пример:
proc _color(x+15, 10, 255, 60)
textcolor = _result
a) count_... — переменные счетчики обновляются ТОЛЬКО при переходах по btn. Некоторые квесты использовали старое поведение, когда count_... увеличивается и по proc и по goto. Не уверен, что это правильно, но возможно предусмотреть флажок.
b) Переход по действиям в инвентаре не перезапускает локацию заново при возврате. Если действие было вызвано во время end — то происходит безусловный переход (goto) на локацию-действие. Если же вы решили использовать инвентарь во время pause, то локация-действие вызывается как proc с возвратом на оператор, следующий за pause. Долго думал над этим поведением и решил, что так будет правильнее всего.
c) Есть переменная gametitle — позволяет вывести название игры в заголовок окна. По умолчанию там имя файла, из которого игра была загружена.
d) Ключ -l командной строки позволяет направить весь вывод в файл, т.е. создавать логии прохождений. Файлы логов будут называться имяквеста.000.log, имяквеста.001.log и т.д.
e) Клавиатурные шорткаты для системного меню и инвентаря – клавиши [Esc] и [I], соответственно.
f) Имеется возможность включить полноэкранный режим, нажав сочетание клавиш Alt+Enter. Повторное нажатие Alt+Enter выключает полноэкранный режим.
g) При нажатии на функциональную клавишу в anykey возвращается скан-код этой клавиши, а переменная is_syskey устанавливается в 1. Состояние клавиш Shift, Ctrl и Alt на скан-коде функциональной клавиши не отражаются.
h) В оператор tokens можно передавать не только строковую переменную, но и просто строку, заключенную в кавычки или строковое выражение.
i) Индикацию состояний ожидания (мигающая иконка в углу экрана) при выполнении операторов anykey, pause и при требуемой прокрутке текста можно отменить с помощью переменных hide_anykey_indicator, hide_pause_indicator и hide_more_indicator, присвоив им значение 1.
· Sfeli, за помощь в написании кода для работы с зашифрованными квестами
· всему URQ-сообществу, за советы, тестирование и поддержку
· 0000093: [интерпретатор] не работает обратный слеш в путях к шрифтам
· 0000092: [интерпретатор] Периодические вылеты с AV при использовании QSZ
· 0000091: [интерпретатор] Передавать в TOKENS не переменную, а выражение
· 0000089: [интерфейс] Отключение значков при anykey и pause
· 0000087: [интерпретатор] Не работает оператор quit
· 0000083: [интерпретатор] возможность менять название предмета в инвентаре
· 0000086: [интерфейс] Инвентарь в Furq 1.0.7 не открывается кликом мышки.
· 0000090: [интерфейс] Использование прямого слеша (/) в QSZ
· 0000051: [интерфейс] Большой кусок текста и anykey.
· 0000047: [интерфейс] Невозможно вызвать меню при anykey.
· 0000061: [интерпретатор] Прозрачность для картинок.
· 0000079: [интерпретатор] Предопределенная функция _color(a, r, g, b) неправильно вычисляет значения.
· 0000077: [интерпретатор] Действия с длиной строки.
· 0000081: [интерфейс] После вывода кнопок фокус на кнопку не установится, пока не пошевелишь курсор.
· 0000076: [интерпретатор] инвентарь в qsz - пропадают картинки.
· 0000074: [интерфейс] Команда "О программе"
· 0000073: [интерпретатор] Предопределенные функции
· 0000075: [интерпретатор] Проблемы в работе со шрифтами-3
· 0000072: [интерпретатор] Проблемы в работе со шрифтами – 2
· 0000066: [интерпретатор] Вместо некоторых символов выводится вопросительный знак "?"
· 0000063: [интерпретатор] обработка одного предмета в инвентаре без меню
· 0000064: [интерпретатор] Возможность сокрытие действий с предметами инвентаря
· 0000054: [интерпретатор] Ошибка List index out of bounds (1) при обращении к инвентарю
· 0000062: [интерпретатор] Fade-In и Fade-Out для музыки
· 0000030: [интерпретатор] Регуляция громкости в фурке
· 0000059: [интерфейс] Нельзя разместить много текста на кнопке.
· 0000060: [интерфейс] Возможность использовать различные шрифты
· 0000058: [интерпретатор] Не работает прозрачность
· 0000038: [интерфейс] А в свойствах файла "fireurq.exe" по-прежнему стоит версия 1.0.0.0
· 0000037: [интерпретатор] Оператор anykey и возвращаемые значения
· 0000040: [интерпретатор] Ошибка в "Самом наглом квесте"
· 0000007: [интерфейс] В полноэкранном режиме программу закрывать неудобно
· 0000026: [интерпретатор] Фурка виснет при попытке вставить картинку больше размеров собственного окна
· 0000022: [интерфейс] Доступ к меню
· 0000023: [интерпретатор] Необходимо улучшить производительность интерпретатора
· 0000018: [интерпретатор] DosURQ и FireURQ по-разному понимают cls
· 0000013: [интерфейс] [WinXP] Картинка центрируется левее, чем текст. Между картинкой и текстом - большое пространство.
· 0000002: [интерфейс] Направлять вывод в файл
· 0000004: [интерфейс] Обновление игры в дебаг режиме
· 0000005: [интерфейс] Anykey без параметров воспринимает нажатие клавиши мыши
· 0000001: [интерфейс] Вместо символа табуляции выводятся знаки вопроса (?)
· изменен способ загрузки квеста и сохранений; имя файла квеста спрашивается при запуске, перед открытием основного окна, запись и загрузка сохранений происходят как в DOS_URQ: в файл с именем имяквеста.sav, сделано для возможности реализации полноэкранного режима.
· полноэкранный режим (ALT+ENTER)
· ключ -d командной строки включает режим отладки – все ошибки выводятся прямо в текстовое поле
· исправлены ошибки:
o работы с инвентарем (исчезание текста, List index out of bounds)
o излишней прокрутки текста
o альфа-составляющей цвета
o невозможно было открывать квесты из проводника через «Открыть с помощью…»
· полностью переработанная версия, новая версия интерфейса на DirectX
· возможность вставки изображений в текст
· расширена работа с музыкой и звуком
· новый формат квестов QSZ
· есть надежда, что окончательно исправлены все ошибки с inv
· исправлена ошибка с оператором inv-, который не работал (ошибка была внесена в версии 0.1.5)
· исправлена ошибка, из-за которой программа вылетала при попытке использовать forget_procs без proc
· исправлена ошибка с оператором нечеткого сравнения «==», который некорректно обрабатывал пустые строки
· исправлена ошибка с inv, который не работал, если "+" или "-" был написан через пробел
· возможность загрузки зашифрованных квестов (QS1 и QS2)
· возможность передачи параметров в операторах goto, proc и btn
· возможность запуска из командной строки с единственным параметром — именем файла квеста
· в условии оператора if не работали подстановки
· буква "ё" теперь распознается в составе имен переменных
· исправлен баг с возможным вылетом в произвольном месте (рассинхронизация между GUI и состоянием игры)
· первая бета-версия