Действия
"Менюшные" игры с точки зрения геймплея предоставляют игроку на выбор несколько вариантов действий, которыми он может воспользоваться. Выбрав действие, игрок двигает игру дальше по сюжету, и волне возможно, главный герой при этом совершает описанное действие: съедает кусок пирога, или проникает в чужой сад.
Обычно действия отделены от основного описания и представляют собой ряд кликабельных кнопок. В QSP для размещения действий есть отдельное окно, оно так и называется Окно действий, или Список действий (в плеере просто: Действия).
С этим окном, в зависимости от нужд вашей игры, вы можете проделывать разные манипуляции. Вы можете:
- Отключать и включать Окно действий по своему желанию
- Добавлять действия в Окно действий
- Удалять действия из Окна действий
- Полностью очищать Окно действий
В названиях действий не важен регистр букв, то есть "Пойти" и "поЙти" - одно и то же действие.
При создании действия, весь код, относящийся к действию, "прикрепляется" к этому действию, но не выполняется. Этот код будет выполнен только тогда, когда игрок нажмёт на действие (щёлкнет по нему мышью).
Команды для работы с Окном действий
Включение и выключение Окна действий
-
SHOWACTS [#выражение]- если значение выражения отлично от 0, то показывает Список действий, иначе скрывает его. Пример:showacts 0 & ! скрываем Окно действийshowacts 1 & ! выводим Окно действий на экранДля удобства чтения кода можно заранее определить переменные
onиoffс соответствующими значениями:on,off = 1,0showacts on & ! включаем Окно действийshowacts off & ! выключаем Окно действий
Команды для управления действиями
-
ACT— данная команда добавляет в Окно действий кнопку действия.-
У этой команды есть две формы записи:
-
Однострочная форма записи:
ACT [$название], [$путь к файлу изображения]: {оператор 1} & {оператор 2} & {оператор 3}Здесь
[$название]— это надпись (название), которая будет выводиться на кнопке действия, а[$путь к файлу изображения]— путь к файлу изображения, которое так же будет выводиться на кнопке действия перед названием.- И команда
ACTи название, и операторы после двоеточия при такой форме записи должны быть записаны в одну строку. - Когда игрок нажмёт кнопку действия с ука занным названием, будут выполнены перечисленные операторы.
- Параметр
[$путь к файлу изображения]может отсутствовать, при этом действие добавится без изображения.
- И команда
-
Многострочная форма записи:
ACT [$название], [$путь к файлу изображения]:{оператор 1}{оператор 2}{оператор 3}ENDЗдесь точно так же будет создано действие с названием
[$название], перед названием будет выводиться изображение, путь к которому мы указали с помощью параметра[$путь к файлу изображения], а когда игрок нажмёт на действие, будут выполнены перечисленные операторы. Обратите внимание:- При многострочной форме записи после двоеточия в той же строке, где находится команда
ACTне должно быть ничего. - Все операторы записываются со следующей строки после двоеточия
- Многострочная форма обязательно должна завершаться командой
ENDилиEND ACT.
- При многострочной форме записи после двоеточия в той же строке, где находится команда
-
-
Примеры:
! действие в однострочной форме записиact "Сорвать с берёзы яблоко": яблоко += 1 & *pl "Вы сорвали яблоко, спелое белое."! действие в многострочной форме записи, с изображениемact "Сорвать арбуз с куста", "img/watermelon.png":арбуз += 1*pl "Вы сорвали арбуз с куста"end
-
-
DELACT [$название]- удаляет действие с указанным названием из списка действий на локации. Если действие с указанным названием не существует, ошибки не будет, плеер просто проигнорирует команду. Примеры:! удаляем действие с конкретным названиемdelact ‘Идти вперед’! удаляем выделенное действиеdelact $selact
Команды очистки Окна действий
-
CLA- очистка списка текущих действий (удаление всех действий из окна действий). Пример:! это действие при нажатии выведет текстact "Действие 1":*pl "Ехал Грека Через Реку"end! это действие при нажатии выведет текст и удалитсяact "Действие 2":*pl "Видит Грека В Реке Рак"delact $selactend! это действие при нажатии удалит все действияact "Очистить окно действий":claend
CLS- эквивалентно конструкции "CLEAR & *CLEAR & CLA & CMDCLEAR", т.е. очищает все окна к роме списка предметов.
Функции для обработки действий
-
$CURACTS- данная функция возвращает текущий список действий в виде QSP-кода.-
Действия сохраняются в виде набора операторов
ACTс ответствующими параметрами и операциями. -
Записав возвращённое функцией значение в переменную, можно восстановить действия с помощью оператора DYNAMIC. Пример:
! записываем текущие действия в переменную$actlist=$curacts! восстанавливаем действия из переменнойdynamic $actlist
-
-
$SELACT- данная функция возвращает название выделенного действия в любом месте игры. Пример:act "Съесть яблоко":*pl "Это было очень вкусное яблоко. Жаль, что червивое."здоровье=здоровье+100delact $selactend
Событие "Выделение действия"
Когда вы наводите курсор мыши на действие, в классическом плеере это действие подсвечивается голубым цветом, и это означает, что действие выделено. При этом функция $SELACT, вызванная в любом месте игры, будет возвращать название такого выделенного действия.
Выделение действия — это событие, к которому вы можете привязать автоматическое выполнение кода. Делается это с помощью системной переменной $ONACTSEL:
$ONACTSEL— системная переменная, куда можно прописать название локации, код на которой будет выполняться при очередном выделении действия.
Более подробная информация в разделе "Служебные локации".
Локальные переменные в действии
Каждое действие в QSP вляется отдельным блоком кода, и потому для него можно назначить локальные переменные. Таким образом можно проводить различные расчёты внутри действия, не затрагивая переменные на локации.
яблоки = 245
act "Наколдовать яблоки":
local яблоки & ! объявляем локальную переменную
яблоки = val($input('Сколько вам нужно яблок?'))
яблоки_у_Миши += яблоки
*pl "Наколдовано яблок: <<яблоки>>"
end
act "Сколько яблок на локации?":
! это действие работает с глобальной переменной
*pl "Яблок на локации: <<яблоки>>"
end
Ограничения
-
Максимальное количество одновременно видимых действий на локации — 50. То есть игрок не сможет увидеть больше пятидесяти действий на экране, сколько бы вы их не добавляли.
-
Если в списке действий уже есть действие с указанным названием, то новое действие не создаётся, и не заменяет собой уже существующее, плеер просто игнорирует команду act. Таким образом нельзя вывести действия с одинаковыми названиями. Пример:
act "Действие 1": *pl "Старое действие."act "Действие 1": *pl "Новое действие."