Функции
$CURACTS
$CURACTS —  данная функция возвращает выведенные на экран действия в виде кода QSP, как текстовое значение.
Действия сохраняются в виде набора операторов act с cответствующими параметрами и операциями.
Записав возвращённое функцией значение в переменную, можно восстановить действия с помощью оператора dynamic. Пример:
! записываем текущие действия в переменную
$actlist = $curacts
! восстанавливаем действия из переменной
dynamic $actlist
$CURLOC
$CURLOC —  функция возвращает название текущей локации, т.е. локации, в которой "находится" игрок.
Технически это следует понимать так. В момент запуска игры плеер начинает выполнять код самой первой локации в игре, а когда код выполнен, плеер "останавливается" и ждёт участия игрока. Игрок может нажимать различные кнопки в игре, ссылки и выбирать пункты меню, что приводит к выполнению других блоков кода (например, действий) и переходам на новые локации по goto или xgoto. При таких переходах плеер вновь выполняет код других локаций и, когда код выполнен, "останавливается".
Так вот, когда на локацию осуществлён непосредственный переход (т.е. по goto или xgoto, либо это самая первая локация в игре), $curloc начинает возвращать название этой локации, — во всё время, пока выполняется код, и когда плеер "останавливается". Если после остановки не происходит переход по goto/xgoto, значение, которое возвращает $curloc, не меняется.
Пример использования:
*pl $curloc & ! выводим название текущей локации в Окно основного описания
*pl "Сколько раз перезашли: <<перезашёл>>"
act "Перезайти на текущую локацию":
    перезашёл += 1
    goto $curloc
end
$CUROBJS
$CUROBJS - данная функция возвращает список выведенных на экран предметов в виде QSP-кода.
Предметы сохраняются в виде набора операторов ADDOBJ с ответствующими параметрами и операциями.
Записав возвращённое функцией значение в переменную, можно восстановить предметы с помощью оператора DYNAMIC. Пример:
! сохраняем список предметов как код QSP:
$old_objects = $CUROBJS
! удаляем все предметы из окна предметов:
KILLOBJ
! восстанавливаем все предметы в окне предметов:
DYNAMIC $old_objects
$DESC
$DESC —  возвращает текст базового описания локации с заданным названием. Общая запись:
$DESC([$локация])
, где [$локация] — это название интересующей нас локаци и. Например:
! возвращаем базовое описание локации "каморка_под_лестницей"
$desc('каморка_под_лестницей')
!возвращаем базовое описание текущей локации
$desc($curloc)
Если в базовом описании присутствуют подвыражения, функция автоматически раскрывает их.
Функция возвращает текст, написанный только в поле "Описание" (Базовое описание) редактора Quest Generator. При работе в текстовом редакторе данное поле вам недоступно и функция будет всегда возвращать пустую строку.
$DYNEVAL
DYNEVAL —  выполняет код, переданный в виде строки текста, и возвращает результат, если он есть. Общая запись:
$DYNEVAL([$код], [аргумент 0], [аргумент 1], ... , [аргумент 18])
DYNEVAL([$код], [аргумент 0], [аргумент 1], ... , [аргумент 18])
, где [$код] — это обычный код QSP, записанный в виде текста. Выполнение такого кода аналогично выполнению кода функции FUNC. Аргументы [аргумент 0], [аргумент 1] и т.д. могут использоваться внутри [$код], их значения автоматически помещаются в переменные args[0], args[1], и т.д. соответственно.
Внутри выполняемого кода dyneval используется свой собственный массив ARGS, его значения не пересекаются со значениями ARGS на локации, из которой dyneval была вызвана.
После выполнения кода, переданного функции dyneval, продолжается вычисление выражения, в котором расположена функция dyneval.
Чтобы dyneval возвращала результат, необходимо внутри [$код] присвоить этот результат переменной result.
Примеры:
dyneval('result = 3 + 4')
*pl $dyneval('$result = mid("abcd", 2, 1) + "qwerty"')
проход = dyneval("result = ($args[0] <> 'текст')", 'строка')
- Чтобы 
DYNEVALвернула несколько значений, результат должен быть записан в%RESULT. - Чтобы 
DYNEVALвернула строковое значение, результат должен быть записан в$RESULT. - Чтобы 
DYNEVALвернула числовое значение, результат должен быть записан вRESULT. %RESULT,$RESULTиRESULT— это одна и та же переменная, но с разными типами данных. Следует помнить, что новая запись значения затирает предыдущее, какого бы типа данных не было это значение.
Если при выполнении dyneval она не возвращает значения (result не инициализируется), и является единственным элементом выражения, передаваемого неявному оператору, плеер ничего не выведет на экран. Т.е. dyneval будет работать, как DYNAMIC. Пример:
! неявный оператор выведет на экран 123:
123
! код в dyneval выполнится, но на экране
! мы ничего не увидим:
dyneval("code = 123 + 890")
! неявный оператор выведет на экран 1013:
code
См. также оператор DYNAMIC.
$FUNC
FUNC —  выполнение кода указанной локации без непосредственного перехода на неё с возвращением значения.
Общая запис ь:
FUNC([$локация], [аргумент 0], [аргумент 1], ... , [аргумент 18])
$FUNC([$локация], [аргумент 0], [аргумент 1], ... , [аргумент 18])
, где [$локация] — это название локации, код которой мы хотим выполнить без непосредственного перехода на неё. Аргументы [аргумент 0], [аргумент 1] и т.д. могут использоваться на этой локац ии, их значения автоматически помещаются в переменные args[0], args[1], и т.д. соответственно.
Чтобы FUNC вернула:
- несколько значений или кортеж, на указанной локации нужно присвоить результат переменной 
%RESULT; - строковый результат, на указанной локации нужно присвоить этот результат переменной 
$RESULT; - для возвращения числового результата, он должен быть присвоен переменной 
RESULT. 
Следует помнить, что %RESULT, $RESULT и RESULT — это одна и та же переменная, но разных типов, поэтому если вы определили на локации и %RESULT, и $RESULT, и RESULT, функция вернёт то значение, которое было записано в эту переменную последним.
Если переменной RESULT не было присвоено значение, функция ничего не вернёт. И тут есть два варианта поведения плеера.
- Если функция 
FUNCстоит в каком либо выражении, вместо функции будет подставлено значение по умолчанию (пустой кортеж, пустая строка или ноль в зависимости от типа самого выражения). - Если функция 
FUNCстоит сразу после неявного оператора, такой оператор будет проигнорирован, и на экран ничего выводиться не будет. Пример: 
N = 23 * 13
! ни одно значение не присваивается переменной result
'строка 1'
func('локация_Н') &! ничего не выведется на экран
'строка 2'
56 + func('локация_Н') &! функция стоит в выражении. Её значение = 0
Не обязательно, но рекомендуется, использовать префикс типа ($ или %) с ключевым словом FUNC, если функция должна вернуть строковое значение или кортеж, и — без префикса типа, если функция должна вернуть числовое значение:
$func('срез_строки', 'Мы вышли из дома, когда во всех окнах погасли огни.', 3, 7)
func('возвести_в_степень', 3, 3)
Порядок работы.
При вызове указанной локации с помощью  FUNC происходит следующее:
- Плеер прерывает выполнение текущего кода (например, кода текущей локации), и обращается к указанной локации.
 - Базовое описание и список действий указанной локации добавляются к описанию и действиям текущей локации.
 - Выполненяется код из поля Выполнить при посещении
 - Затем плеер возвращается к выполнению кода, который прервал. То есть к вычислению выражения, в котором стоит данная функция.
 
