Death or Glory/RLC: различия между версиями
(Добавлены описания двух ограничений: длины последовательностей точек (и сами последовательности) и необходимости дополнительной точки в каждой горизонтали каждого блока.) |
(Уточнение возможности повторения последовательностей точек.) |
||
| Строка 84: | Строка 84: | ||
| 1 или N | | 1 или N | ||
| Номера цветов в палитре для каждой точки. | | Номера цветов в палитре для каждой точки. | ||
|- | |||
| 0x0001 + N | |||
| 1 | |||
| Количество точек (M). | |||
|- | |||
| 0x0001 + N + 1 | |||
| 1 или M | |||
| Номера цветов в палитре для каждой точки. | |||
|- | |||
| 0x0001 + N + 1 + M | |||
| ... | |||
| Далее последовательность повторяется. | |||
|- | |- | ||
|} | |} | ||
Текущая версия от 16:55, 8 октября 2025
Общее
RLC-файл представляет собой точечное графическое изображение, использующее заданный набор цветов, определяемый VGA-палитрой. В игре одновременно всегда использует только один такой файл, который определяет цвета других графических элементов, отображаемых на экране, в том числе цвета используемых знаков из файла шрифта.
Вначале файла хранится палитра цветов и далее точки изображения, разбитого на отдельные вертикальные блоки.
Содержимое файлов
| Смещение | Длина | Комментарий |
|---|---|---|
| 0x0000 | 720 | Каждые три байта определяют один цвет в соответствии с правилами VGA-палитры (всего доступно 256 цветов). |
| 0x0300 | 4 | Назначение байтов пока не разобрано (скорее всего какой-то разделитель, всегда "00 00 00 00"). |
| 0x0304 | 2 | Горизонталь изображения, количество точек. |
| 0x0306 | 2 | Вертикаль изображения, количество точек. |
| 0x0308 | 2 | Количество блоков изображения. |
| 0x030A | 2 | Горизонталь (ширина) блока изображения, количество точек. |
| 0x030C | 2 | Количество байтов блока изображения (далее N). |
| 0x030E | N | Байты, определяющие точки блока изображения и их цвета в соответствии с палитрой. |
| 0x030E + N | 2 | Горизонталь (ширина) блока изображения, количество точек. |
| 0x030E + N + 2 | 2 | Количество байтов блока изображения (далее M). |
| 0x030E + N + 4 | M | Байты, определяющие точки блока изображения и их цвета в соответствии с палитрой. |
| 0x030E + N + 4 + M | ... | Далее последовательность повторяется. |
, смещение и длина считаются в байтах (шт.). Смещение - шестнадцатеричная система исчисления, длина - десятичная система исчисления.
Последовательность отображения значений байтов, определяющих точки блоков изображения, - горизонтально слева направо и при достижении ширины блока выполняется сдвиг на одну точку вниз и переход к левому краю блока. Каждый блок начинается с верхнего ряда со сдвигом от левого края изображения на сумму горизонталей (ширин) ранее заданных блоков.
Для каждого блока горизонтальное количество точек должно быть на единицу больше значения, определённого в соответствующем байте.
В игре используется горизонталь (ширина) изображения 320 точек, разбитая на 10 блоков, для каждого из которых определена длина в 32 точки, но байты, определяющие точки блока, насчитывают 33 точки в одной горизонтали. Последняя точка в каждом ряду не отображается на результирующем изображении.
Байты, определяющие точки блока изображения
| Смещение | Длина | Комментарий |
|---|---|---|
| 0x0000 | 1 | Количество точек (N). |
| 0x0001 | 1 или N | Номера цветов в палитре для каждой точки. |
| 0x0001 + N | 1 | Количество точек (M). |
| 0x0001 + N + 1 | 1 или M | Номера цветов в палитре для каждой точки. |
| 0x0001 + N + 1 + M | ... | Далее последовательность повторяется. |
, смещение и длина считаются в байтах (шт.). Смещение - шестнадцатеричная система исчисления, длина - десятичная система исчисления.
Если левый бит значения байта количества точек определен в значении "0", то задаётся количество последующих байтов, каждый из которых определяет цвет одной точки (с возможностью повторения). Если левый бит содержит "1" - байт задает количество одинаковых точек, идущих друг за другом, цвет которых определен значением следующего одного байта (обязательные несколько подряд идущих одинаковых точек). Без левого бита значения байта количества точек варьируется от 1 до 127 точек.
Ограничения формата пока разобрать не удалось.