HEX..END

Sanny Builder поддерживает запись произвольных значений в выходной файл без какой-либо обработки и проверки.

Используйте эту возможность только в том случае, если вы знаете, что делаете. Любые ошибки могут повредить файл и его невозможно будет прочитать в игре или в скриптовом редакторе.

Синтаксис

hex <последовательность байтов> end

последовательность байтов - одна или несколько пар цифр в шестнадцатиричном формате. Каждая пара представляет собой один байт, который будет записан в файл. Все пробелы игнорируются. Если число символов в последовательности нечетное, к последнему значению слева дописывается 0:

hex
    04 00 02 0800 04 1
end

Эта последовательность является бинарным представлением команды 0004: $2 = 1. Игра сможет прочитать его и установит значение переменной $2 в 1.

В конструкции HEX..END также можно использовать строковые литералы, метки, глобальные переменные, имена моделей. Они компилируются без предшествующего байта, указывающего на тип данных.

:get_offset
hex
    04 00 02 $PLAYER_CHAR 01 @get_offset
end

Это эквивалентно команде 0004: $PLAYER_CHAR = @get_offset

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

hex
    "This is a string"
end

Экранированные последовательности

В строках допускается использование следующих управляющих символов:

hex
    "\0\b\t\n\r\xDD"
end

В файл будет записана последовательность байтов 00 08 09 0A 0D DD.

В настоящее время несколько подряд идущих пробелов в строке конвертируются в один пробел. Например, строка "This is a string" будет сконвертирована в "This is a string". Используйте символ \ чтобы добавить дополнительные пробелы в строку: "This \ \ \ is \ a \ \ \ \ string".

Ввод больших чисел

Для удобства записи больших чисел поставьте в начале знак &. Число после знака & может быть как положительным, так и отрицательным, в десятичном или шестнадцатиричном форматах.

hex
    &1000 &-0xA33500 
end

В файл будет записана последовательность байтов E8 03 00 CB 5C FF.

Повторение байтов

В случае, если один байт повторяется много раз, например, для создания пустого буфера, заполненного нулями, кол-во повторений можно задать, добавив (n) после байта, где n - это целое положительное число:

hex
 00(10
end

Это будет эквивалентно:

hex
  00 00 00 00 00 00 00 00 00 00
end

Повторения байтов можно использовать несколько раз в одном блоке, так же можно задать кол-во при помощи константы:

const n = 25

hex
00(n) 01(3) 02(4)
end

Добавление бинарных файлов

hex..end позволяет использовать директиву {$INCLUDE} для вставки содержимого бинарного файла в тело скрипта. Используется следующий синтаксис:

hex 
 {$INCLUDE <path>}
end

Путь к файлу определяется по правилам директивы {$INCLUDE}.

Last updated