Описание URQL для URQ_DOS версии 1

АкURQ (акурка) – назначение, запуск, описание интерфейса

Акурка состоит из:

Запуск акурки:

В интерфейсе акурки присутствуют следующие элементы:

Главное меню состоит из подменю Файл, Вид, Утилиты, Опции,?(помощь).

Файл:

Вид:

Утилиты:

Опции:

?:

Доступность программы:  freeware.

Ссылки:

Идеология URQL.

Достоинства языка URQL (Universal Ripsoft Quest Language) для новичка:

Достоинства языка URQL (Universal Ripsoft Quest Language) для профессионала:

Недостатки URQL и AkURQ:

Справочник по операторам и системным переменным AkURQ версии 1.00

Операторы:

Комментарии

Метка ":"  – двоеточие, символ начала локации.

"end" - символ конца локации.

"p" - печатает указанную строку на экране.

"pln" - печатает на экране текст, после него

"btn <локация>,<надпись>" – кнопка

"inv+"

"inv-"

"inv_<предмет>"

Системные переменные, связанные с инвентарем:

inv_visible

urq_inv

:use_<предмет>

:use_<предмет>_<действие>

hide_use_<предмет>_<действие>

"invkill"

"perkill"

"if условие then оператор&оператор else оператор&оператор"

"proc <метка> "

"goto"

"save"

"input"

"instr <переменная>"

"#переменная$"

#%переменная$

"pause"

"music"

"play"

"rnd"

"cls"

"&"

"and"

"or"

"not"

"count_<локация>"

"quit"

"tokens"

"anykey <переменная>"

"include "имя файла"

"==" (два знака равно)

"xbtn" - eXtended BuTtoN

image<Номер>

:image_click<Номер>

Formpicture<Номер>

Картинки

Image и ImageType.

Реакция на нажатие на картинку

Точная реакция

Звуки

Фоновая музыка

Звук

Схемы вида и цвета

Цвет

Размеры форм и кнопок (в акурке работают не все)

Поддержка HTML

Функции Акурки:

Математические функции

MsgBox  - Вывод окна сообщений.

Системные переменные:

Глоссарий

Связь:

Описание URQL для AkURQ версии 1.2  от  30.04.2006 года

АкURQ (акурка) – назначение, запуск, описание интерфейса

Акурка – это программа-проигрыватель (интерпретатор) текстовых квестов, написанных на языке URQL (Universal Ripsoft Quest Language). Проигрываемые акуркой файлы игр-квестов являются обычными текстовыми файлами в ANSI-кодировке (Windows-1251), имеющими расширение .qst(незашифрованный квест), .qs1(зашифрованный квест), .qs3 (сжатый квест). Квесты пишутся  в любом текстовом редакторе, - что очень удобно, - хотя существует специальный текстовый редактор SMSQ, расшифровывающийся, как "Сам Можешь Сотворить Квест". Он первоначально предназначался для написания квестов для проигрывания на сотовых телефонах, то есть SMS-игр. Редактор сделан Евгением Бычковым (партийные клички "Евг" и "brevno"), и очень облегчает работу с большими квестами. Встроенная в версию 8 редактора возможность определить СК (вероятно, суммарный коэффициент?) квеста на некоторое время вызвала ажиотаж и гонку среди авторов квестов в попытках достичь максимального рейтинга. После появления ТРИОН’а – гигантского квеста от Terracon’a который набрал СК 20+++ ажиотаж снизился, а после написания «Самого наглого квеста» - из одной локации но с таким же рейтингом и вовсе утих :). Возможность определить СК Вашего или любого другого квеста присутствует и в «акурке».

До 2006 года основными проигрывателями URQ-квестов были URQ 1.4 от RipOs'a и urq_dos от Виктора Корянова. Эти замечательные программы существуют и сейчас, но, похоже, уже не развиваются. В настоящее время AkURQ (акурка) объединяет в себе достоинства обеих программ: возможность использования мультимедийных возможностей URQ 1.4(картинки, звуки, музыку) и новые операторы urq_dos, а кроме того, обладает богатым набором присущих только ей возможностей и функций, что, делает ее одной из лучших отечественных программ по проигрыванию текстовых квестов. Например, ДОС-кодировка квестов распознается автоматически, есть поддержка html-страниц, встроенных в квест, можно настроить интерфейс программы под себя и эти настройки автоматически сохранятся.

Акурка состоит из:

- файла интерпретатора akurka.exe

- файла помощи akurka.hlp (который вы сейчас читаете)

- файла настроек akurka.ini, который создается самой программой

Запуск акурки:

Первые два файла обычно находятся в упакованном виде в архиве (например, akurka.rar). Для использования программы распакуйте содержимое архива в любую папку (я использую папку URQ, – удобнее если там же лежат файлы квестов, но это необязательно) и запустите akurka.exe двойным щелчком левой кнопки мыши. В открывшемся окне вы на пару секунд увидите изображение симпатичного волчонка, после исчезновения которого, программа готова к работе.

В интерфейсе акурки присутствуют следующие элементы:

Главное меню (Файл, Вид, Утилиты, Опции, ?) - описание см. ниже

Главное окно – здесь выводится текст описаний локации.

Окно инвентаря (может быть скрыто) – здесь обычно выводится имеющийся у главного героя игры инвентарь (вещи), но автор квеста может использовать это окно по своему или не использовать совсем.

Окно «кнопок» - в этом окне находится список возможных действий, представленных или в виде кнопок или в виде списка.

Строка ввода – расположена между главным окном и окном кнопок и видима только в случае необходимости ввести в квест с клавиатуры какие-либо данные (числовые или текстовые)

Главное меню состоит из подменю Файл, Вид, Утилиты, Опции,?(помощь).

Файл:

       Можно загрузить квест,

       выбрать его из истории уже сыгранных квестов,

       запустить его заново,

       загрузить сохраненную игру,

       и наконец, закончить работу с программой

