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 |
запись произвольного байта | \x nn | 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
Last modified 27d ago