Скриптовый язык
Скриптовый язык DizzySE применяется для написания внутри-игровой логики: применение предметов, открывание дверей, общение с персонажами и т.д.
И представляет собой последовательность вызовов функций. т.е. все что вы можете делать в скрипте - это вызывать различные функции. Еще вы можете писать метки и комментарии но на этапе компиляции скрипта метки превращаются в реальные смещения и записываются вместо своих имен в параметрах функций. А комментарии отбрасываются еще раньше. В итоге остаются только вызовы функций. Работа только с вызовами функций позволила сильно упростить обработчик скриптов, а следовательно сэкономить место и ускорить работу обработчика.
//Инициализация начальной позиции игрока
gameset(pl_devmode, false)
gameset(pl_visible, false)
gameset(pl_x,56) //координаты игрока внутри
gameset(pl_y,56)
gotoroom(0,0) //перейдем в нужную комнату
gameset(pl_visible, true)
//Дальше можно размещать свой код
Вот пример типичного скрипта. Типичный DizzySE скрипт похож на программу на ЯВУ и состоит из последовательности меток, вызовов функций и комментариев.
Зрительно язык похож на помесь ассемблера и бейсика. От ассемблера взята концепция переменных/регистров и жесткая структура программы. От ЯВУ взята нормальная человеко - читаемость программы.
Синтаксис
Структура строки
Любая строка может состоять из определения метки или вызова функции. Так же любая строка может содержать комментарий.
В каждой строке скрипта может располагаться только один вызов функции.
Пробелы и регистр букв не имеют значения.
Пустые строки и комментарии игнорируются парсинге.
Комментарии должны начинаться с символов "//" и могут располагаться где угодно.
Весь текст после символов "//" игнорируется.
Функции
Функции в DizzySE - это текстовые конструкции вида:
Имя функции (параметр1,параметр2 ...)
Функции - это основной и единственный инструмент для взаимодействия с миром игры. В DizzySE реализованы функции для большинства ситуаций, которые могут возникнуть в игре.
Одна функция может размещаться только на одной строке. Конструкции вида:
gameset
(pl_visible,
false)
не допустимы.
Параметры, передаваемые в функции, могут быть трех типов:
- Переменная
- Значение
- Имя метки
Для некоторых функций существует несколько реализаций с разными входными параметрами.
Переменные
Для упрощения обработчика скриптов, было принято решение сделать переменные фиксированными. Наподобие регистров в ассемблере.
В скриптовом языке DizzySE реализовано несколько переменных общего назначения, а так же несколько специальных переменных.
Все переменные, при необходимости, могут быть перезаписаны пользователем
- От A до J включительно. Это переменные общего назначения. Они могут использоваться как угодно, по усмотрению разработчика.
- THIS хранит указатель на динамический объект из которого был вызван скрипт.
- RET - имеет несколько предназначений.
- В неё возвращают результат большинство функций
- При вызове скрипта в этой переменной хранится ссылка на применяемый предмет, либо 0 если вызов произошел без применения предмета.
- Если после выполнения скрипта, в переменной RET будет записано значение NO_INVENTORY, то инвентарь не будет открыт. Это нужно при некоторых условиях.
- ACT Хранит значение, которое указывает на обстоятельства, при которых был вызван скрипт. Работа с этой переменной сильно упрощает жизнь программисту в случаях, когда один и тот же скрипт может быть вызван при разных обстоятельствах и должен на них по разному реагировать. Более подробно о значениях этой переменной здесь Значения переменной ACT
Все переменные общего назначения (A-J), а так же THIS, RET и ACT имеют размерность 2 байта и беззнаковый целочисленный тип (0...65535)
Все ситемные переменные ( PL_ ), переменные предметов ( I_ ) и динамических объектов (O_ ) имеют размерность 1 байт и беззнаковый целочисленный тип (0...255), за исключением переменной PL_CUR_SPTRITE. Она длинной 2 байта.
Значения
Значениями могут быть только числа длиной 1 или 2 байта.
Метки
Меткой может быть любой текст (слитный или нет), оканчивающийся символом ":".
item:// применили предмет
После объявления метки может идти комментарий, но не вызов функции.
Вызов функции должен начинаться с новой строки.
Содержание Скриптовый язык
Created with the Personal Edition of HelpNDoc: Easy to use tool to create HTML Help files and Help web sites