Вид:

       Позволяет игроку подключить/отключить окно инвентаря,

       Заблокировать изменения настроек интерфейса со стороны автора квеста

       Выбрать цветовой режим экрана (черный на белом фоне – Акурка, белый на черном – Дос).

       Настроить размер, вид и цвет шрифта во всех окнах.

Утилиты:

       Позволяют сжать квест – т.е. превратить его в нечто нечитаемое и при этом в полтора раза меньшего размера, при этом создается новый файл с расширением qs3,

       Зашифровать квест по стандарту URQ qs1.

       (Расширение .qs2 поддерживается другим интерпретатором, urq_dos.exe от Виктора Корянова)

Опции:

       Без событий – отключение всплывающих окон

       Один клик – выбор действия одним кликом мышки

       Звук – отключение/включение звуков

       Музыка – отключение/включение музыки

?:

       СК [Евгений] F1 – подсчет СК – коэффициента квеста

       Помощь – вызов этого файла помощи

       О программе – информация об авторе программы и его «сообщниках»

Доступность программы:  freeware.

Переносимость: только Windows. Для акурки, написанной на VB, также должны быть установлены некоторые стандартные OCX-компоненты. См. http://urq.allquests.ru/upload/msdxm.rar

Ссылки:

http://ripsoft.narod.ru/Ripsoft.htm: RipSoft, старый официальный сайт.

http://urq.fastbb.ru/ - форум по URQ, где можно найти ссылку на последнюю версию "акурки"

http://www.urq.allquests.ru:  - официальный сайт по URQ

http://urq.allquests.ru/download/quests.shtml  - большой выбор URQ-квестов.

http://vkoranov.newmail.ru- страничка, откуда можно скачать последнюю версию urq_dos.exe

Краткая история URQL

       URQ была cоздана вскоре после одной из первых известных в Рунете русских программ для написания квестов OrcZero. Язык URQL (URQ Language), используемый в платформе для текстовых квестов (Universal Ripsoft Quest), сравнительно молодой. Его первый вариант, включающий всего несколько простых команд, появился 5 мая 2000 года. Создатель URQ, Тимофей Басанов aka RipOs, несколько лет улучшал ее, добавляя все новые возможности. Первоначально URQ была сделана на Visual Basic, и предназначалась для создания книг-игр и простых менюшных квестов, то есть предоставляла возможность описать локацию и, по нажатию кнопки выбора, перейти на другую локацию. Была возможность работы с инвентарем – числовыми переменными.

       Простота платформы привлекла внимание создателей квестов, первой серьезной разработкой  по воспоминаниям тех, кто присутствовал при рождении URQ  стал "Древний кинжал" - большой и интересный квест от Кащея, написанный по мотивам произведений Д.Р.Р.Толкиена. Другими ранними квестами, очаровавшими игроков, были коротенькие "Приключения хомяка Семена" в двух частях (третья появилась намного позднее и была написна уже другим автором). Чуть позже Кащей выпускает вторую часть "Древнего кинжала", которая, как и первая, отличалась от прочих квестов трудностью прохождения в связи с многочисленными вариантами смерти главного героя. Да,  кроме  Кинжалов,  в  начале был еще «Странник» - по содержанию квест объективно  слабоватый, но там Смайлик впервые показал приемы, которые потом  использовались  во многих разработках того времени. Эпохальным событием был выход демо-версии очень большого квеста от Etev'a, - "Без права на надежду", который многие до сих пор, - и не без оснований, - считают лучшим квестом на URQ. Это был квест с использованием практически всех тогдашних мультимедийных возможностей Win URQ: музыки, картинок, - и при этом отличался очень хорошим литературным стилем, в сравнении с прочими "Бананами" и "Петровичами".

       Платформа развивалась, RipOs вносил изменения и новые возможности, дошел до версии 2.0 альфа 3, - очень интересной, но совершенно неудовлетворительной в плане устойчивости в работе, - и внезапно прекратил работу над URQ. Предположительно, это было связано с разрушением накопителя, на котором хранились исходники URQ. Последняя, относительно устойчиво работающая версия URQ 1.4, позволяет вставлять в квест картинки (в 6 разных форматах) и отслеживать клики мышкой по этим картинкам, использовать звуки и музыку (wav  и mid), делать квесты, состоящие из нескольких файлов, и многое другое, в том числе ввод чисел и строк пользователем (но это еще не парсер).

       Параллельно RipOsу разработку урки вел серьезный программист, выпускник мехмата МГУ Корянов Виктор, скрывающийся под именем Виктор Корянов :). Он писал (и продолжает писать) на Си Dos-версию URQ, которая так и называется URQ_DOS. Вот что он сам пишет о создании досурки:

       "Почти все здесь, наверное, знают как я пришел к Урке, но поскольку соответствующие посты и текстовые файлы имеют обыкновение теряться и закапываться :) ...

       Это был самый конец 2000 года, буквально несколько дней до праздника. Так получилось, что у меня в то время на «домашней» машине не было хоть сколько-нибудь нормального монитора, приходилось как-то жить на переделанной советской Электронике (модель уже не помню). Более или менее приемлемо этот агрегат работал только в текстовом монохромном режиме EGA, графический EGA теоретически был, но постоянно в нем находиться было трудно из-за проблем с частотой - быстро уставали глаза (теоретически был и VGA, но только для быстрого просмотра графики - что-то читать в нем было невозможно совсем). Жил я, в общем, полностью в мире текстового Доса - много читал с экрана в Дос Навигаторе, играл в Адом, программил в bc++ 3.1 ... Естественно, иногда искал в Инете на университетской машине что-нибудь соответствующее и как-то раз по запросу «текстовые квесты» (или, может, «текстовые игры») нашел сайт Кащея (текстовыми играми интересуюсь давно, еще с до-PCшных времен). Там я сразу обратил внимание на Древний кинжал, Урка Рипа не запустилась из-за традиционного для старых версий Windows отсутствия ВБ-библиотек, да даже если и запустилась бы, все равно я тогда грузил его только в случае совсем уж крайней необходимости (кстати, в 95-ом нет штатной поддержки EGA). Самая первая версия Досурки была написана буквально в Новый Год за два дня."

       Так что, если бы у В.Корянова тогда под рукой была монитор получше, мы бы, возможно, и не увидели этого великого творения, которое обеспечило URQ-квестам распространенность, популярность и  дальнейшее развитие. А может быть, и увидели бы, так как текстовыми квестами он интересовался давно, и, как говорили еще древние римляне, "истина побеждает всё"!

