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

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

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

Имя

Последовательность

Вывод в файл

пустой символ

\0

00

возврат на один шаг

\b

08

табуляция

\t

09

перевод каретки

\n

0A

возврат каретки

\r

0D

запись произвольного байта

\xnn

nn

запись произвольного символа

\символ

символ

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