Документация к Universal Ripsoft
Quest II
(версия документации 1.10 от 15.02.2001)
Оглавление
Universal Ripsoft Quest v2.xx далее "програмный продукт" изготовлен компанией Ripsoft corporation и не является лицензионно защищенным програмным продуктом. Распространяется на правах "freeware", то есть абсолютно свободно. Автор не отвечает за какой-либо ущерб, либо упущенную выгоду полученные вследствии использования програмного продукта. Если вы по каким-либо причинам не согласны с этим лицензионным соглашением, то вы должны стереть со всех хранителей информации дистрибутивные пакеты програмного продукта и прекратить использование програмного продукта. Со всеми жалобами, претензиями и предложениями просьба обращаться по адресу ripos@mail.ru либо в гостевую книгу на официальном сайте компании в глобальной сети Internet по адресу www.ripsoft.narod.ru.
Обеспечена полная совместимость со старыми версиями.
Движок работает внешне следующим образом - пишет текст, выводит несколько выриантов выбора и текстовое поле для ввода. При кликах на кнопках выполняются действия, при вводе информации в поле либо выполняется действие, либо уведомляется о том, что какого-то слова компьтер не знает, формат следующий <глагол> <предлог> <предмет>, причем в глаголе и предлоге пробелов быть не должно.
Движок обрабатывает файлы с расширениями "qt2" и "qs2", причем вторые получаются из первых утилитой поставляемой вместе с програмным продуктом.
Опишем файлы "qt2": эти файлы разбиты на строки и каждая строка обрабатывается
в отдельности. Строка может быть:
1) метка - начинается с ":". Все, что еще в этой строке
- имя метки.
2) оператор - в следующем формате: <оператор> <параметр>;<параметр>...
. Параметр - строка без символов ; (если нужен этот символ используется
особый формат) перед посылкой в оператор эти строки компилируются,
то есть символы между # и $ заменяются на значение этого выражения.
При этом любая вложимость допустима, например let Text;#length RipSoft$ corp
напечатает 7 corp.
3) коментарий - строка начинающаяся с $ никак не обрабатывается.
Порядок работы обработки оператора: если первый символ оператора @ то идет запуск стандартного оператора, иначе если есть метка <оператор> то идет вызов своей процедуры, иначе запускается стандартный оператор. Регистр встроенных операторов не важен. Во всех остальных случаях он учитывается (имеются в виду имена переменных, предметов ...).
Если символ ; стоит после одного или нескольких ' то он не учитывается при разбивки строки на параметры, а в параметры идет последовательность ' на один короче. Пример: push Ab'a';servation то в параметр функции пойдет Ab';servation .
Строка перед тем, как попасть в параметр функции компилируется, а именно симвлы после ' заменяются - s на пробел, a на ', c на перенос строки.
Все переменные хранятся в строковом виде, то же относится к стеку и всему остальному.
Описание своих процедур: при вызове <оператор> <параметр>;<параметр>... в стек записываются все параметры в порядке их следования, потом туда-же записывается текущая позиция в квесте и происходит переход на метку :<оператор> .
Функции - если расчитывается значение выражения и встречается оперетор, то он выполняется и на его место ставится результат (или переменная Return в своих процедурах)
Своя процедура является одним оператором
Особые переменные: Text - содержание текстового окна локации, её описание. Rnd - доступна только для чтения - случайное число от 0 до 1. Time - доступна только для чтения - количество секунд прошедших с полуночи. Picture - адрес картинки, поддерживаются *.bmp *.ico *.rle *.wmf *.emf *.gif *.jpg. AboutLoc - содержание окна описания локации. Music - имя *.wav файла фоновой музыки - если пусто то музыки нет. Переменные начинающиеся с символа @ отвечают за инвентарь - доступны только для чтения пример: if #@Riplings-10$;inv Riplings';-10 если количество предмета Riplings больше 10 то выбросить 10.
Описание встроенных операторов (цифра в скобках { } количество параметров,
Ф - функция, П - имя переменной, C - любая строка, n - любое число, O - оператор,
Ч - число, [ ] - необязательная часть):
GOTO - {1С} переход на соответствующую метку
PUSH - {nС} закладывание в стек в порядке следования
POP - {0 Ф} возвращает последнее значение положенное в стек. {nП} закладывает
в переменные значения из стека в порядке перечисления
LET - {1П 1C} закладывает в переменную строку, в строке
выделяются #...$ и заменяется на значение строки между ними: сочетание переменных,
функций (они отделяются от переменных тем, что их первый символ ') и
знаков + - * / \ & (перечисленны в порядке убывания приоритета) где
первые четыре - стандартные арифметические операторы, \ - целочисленное
деление (применимы только к строкам содержащим числа), & - конкатенация
(слияние, сложение) строк.
IF - {1Ч 1O [1O] } если число больше 0, то выполняется первый оператор
[иначе второй]
RETURN - { [1C] } вытаскивает из стека метку и переходит на неё [присваивает
переменной Return значение]
DO - {1O} выполнить оператор
SAVE - {} сохраниться
INV - {1C 1Ч [1O] } добавляет (или убавляет) предметы из инвенторя, чье
имя строка, а количество - число. При клике на предмете в инвенторе будет вызываться
оператор
ACTION - {1C 1O} добавляет действие: при наборе строки будет выполнен
оператор.
GLAG - {1C} добавляет глагол
OBJECT - {1C} добавляет объект
PREDL - {1C} добавляет предлог
BUTTON - {1Ч 2С 1Ч} создает кнопку выбора действия (кнопки расположенны
3х3 и нумеруются сверху вниз потом слева направо начиная с 0, например кнопка
номер 3 идёт во втором столбце и 1ой строке. Также есть специальная кнопка для
переключения между страницами кнопок 1я страница 0-8, 2я 9-17 и.т.д. то есть
можно сделать сколько угодно кнопок) номер кнопки - 1е число, надпись на кнопке
- 1я строка, оператор выполняемый при нажатии 2я строка, если 2е число 0 то
кнопка активна, в противном случае она не активна.
LENGTH - {1С Ф} возвращает длинну строки
MID - {1C 1Ч Ф} возвращает строку от символа номер число до конца строки.
{1С 2Ч Ф} возвращает строку от символа номер первое число длинной второе число.
CHR - {1Ч Ф} возвращает символ с указанным кодом ASCII
ASC - {1C Ф} возвращает ASCII код символа
MSG - {1C [1О 1О] } если 1 параметр, то выдает сообщение в виде окошка
с кнопкой OK, если 3 то выдает сообщение с кнопками YES NO при нажатии на YES
выполняется 1 оператор, есди NO то второй
END - {} предоставить выбор пользователю
Нумерация ошибок компилятора:
0 - неопознаная ошибка
1 - этой ошибки быть не должно.
2 - неверное количество параметров у встроенного оператора.
3 - метка не найдена.
4 - ошибка стека.
5 - неизвестный оператор (или не найдена метка своей процедуры).
$ напечатать сообщение
let Text;Добро пожаловать в квест на движке URQ II
$хочет ли человек играть в квест
msg Хотите играть дальше?;$ничего;goto End
$ теперь в переменной a лежит 10
push 10
pop a
:LOoP
let a;#a-1$
$ уменьшать a пока это надо поьзователю
msg Уменьшить a;goto LOoP;$ничего не делать
$ при a>=0 идет печать (и а - целое)
if #'Больше a$;let Text';#Text$ где А >= 0
goto End
$ ==Теперь функция Больше либо равно==
:Больше
$извлечение из стека параметров
pop temp
if #temp+0.0001$;let Return';1;let Return';0
return
:End
end