Идеология URQL.

Достоинства языка URQL (Universal Ripsoft Quest Language) для новичка:

1. Простота освоения. Достаточно выучить знак метки-начала локации и 3 оператора (END - конец локации, РLN - вывод текста и BTN – кнопка перехода), чтобы уже сделать книгу-игру.

2. Неплохая документация, которую можно найти на сайтах создателей URQ. Данный текст, кстати, тоже является документацией.

3. Огромное количество примеров в виде уже созданных квестов. Все ссылки не привожу, ибо их довольно много. Основное собрание на www.urq.allquests.ru, оттуда можно перейти на другие сайты. Квесты могут быть зашифрованы от просмотра, но обычно это не делается - кому же интересно смотреть сначала внутрь игры, а потом играть - всё удовольствие пропадет. Таким образом, обычная практика такова: сначала в квест играют, потом смотрят, как он устроен внутри. Потом делают свой. Благодаря этой "открытости кода" количество квестов на URQ превосходит все другие русские платформы вместе взятые. Смею надеяться, что так оно будет и далее.

4. Эта платформа – «живая», то есть на ней уже написаны квесты, она продолжает развиваться, активно обсуждаться и т.д. Следовательно, пока она не собирается тихо умереть в забвении, подобно десятку других платформ. Кстати, к числу "живых" в настоящее время относятся, по моему мнению: URQ, QSP - менюшные, RTADS, Adrift, RINFORM - с текстовым вводом команд. Если я кого-то забыл - поправьте меня. Новичку легко получить консультацию по любому вопросу у мэтров на форуме www.urq.fastbb.ru или у многочисленных сторонников этой платформы. Для других «живых» платформ это, разумеется, также возможно - на www.taplap.ru и соответствующих сайтах. (QSP - www.day0.narod.ru, RTADS - www.rtads.org, и т.д.)

5. URQ имеет богатые возможности для создания квестов*, а создание квеста требует НА ПОРЯДОК меньше времени, чем создание текстовой адвентюры. Это ОЧЕНЬ ВАЖНО, особенно для начинающих «квестописателей», которые таким образом получают возможность начать с небольших, но вполне работоспособных квестов, а потом подняться к вершинам мастерства.

Достоинства языка URQL (Universal Ripsoft Quest Language) для профессионала:

1. Работа с предметами инвентаря - путем некоторых ухищрений, их даже можно выложить в любом месте, снова взять или передать другому персонажу;

2. Наличие переменных (числовых и строковых, в том числе системных), позволяет как угодно много создавать флагов, счетчиков;

3. Управление цветом фона и текста, причем можно задать разный цвет символов даже в одном слове (хотя увлекаться этими изысками я бы не рекомендовал);

4. Возможность ввода числа или строки пользователем;

5. Наличие локации common, исполняющейся автоматически при переходах из локации в локацию и позволяющей организовать смену дня и ночи, подсчет ходов, голод, "запалы", "демоны" и т.п.;

6. Подстановка значения переменной в код квеста во время исполнения программы (!), обеспечивающее невероятную гибкость по сравнению с другими платформами. Этот специфический инструмент урки требует определенной привычки, но зато позволяет с легкостью манипулировать не только выводом текста на экран, но и логикой выполнения самой программы, например, организовать массивы, добавить во время выполнения новые кнопки или переименовать их как угодно, осуществить арифметические и строковые функции и т.д.;

7. Код акурки оптимизирован, что обеспечивает довольно быструю работу с квестами;

8. Функции работы со строками, определение длины строки, поиск шаблона в строке позволяют сделать простой парсер(!) (синтаксический анализатор);

9. Процедуры позволяют сократить размер квеста при многократном использовании одного и того же фрагмента;

10. Конструкция if then else и логические операторы not, or, and со скобками позволяют несложно запрограммировать сколь угодно сложные условия в квесте и реализовать циклы;

11. Реализована, поддержка звуков и музыки;

12. Отсутствие серьезных ограничений на размер квеста, количество переменных, персонажей, локаций и т.д. Если быть точным, длина строковой переменной в акурке может достигать ????, количество локаций измеряться сотнями тысяч, количество переменных ограничено только размером виртуальной памяти Вашего компьютера…

13. Настройками интерфейса можно управлять как из квеста, так и из программы-проигрывателя;

14. Появилась возможность использования нескольких действий в одной кнопке – xbtn.

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

16. Просмотр в тексте квеста html-кода дает возможность использовать объединение графики, текста и анимации для оформления квеста.

17. Разработка продолжается, так что если Вам чего-то не хватает в работе, можно обратиться к автору интерпретатора - и, вполне возможно, недостающая функция появится.

Недостатки URQL и AkURQ:

