Скачать в zip-формате (5Kb)


Документация к Universal Ripsoft Quest II
(версия документации 1.10 от 15.02.2001)


Оглавление

  1. Общие данные
  2. Описание движка
  3. Часто возникающие ошибки
  4. Пример квеста

1. Общие данные

Universal Ripsoft Quest v2.xx далее "програмный продукт" изготовлен компанией Ripsoft corporation и не является лицензионно защищенным програмным продуктом. Распространяется на правах "freeware", то есть абсолютно свободно. Автор не отвечает за какой-либо ущерб, либо упущенную выгоду полученные вследствии использования програмного продукта. Если вы по каким-либо причинам не согласны с этим лицензионным соглашением, то вы должны стереть со всех хранителей информации дистрибутивные пакеты програмного продукта и прекратить использование програмного продукта. Со всеми жалобами, претензиями и предложениями просьба обращаться по адресу ripos@mail.ru либо в гостевую книгу на официальном сайте компании в глобальной сети Internet по адресу www.ripsoft.narod.ru.


2. Описание движка

Обеспечена полная совместимость со старыми версиями.

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

Движок обрабатывает файлы с расширениями "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 - {} предоставить выбор пользователю


3. Часто возникающие ошибки

Нумерация ошибок компилятора:
0 - неопознаная ошибка
1 - этой ошибки быть не должно.
2 - неверное количество параметров у встроенного оператора.
3 - метка не найдена.
4 - ошибка стека.
5 - неизвестный оператор (или не найдена метка своей процедуры).


4. Пример квеста

$ напечатать сообщение
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

Хостинг от uCoz