Скриптовый язык 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