На каждой локации автоматически создаются свои собственные уникальные массивы  ARGS и  RESULT, поэтому значения в этих массивах для каждой локации будут свои собственные. После выполнения кода локации, вызванной по  FUNC, массивы  ARGS и  RESULT этой локации уничтожаются.
Другие примеры:
!Обработка локации "ф ункция" как функции.
!Массив ARGS пуст.
яблоки = FUNC('функция')
!обработка локации с названием лежащим в переменной $name как функции. ARGS[0] равен 1.
pl func($name, 1) * 78
!обработка локации с названием в $name как функции.
!$ARGS[0] содержит строку "строка", ARGS[1] равен 2.
msg "text" + func($name, "строка", 2)
! код локации для функции, получающей сумму ряда чисел от единицы до указанного значения
# summ
! в args[0] будет помещено число, которое мы укажем в качестве [аргумента 0]
loop while args[0]>0 step args[0] -= 1:
    result += args[0]
end
---summ---
! пример вызова локации "summ", как функции
*pl func("summ", 19) & ! выведет на экран 190
! пример вызова с записью названия локации в переменную
$name_loc = "summ"
*pl func($name_loc, 23) & ! выведет на экран 276
Также см. "Неявный вызов функции FUNC".
$GETOBJ
$GETOBJ —  возвращает название предмета в Окне предметов, расположенного в заданной позиции. Общая запись:
$GETOBJ([#номер предмета])
Индексация (нумерация) предметов в Окне предметов ведётся с 1. Если предмета с индексом [#номер предмета] не существует, возвращается пустая строка ('').
Примеры:
$getobj(1) & ! вернёт название первого предмета в рюкзаке
$getobj(countobj) & ! вернёт название последнего добавленного предмета
Код, подсчитывающий в массиве OBJECTS число предметов с одинаковым названием:
loop local i = 1 while i <= countobj step i += 1:
    objects[$getobj(i)] += 1
end
$IIF
IIF —  возвращает значение в зависимости от верности выражения.
Общая запись:
IIF([#выражение], [#выражение_да], [#выражение_нет])
$IIF([#выражение], [$выражение_да], [$выражение_нет])
Если [#выражение] верно, возвращает значение выражения [выражение_да], в противном случае возвращает значение выражения [выражение_нет].
Из выражений [выраажение_да] и [выражение_нет] будет вычислено только одно, в зависимости от того, будет ли выполнено условие.
Примеры:
!Модуль числа
abs_x = iif(x>0, x, -x)
!А следующая конструкция НЕ вызовет ошибку деления на ноль:
x = 0
y  = iif(x = 0, 0, 1/x)
! типичное решение для вывода времени, чтобы не терять ноль на часах:
$iif(hour>9, $str(hour), "0"+$str(hour)) + ":"+$iif(minute>9, $str(minute), "0"+$str(minute))
Эквивалентность конструкций условия с оператором IF и функции IIF:
if number mod 2 = 0:
    *pl "Число чётное"
else
    *pl "Число нечётное"
end
! эквивалентно
*pl $iif(number mod 2 = 0,"Число чётное","Число не чётное")
$INPUT
$INPUT —  возвращает интерпретатору введённый игроком текст, либо '' (пустая строка), если была нажата кнопка "Отмена". Общая запись:
$INPUT([$текст])
, где [$текст] — это приглашение в диалоговом окне, которое видит игрок. Например:
$name = $input('Как звать тебя, герой?')
При выполнении данной команды на экране появится диалоговое окно с текстом "Как звать тебя, герой?", а выполнение остального кода приостановится, пока игрок не провзаимодействует с диалоговым окном.
Игрок может ввести или не ввести текст, и нажать кнопку "ОК" или "Отмена". Если игрок ввёл текст и нажал кнопку "ОК", функция $input вернёт переменной $text введённый игроком текст. Во всех остальных случаях после закрытия диалогового окна функция вернёт пустую строку ('').
Другие примеры:
! Вопрос с одним правильным ответом.
if $input('Что приходит после тьмы?') = 'свет':
    msg 'Все верно.'
else
    msg 'Ответ не верный.'
end
! Пример реализации вопроса с несколькими вариантами ответа из которых любой будет правильным.
$answer = $trim($lcase($input('Ответить')))
if instr($answer, 'красный') or instr($answer, 'желтый') or instr($answer, 'зеленый'): gt 'win'
! Введя красный или зеленый ил желтый произойдет переход на локацию 'win'
Допустимо, но не одобряется, использовать функцию для возвращения числовых значений:
INPUT([$приглашение])
Это может привести к различным ошибкам в игре, если игрок введёт в диалоговом окне не только цифры. Например:
age = input('Сколько вам лет?')
Если игрок введёт вместо числа строку "24 года", плеер выдаст ошибку 101 "Несоответствие типов данных".
Подобные ситуации должен предусматривать автор игры, а значит правильно будет озаботиться проверкой введённого значения уже после того, как функция $input будет выполнена.
loop local $text while 1:
    ! предлагаем игроку ответить на вопрос
    ! и присваиваем введённый текст переменной
    $text = $input('Сколько вам лет?')
    ! если во введённом тексте содержатся не только цифры
    ! либо игрок не ввёл ответ
    if isnum($text) and $text <> "":
        ! игрок ввёл число
        age = val($text) & ! устанавливаем возраст
        jump 'break' & ! прерываем цикл
    else
        ! игрок ничего не ввёл или ввёл некорректное значение
        ! цикл продолжается
    end
end
:break
$LCASE
$LCASE —  возвращает строку маленьких букв, полученную изменением регистра букв исходной строки. Общая запись:
$LCASE([$текст])
, где [$текст] — любая строка текста.
Примеры:
$lcase('TExT#') & ! вернёт 'text#'
$lcase('Привет, Алиса!') & ! вернёт 'привет, алиса!'
$lcase('Я НЕ ХОЧУ НА ВАС ОРАТЬ.') & ! вернёт 'я не хочу на вас орать.'
$MAINTXT
$MAINTXT —  возвращает текст, выведенный в окно основного описания.
Данная функция может быть полезна для замены части текста в окне основного описания, либо иной обработке текста. Пример:
! изначально мы вывели строку
*pl "Мы вывели на экран строку и в этой строке есть кусок, который мы хотим удалить."
! получаем текст из окна основного описания
$text = $maintxt
! вырезаем лишний кусок
$text_new = $replace($text, " и в этой строке есть кусок, который мы хотим удалить")
! очищаем окно основного описания
*clr
! выводим новый текст
*p $text_new
$MAX
MAX —  возвращает максимальное из значений выражений-аргументов. Можно передавать от одного до двадцати значений/аргументов. Если передан один аргумент, то считается, что указано имя массива. Общая запись:
MAX([#выражение 1], [#выражение 2], ... , [#выражение 20])
$MAX([$выражение 1], [$выражение 2], ... , [$выражение 20])
MAX([$название массива])
$MAX([$название массива])