1. Это НЕ ОБЪЕКТНО-ОРИЕНТИРОВАННАЯ ПЛАТФОРМА.  Поэтому создание по настоящему БОЛЬШИХ ИГР на URQ непросто, так как требует значительной самодисциплины, чтобы писать комментарии, необходимые для предотвращения путаницы в голове! (Впрочем, профи, - поклон Krol`у, - могут писать структурные программы на неструктурных языках и даже самостоятельно создавать классы и объекты на языках программирования к этому изначально не предназначенных.)

2. Профессиональное программирование на урке требует опыта и терпения (интересно, существует ли хоть один язык программирования, у которого нет этого недостатка?).

3. Для работы Акурки требуются стандартные библиотеки от VB 6 http://urq.allquests.ru/upload/msdxm.rar

Справочник по операторам и системным переменным AkURQ версии 1.00

Внимание: символы <.[...].> написаны для более легкого понимания текста и файле их нет, причем символы [ ] используются для обозначения текста, который можно опустить. Пример:

  print <строка>      - напечатает просто         строка

Внимание: параметры операторов разделены запятыми, то есть в качестве параметра берется строка от пробела после оператора до запятой, не включительно, а в качестве второго параметра от запятой до конца, кроме последнего пробела. Исключение: "if" имеет особый формат. Пример:

  btn странная пещера, Войти в странную пещеру, затаиться, и прислушаться.

"_" – нижнее подчеркивание в начале строки означает, что она является продолжением предыдущей. Перед символом _ не должно быть ничего, даже пробелов.

Операторы:

Комментарии

 – совершенно необходимый элемент любой грамотно написанной программы, в том числе, квеста. Без них вряд ли Вам удастся разобраться даже в собственной программе спустя полгода. В URQL поддерживается два вида комментариев:

/* Это длинный

многострочный

комментарий*/

; Это комментарий в одну строку

pln Это будет напечатано… ; А это комментарий – до конца строки

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

Метка ":"  – двоеточие, символ начала локации.

    Использование:

:имя_локации

    Пример:

:локация

"end" - символ конца локации.

    Использование: так и используется, на отдельной строке.

    Пример:

    :локация

    pln Описание локации

    btn другая_локация,Переход в другую локацию

    end

"p" - печатает указанную строку на экране.

    Использование: p строка

    Пример:

p Напечатанная строка

    Примечание: Для оператора p есть аналог -  оператор print.

"pln" - печатает на экране текст, после него

    всегда (даже если строка и пустая) ставит

    символ перевода строки.

    Пример:

pln Програмист - узник замка Иф.

    Примечание: Для оператора pln существует аналог -  println

Исключение: символы "#<выражение>$" заменяются на значение этого выражения, символ '&' означает конец оператора печати текста и начало следующего оператора.

Пример:

p У тебя #money+10$ монет напечатает "У тебя 110 монет", если money=100.

Примечание: если длина введенного текста превышает размер страницы, то в Акурке в главном окне появляется вертикальный скроллер, позволяющий пролистать текст вверх или вниз.

"btn <локация>,<надпись>" – кнопка

создает кнопку для выбора вариантов действия с надписью на ней <надпись>, при клике на ней будет осуществлен переход на метку "Common" (если такая есть), потом (когда встретиться "end") на <локация>. Если локации common нет, сразу осуществляется переход на метку <локация>    Использование: btn имя локации,надпись на кнопке

    Пример: btn tower,Взобраться на башню

    Примечание: для акурки существует ограничитель длины надписи на кнопке - 255 символов, но из практических соображений рекомендую не писать более 70 символов. В имени локации и названии кнопки допустимо применение #$, #числовая_переменная$, #%строковая_переменная$,  ##код$.

"inv+"

 Добавляет в инвентарь предмет(ы).

    Использование: inv+ [кол-во], Название предмет[a](ов)

    Пример: inv+ 5,Жемчужин

    Примечание: Не обязательно указывать количество предметов для добавления - если не указано, добавляется 1 предмет. Проверяется, что кол-во предметов положительно, то есть если было 15 Рип и

"inv+ -20,Рип" то Рип исчезнет из инвентаря.

"inv-"

 Удаляет предмет(ы) из инвентаря.

    Использование: inv- [кол-во], Название предмет[a](ов)

    Примечание: Не обязательно указывать количество предметов для удаления - если не указано, удаляется 1 предмет. Проверяется, что кол-во предметов положительно, то есть если было 15 Рип и "inv- 20,Рип" то Рип исчезнет из инвентаря.

"inv_<предмет>"

Устанавливает и возвращает количество предметов с заданным названием в инвентаре.

    Использование: inv_НазваниеПредметов

    Пример:  slonov=inv_Слонов

                     inv_Слонов=16

Системные переменные, связанные с инвентарем:

inv_visible

т.е. пишем: "inv_visible=true" - инвентарь виден. "inv_visible=false" или что нибудь еще - не виден.(если включен "блок" это не подействует. мое решение проблемы приоритета :))

urq_inv

(кол-во вещей в инвентаре) – только для чтения.

:use_<предмет>

– метка локации, в которой описывается действие «Осмотреть предмет»

:use_<предмет>_<действие>

- метка локации, в которой описывается <действие> по отношению к <предмет>

hide_use_<предмет>_<действие>

- системная переменная, если равна 1 - скрыть действие(пример:

hide_use_inv_воровство=1 если 1 то действие скрывается. Если не 1 то это действие показывается).

 Внимание! Если после присваивания идет perkill то hide_use_inv_воровство                   снова станивится 0! т.е. переменная зависит от perkill.

hide_inv=1 - СКРЫТЬ ИНВЕНТАРЬ! hide_inv=0 - ПОКАЗАТЬ ИНВЕНТАРЬ

"invkill"

– без параметров удаляет все предметы из инвентаря.

       Invkill предмет - удаляет «предмет» из инвентаря.

    Удобно использовать в паре с оператором perkill в  начале квеста для очищения памяти.

"perkill"

- уничтожает все переменные.

     Примечание: Используется без параметров. Удобно использовать в паре с оператором invkill в начале квеста для очищения памяти.

"if условие then оператор&оператор else оператор&оператор"

 - условная конструкция.

     Использование: if условие then операторы или

     if условие then операторы else операторы

     Пример: if inv_Спичек=50 then btn buildHouse, Построить домик из спичек

     Примечание 1: Можно делать сложную конструкцию, используя &, and, or, not и скобки. Допустимость любой степени вложенности if'ов сохраняется, else всегда соответствует последнему незакрытому then'у.

"proc <метка> "

- передает управление на метку <метка>, то есть инструкции квеста выполняются с метки <метка>, но когда встречается "end" возвращает управление обратно, оператору, следующему за proc, при условии, что не было оператора forget_procs. (forget_procs - "забывает" все переходы по процедурам.) Допустима вложенность.

     Использование: proc имя_локации

     Пример: proc tower

     Примечание: при переходе по proc  - common не выполняется

"goto"

- переходит на указанную локацию, но не возвращается обратно.

     Использование: goto имя_локации

     Пример: goto tower

     Примечание: В отличие от URQ 1.4, в акурке - как в urq_dos - не выполняется заход на локацию common. При отсутствии метки <метка> - goto игнорируется.

"save"

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

     Использование: save локация_для_восстановления

     Пример: save tower

"input"

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

       instr строка= ; Данное выражение создает строковую переменную нулевой длины.

       Input строка

     Использование input для ввода числовой переменной:

       input переменная_для_записи_числа

     Пример: input x

"instr <переменная>"

– создает текстовую переменную и присваивает ей значение.

     Использование: instr имя_переменной=значение

     Пример: Instr time=время - 17:42

             Instr pusto=   ;В этом случае значение текстовой переменной равно пустой строке.

"#переменная$"

- вставляет значение переменной (и строковой и числовой).

     Использование: Обычно так и используется.

     Пример: x=5

             pln #x$

             goto b#x$

             btn b#x$,Неизвестная локация

#%переменная$

 - вставляет значение строковой переменой. Устарело, но понимается интерпретатором.

     Использование: Обычно так и используется.

     Пример: instr x=loc

             pln #%x$

             goto b#%x$

             btn b#%x$,Неизвестная локация

"pause"

 - оставливает выполнение квеста на указанное в операторе количество милисекунд (т.е. pause 1000 = паузе в 1 секунду).

     Использование: pause <время> - прекращение выполнения инструкций на <время> в милисекундах, причем пользователь в это время может выбирать варианты с помощью кнопок выбора и квест будет работать дальше, но по истечении <время> выполнение квеста продолжиться, одновременно двух работающих "pause" не может быть, новая затирает старую - движок о ней "забывает", забывает также он о паузе при нажатии кнопки действия.

     Пример: pause 3000

"music"

 - проигрывает циклично .mid файл.

     Проигрывает только те файлы, в которых имя состоит лишь из цифр, например – 65.

     Использование: music имя_файла_в_директории_квеста

     Пример: music 17

"play"

 - проигрывет однократно файл в формате .wav

     Использование: play имя_файла_в_директории_квеста

     Пример: play 2051

             play "oh.wav"

"rnd"

 - генерирует случайное число от 0 до 1, не

     включая 1, т.е. от 0 до 0(9).

     Rnd<X> дает целые случайные числа от 1 до X, Rnd1245 – от 1 до 1245

     Использование: Можно присвоить переменной, можно вывести в текст, создать кнопку, переход и т.п.

     Пример: x=rnd5

             pln #x$

             btn #x$,Случайная локация.

     Примечание: Можно организовать диапазон дробных чисел не до 0(9), а, например, до 10: x=rnd*10. Допустимо использовать Rnd#числовая_переменная$

"cls"

 - очищает экран ото всяческой информации.

     Использование: Так и используется.

     Пример: cls

Существуют две формы: clst – очищает только окно описаний; clsb – очищает окно кнопок

Эти две формы полезно применять в операторе xbtn

"&"

 - конкатенация, объединение команд.

Использование: команда1 & команда2 ... & командаN

Пример: pause=1000 & pln Текст & clrscr=0

"&&" – служит объединению операторов при вводе их в текстовую переменную например instr stroke=btn go,Идти&&btn out,Выйти

#%stroke$    - даст две кнопки «Идти» и «Выйти»

одиночный символ '&' является разделителем операторов и обозначает конец ввода строки в строковую переменную.

"and"

- логическое "и".

     Использование: В основном, в условных конструкциях.

     Пример: If inv_Slon=5 and inv_Mouse=2 then btn scare, Шугануть слонов мышами

"or"

- логическое "или".

     Использование: В основном, в условных конструкциях.

     Пример: if Inv_Slon=1 or inv_Mouse=1 then btn zoo,Да у тебя тут зоопарк!

"not"

 - логическое "нет".

     Использование: В основном, в условных конструкциях.

     Пример: if not Coca-Cola then btn coca-cola,Купить "Кока-Колу"

"count_<локация>"

 - подсчет заходов на указанную локацию.

     Использование: count_имя локации

     Пример: x=count_tower

"quit"

 - оператор немедленного выхода из квеста.

"tokens"

 - разложение строки на «токены», то есть куски текста, отделенные друг от друга разделителями.

Применение: tokens <стр. перем>

Результат: числовая переменная  tokens_num содержит количество токенов (например, слов в предложении), строковые переменные token1, token2 ... token# tokens_num$ содержат сами токены (например, слова). См.     стр. сист. перем. tokens_delim

"anykey <переменная>"

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

"include "имя файла"

 - до выполнения в код вместо этой строки вставляется содержимое указанного файла. Позволяет создавать многофайловые квесты.

Пример: "include C:\quest.qst"

Подгружаться может и html-страница. При превышении размера страницы в 100 кб система спрашивает нужно ли ее скачивать.

"==" (два знака равно)

 – оператор неточного сравнения. Дает истину при сравнении строковой переменной со строкой по правилам сравнения регулярных выражений, т.е.

? Любой одиночный символ

* Ноль или более символов

# Любая одиночная цифра (0–9).

[charlist] Любой одиночный символ в классе символов (списке)

[!charlist] Любой одиночный символ не принадлежащий классу символов

Например:

Instr фраза=

Input фраза

If фраза=="*парол*" then p Проходи! else p Стоять, руки вверх!

Введенные фразы «Пароль!», «Я знаю пароль!», «Никто не знает пароль» - дадут ответ «Проходи!»

оператор "==" (проверка строки на маску)

Примеры:

                  "aBBBa" == "a*a" ; Возвратит True.

                  "F" == "[A-Z]" ; Возвратит True.

                  "F" == "[!A-Z]" ; Возвратит False.

                  "a2a" == "a#a" ; Возвратит True.

                  "aM5b" == "a[L-P]#[!c-e]" ; Возвратит True.

                  "BAT123khg" == "B?T*" ; Возвратит True.

                  "CAT123khg" == "B?T*" ; Возвратит False.

"xbtn" - eXtended BuTtoN

 - кнопка с расширенными функциями. Позволяет выполнить несколько действий ДО перехода на указанную локацию. До перехода выполняеются еще операторы на локации common. Формат оператора:

xbtn <метка>,{оператор!оператор},<Название кнопки> Внимание! Применяется особый разделитель операторов |(вертикальная черта) для возможности использовать внутри xbtn такие операторы как if then else внутри которых могут быть свои разделители операторов.

Пример:

xbtn loka,{голод=голод+3|if голод>30 and выносливость<10 then pln Ты хотел бросить гранату но умер от голода! & quit | time=time+5 | монстр=0| inv- граната |pln Ты убил чудище!},кинуть гранату

image<Номер>

Добавлено наложение картинок до 100 на главный рисунок.

Пример:

image=16.jpg

image2=22.jpg

image10=22.jpg

и координаты. пример:

image2top=1000

image2left=1000

При нажатии на какую либо картинку вызывается метка image_click<Номер> (См. ниже)

:image_click<Номер>

и переменная click[картинка] (пример click1) становится 1.

После прохождения метки, переменнаяя снова становится равной 0.

Пример:

      :image_click

      if click1=1 then ... ;если нажали на главную то...

      if click2=1 then ... ;если нажали на первую вложенную то....

Когда накладываются рисунки неправильной формы, то рамки вокруг них не видно.

Formpicture<Номер>

На главной форме может быть до 128-ми (не считая главного) рисунков главный, - непосредственно в форме, как в 1.4, остальные задаются по координатам.

                  formpicture1=

                  formpicture3=

                  formpicture1top=

                  formpicture1left=

                  и т.д.

Внимание!!! Поскольку обработка всех этих рисунков требует чудовищно много времени:

                  в квесте - formpicture3=1.jpg

                  в программе - прорисовка 2 рисунка, прорисовка 3 рисунка...

                  в квесте - formpicture5=2.jpg

                  в программе - прорисовка 2 рисунка, прорисовка 3 рисунка,

                  прорисовка 4 рисунка, прорисовка 5 рисунка... и т.д., то так

                  делаться не будет. Все рисунки на форме прорисовываются по

                  команде "picture".

И еще одна вещь, которая здорово увеличила скорость отображения - все рисунки должны отображаться по порядку, т.е. если 3-й не отображается, то 4-й обновлен не будет.

отлавливание кликов по рисункам формы. {не тестировано}

  При нажатии на какую либо картинку вызывается метка

                  :form_image_click

                  и переменная form_click[картинка] (пример form_click1)

                  становится 1. После прохождения

                  метки, переменнаяя снова становится равной 0.

                  Пример:

                  :form_image_click

                  if form_click1=1 then ... ;если нажали на первую

                  if form_click2=1 then ... ;если нажали на вторую...

Спасибо Агенту за BMouse. Сделал. Только писать надо не BMouse

                  а BMouse{номер рисунка} т.к. их может быть 10.

Картинки

Наверно многие глядя на текстовые квесты задумывались о том, что все так некрасиво и нет никакой графики. Именно поэтому введена частичная поддержка (язык не заточен для написание графических квестов, хотя его возможности это позволяют) графики. За вывод картинки отвечают переменные:

Image и ImageType.

Image - имя файла с графикой (без расширения)
Примечание: имя должно быть целым числом, если 0, то картинка не выводится
ImageType - тип картинки:

0-bmp 1-ico 2-rle 3-wmf 4-emf 5-gif 6-jpg
Примечание: картинка ищется в каталоге с квестом.

Реакция на нажатие на картинку

Но ведь и реагировать не щелчки по картинке нужно - например осмотр шкатулки и при клике она открывается. Для этого при щелчке не картинке вызывается локация Image_Click.
Примечание: номер картинки, по которой кликнули можно узнать через Image_Click, но можно сделать и проще goto Image_Click_#Image$ и сделать по локации для каждой картинки.

Точная реакция

Однако часто бывают случаи, когда надо определять еще и позицию клика, для этого созданы переменные XMouse, YMouse, которые определяют позицию в пикселах клика по картинке. Переменная BMouse отвечает за то, какие кнопки нажаты: 1-левая, 2-правая, 4-средняя.
Примечание: двойное нажатие отрабатывается, как одинарное.

Пример:

                  :лока2

                  cls

                  p Была нажата

                  if BMouse1=1 then p левая

                  if BMouse1=2 then p правая

                  if BMouse1=3 then p ?

                  if BMouse1=4 then p средняя

                  pln кнопка мыши.

                  end

Звуки

Но ведь более полное погружение в квест требует еще и звука. Как его использовать? Существует два способа:

Фоновая музыка

Загружается MIDI файл и играется циклично. Его имя - переменная Music.
Примечание: переменная - целое число, ищется в каталоге с квестом и имеет расширение mid.

Звук

Загружается любой файл поддерживаемый Универсальным проигрывателем. После загрузки файла работа квеста продолжается, новый звуковой файл останавливает предыдущий.
play Имя_файла
проигрывает этот файл.

Схемы вида и цвета

Однако "в темноте все кошки серы" и может быть, что ваш квест ну не подходит к стандартной расцветке и вы хотите чем-нибудь выделится. Тогда используйте группу переменных, которые и отвечают за вид окна в URQ(Win).
Примечание: не все реализации URQL могут поддерживать все эти опции. Например, чем будет фоновая картинка в текстовом режиме? Значение, по умолчанию можно установить, присвоив ноль числовым переменным и 0 строковым.

Цвет

Все эти переменные - число - цвет в формате Blue*256*256+Green*256+Red, где Blue, Green и Red - яркость каждого из каналов цвета от 0 до 255.

Style_BackColor - цвет фона формы, описания, инвентаря и прочего
Style_TextColor - цвет текста описания, инвентаря и прочего

Допустимо применение и ДОС-кодировки цвета:

0-15 – задает цвет шрифта от черного до белого, соответствующая переменная Style_Dos_TextColor

Размеры форм и кнопок (в акурке работают не все)

Все эти переменные - число, задающее в твипсах размеры

Кнопок:
Style_ButtonWidth - ширину
Style_ButtonHeight - высоту

Расстояний иежду кнопками:
Style_ButtonSpaceWidth - ширину
Style_ButtonSpaceHeight - высоту

Размеров формы:
Style_FormWidth - ширину
Style_FormMinimumHeight - высоту, когда от 0 до 6 вариантов выбора
Style_FormMediumHeight - высоту, когда от 7 до 14 вариантов выбора
Style_FormMaximumHeight - высоту, когда от 15 до 24 вариантов выбора

Размеров описания:
Style_TextBoxWidth - ширина
Style_TextBoxHeight - высота

Дополнительно

Все эти переменные - строки
Style_FormPicture - имя файла картинки-фона, для формы, тип файла - почти любой поддерживаемый системой(в том числе jpg, bmp, gif).
Примечание: расширение должно быть правильным
Style_NonActiveText - текст, что печатается на кнопках, когда они не активны

Поддержка HTML

Легче понять на примерах. Имейте в виду, что для работы необходим установленный Internet Explorer версии не ниже 4-й (Windows 98)

:1

Style_FormWidth=12735

Style_FormMinimumHeight=10575

/* желательно подогнать размеры окна под страницу */

html true

/* хтмл режим включается и выключается с помощью html true и html false */

<html>

<body>

<center>

Наша жизнь - это путь скитаний.<br>

Мы вечно ищем свою дорогу.<br>

И идём, как будто в поиске знаний,<br>

Заглушив навечно тревогу.<br><br>

И не страшась душу оставить<br>

На дороге между миров,<br>

Мы стремимся всё исправить<br>

И поселить в людях любовь.<br><br>

Мы бежим, не касаясь земли,<br>

Мы летим, позабыв про цепи,<br>

Мы желаем сбежать от общей игры,<br>

И пытаемся скрыться средь степи.<br><br>

И не замечая законов и правил,<br>

Мы не видим чужих смешков,<br>

Не страшась никого позабавить,<br>

Мы живём за гранью снов.<br><br>

Да! Нас жгли на кострах инквизиций!<br>

Да! Нас гнали из чьих-то стай!<br>

Всё равно мы улетали, став птицей.<br>

Птицей, вечно летящей в рай.<br>

</center>

<p align="right">

Константин Крамлих aka Халк

</p>

</body>

</html>

end

:1

/* пример работы IE в акурке, в целях безопасности заблокированы клики по окну. */

p Обычный квест. Все как раньше.

btn 002-1-1,Перейти на хтмл локацию

end

:002-1-1

/* хтмл режим включается и выключается с помощью html true и html false */

html true

/* желательно подогнать размеры окна под страницу */

Style_FormWidth=12735

Style_FormMinimumHeight=10575

/* акурка находит <html> - началась веб страница */

/* обратите внимание как надо вставлять рисунки! */

<html>

<body>

<table style="border: 1px solid rgb(204, 204, 204);"
align="center" bgcolor="#f5fcf3" cellpadding="0"
cellspacing="0"
width="752"><tbody><tr><td style="padding:
0px;"><a name="up"><img
src="quest_path/head.jpg" alt="florAnimal" height="134"
width="750"></a></td></tr></tbody></table>

<table align="center" bgcolor="#ffffff"
cellpadding="2" cellspacing="0"
width="752"><tbody><tr><td style="border-left:
1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);
border-bottom: 1px solid rgb(204, 204, 204); padding-bottom: 5px; padding-top:
5px;" bgcolor="#e5edcc">

</td></tr></tbody></table>

<table align="center" bgcolor="#ffffff"
cellpadding="0" cellspacing="0" height="300"
width="752"><tbody><tr><td style="border-left:
1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);
border-bottom: 1px double rgb(204, 204, 204); padding: 10px;"
align="left" bgcolor="#f5fcf3" valign="top">

<table align="right" cellpadding="0" cellspacing="0"><tbody><tr><td>

<div width="100%" class="left_block" style="margin: 0px 0px 5px 5px; padding: 10px; font-size: 11px;">

<div align="center"><img src="quest_path/199.jpg" class="foto" alt="ВЕРБЛЮД ОДНОГОРБЫЙ"

<height="217" width="300"></div>

</div>

</td></tr></tbody></table>

<h1>ВЕРБЛЮД ОДНОГОРБЫЙ<br>(Camelus dromaderius)</h1>

<p align="justify">

<strong>ВЕРБЛЮД ОДНОГОРБЫЙ (Camelus dromaderius)</strong>или дромадер,

известен только как домашнее животное. У него выше ноги, один горб,

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

отростков позвонков и деталями строения черепа. Отсутствие каких-либо

данных о диком одногорбом верблюде и тот факт, что у зародыша

одногорбого верблюда образуется сначала два горба, послужили основанием

для предположения, что одногорбый верблюд всего лишь домашнее животное,

выведенное человеком от двугорбого. Однако вероятнее, что дикий предок

домашнего дромадера давно вымер. Вернее всего, он обитал на Аравийском

полуострове.

</p>

</td></tr></tbody></table>

<table align="center" bgcolor="#ffffff"
cellpadding="2" cellspacing="0"
width="752"><tbody><tr><td style="border-left:
1px solid rgb(204, 204, 204); border-right: 1px solid
rgb(204, 204, 204); border-bottom: 1px solid rgb(204, 204, 204);"
align="center" bgcolor="#e5edcc">

<strong>ВЕРБЛЮД ОДНОГОРБЫЙ</strong>

</td></tr></tbody></table>

/* </html> - завершение страницы  */

</body></html>

btn 4, Ух ты! а что дальше?

end

:4

/* не забываем выключать хтмл режим */

html false

pln А дальше мы снова на обычной локации. Спасибо за внимание. Откройте этот файл смской и прочитайте комментарии.

end

Функции Акурки:

Математические функции

-=, *=, +=, ++, -- (x+=x например, тоже самое что x=x+x).

Математические функции:

abs[]  - вычисление модуля числа

int[]  - определение целой части (дробная вычисляется элементарно!

sqr[]  - квадратный корень числа

Atn[]  - арктангенс

Cos[]  - косинус

Sin[]  - синус

Tan[]  - тангенс

Len[]  - длина строковой переменной

^ (степень) {У меня совсем туго с математикой, поэтому степень может обрабатываться не в том порядке, в каком должна, если кто-то заметит баги прошу сообщить}

Внимание! Эти функции не поддерживают внутренних выражений, как их поддерживают скобки. Не стоит писать что-то вроде sqr[Sin[x]+y], такое работать не будет.

MsgBox  - Вывод окна сообщений.

Пояснение к оператору MsgBox:

Оператор MsgBox служит для вывода стандартных окон информации (как в Windows)

Синтаксис: MsgBox "Текст", "Заголовок окна", тип_окна, переменная

Все параметры являются необходимыми.

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

тип_окна - числовая переменная или число, которое может иметь следующие значения:

0 - окно ошибки.

1 - окно предупреждения.

2 - окно информации.

3 - окно без значка, только текст.

4 - в окне задается вопрос, кнопки "ОК" и "Отмена".

5 - в окне задается вопрос, кнопки "Да" и "Нет". Крестиком

окно закрыть нельзя.

6 - в окне задается вопрос, кнопки "Да", "Нет", "Отмена".

Если тип_окна больше 6, то выводится окно типа 3.

При нажатии "ОК" переменная принимает значение 1, "Отмена" или окно закрыто - 2, "Да" - 6, "Нет" - 7

В окнах типов с 0 по 3 переменная всегда равна 1.

Примечание: Понятное дело, что надписи на всех кнопках зависят от языка Windows.

Предложение Акеле: сделать системные переменные, например:

urqError=0, urqWarning=1, urqInfo=2 и т. д.

                  Рисунки:

                  0=none

                  16=критическая ошибка

                  32=вопрос

                  48=предупреждение

                  64=информация

                  Кнопки:

                  0=ок

                  1=ок, отмена

                  2=Прервать, Повтор, Пропустить

                  3=Да, Нет, Отмена

                  4=Да, Нет

                  5=Повтор, Отмена

Следовательно, чтобы получить требуемое, надо сложить                   рисунок+кнопка переменные по умолчанию:

                  urqNone=0

                  urqError=16

                  urqQuestion=32

                  urqWarning=48

                  urqInfo=64

                  UrqOk=0

                  UrqOkCan=1

                  UrqARI=2

                  UrqYNC=3

                  UrqYN=4

                  UrqRC=5

                  т.е. можно писать: MsgBox

                  "Сообщение","Заголовок",urqError+UrqARI,s

Системные переменные:

image_caption (надпись, которая будет сверху рисунка вместо надоедливого "имаге")

urq_type - переменная, по которой можно определять тип интерпретатора (urq_type) в Акурке urq_type=1

Time – системная переменная, хранит число секунд от полуночи.

Rnd - вещественное случайное число от 0 до 1, меняется при каждом вызове.

Music - имя фоновой музыки вроде "104.mid" причем проигрываются только Midi файлы.

Common - номер действующей локации Common, если переменная Common=12, то вызывается по btn-переходу Common_12. При Common=0 вызов вызывается просто "Common" (то есть вместо локации :Common используется :Common_номер)

Instr_leave_spc - если отлична от нуля, то в instr-присваиваниях сохраняются пробелы, иначе нет

Urq_delay -  та самая задержка при выводе строк. Напомню, что после вывода каждой строки на экран теперь делается задержка некоторого количества миллисекунд. По умолчанию это количество равно 10,                 а переопределить его можно, установив URQ_DELAY [пример: set URQ_DELAY=0]. Если [как в этом примере] установить значение 0, то вывод текста будет происходить как раньше.

Style_dos_textcolor  - цвет текста, по умолчанию 7

current_loc и previous_loc  (строковые системные переменные) хранят имена соответственно текущей и предыдущей посещенной локаций. previous_loc удобно использовать для сохранения игры из любой локации при помощи действия типа use_inv_Запись. Для первой локации previous_loc равна ее имени (чтобы сохранение работало и для нее). current_loc и previous_loc  теперь меняются только при btn-переходах.

hide_phantoms=0 – показывает кнопки ведущие в «никуда» с пометкой «phantom», hide_phantoms=1 – не показывает такие кнопки.

last_btn_caption – строковая переменная, которая содержит название последней выбранной кнопки.

fp_prec – числовая переменная, которая содержит точность вычислений, число знаков после запятой в #$ и инвентаре. По умолчанию 2.

функция Round[число] - сокращение кол-ва знаков после запятой (сколько знаков останется - зависит от переменной "fp_prec"(по умл. 2)) для полного уничтожения дробной части лучше                   использовать int[]

tokens_delim – строковая переменная, содержащая список символов, являющихся разделителями (по умолчанию пробел, запятая, кавычки, вопрос, восклицательный знак. Если в tokens_delim строка char, то tokens s разбивает s на отдельные символы.

Глоссарий

Текстовые квесты – это сюжетные компьютерные игры, основанные на текстовом литературном описании ситуации, после которого игроку предоставляется возможность изменить эту ситуацию путем команды введенной в программу-проигрыватель. Команда может вводиться прямым текстовым вводом по инициативе игрока (классическая текстовая адвентюра) или выбором из нескольких вариантов, предоставленных автором квеста («менюшный» квест). Слово квест происходит от английского «quest» – поиск, так как обычно, в ранних квестах требовалось для прохождения игры куда-нибудь дойти и что-нибудь найти. Такие игры интересны в первую очередь своей интерактивностью, то есть возможностью игрока воздействовать на развитие сюжета, а во вторую – своей литературностью, то есть качеством интересного сюжета, богатством и выразительностью языка, характерами встретившихся персонажей и так далее.

Связь:

Если Вы обнаружили баг в Акурке или хотите внести пожелание по ее работе пишите akela88@bk.ru – разработчику

Если Вы желаете внести добавления/исправления в этот документ, прошу сообщить мне на tightbow@yandex.ru

С уважением, Korwin.