В этом сообщении я опишу, как хранятся данные карт в RPG Maker MV. Это может быть полезно тем, кто пишет плагины или ивентит с помощью команды «Получить информацию о карте».
Порядок тайлов
Карты в RPG Maker MV хранятся как один большой массив чисел. На самом деле это трёхмерный массив, сплющенный в одномерный.
Вот пример, как это выглядит (я разделил разные слои на строки, но в самих файлах они так не разделены):
То есть:
- сначала идут все клетки первого слоя, самого нижнего (z=0); потом клетки второго слоя (z=1) и так далее до слоя регионов (z=5),
- в каждом слое сначала идут все клетки первого ряда (y=0), от самой левой (x=0) до самой правой (x=ширина-1); потом клетки второго ряда (y=0) и так далее до последнего ряда (y=height-1)
Назначение слоёв
Слои используются так:
- z=0 — нижний слой тайлов A; используется для обычной воды, обычной земли и т.п., а также неавтоматических тайлов из A;
- z=1 — верхний слой тайлов A; используется для глубокой воды и автотайлов, располагающихся над землёй: высокой травы, кувшинок на воде, автотайлового леса, автотайловых гор и т.п.
- z=2 — нижний слой для тайлов B, C, D, E,
- z=3 — верхний слой для тайлов B, C, D, E,
- z=4 — слой теней,
- z=5 — слой регионов.
(Учтите, что в команде «Получить информацию о клетке» номера слоёв сдвинуты на 1: слой z=0 назван «слой 1», а слой z=3 назван «слой 4». Я буду всегда прибавлять z=, чтобы вы знали, что я говорю о номерах слоёв в коде мейкера, а не о номерах слоёв в редакторе.)
Тайлы
Слоёв для тайлов 4. Редактор позволяет поставить тайлы только на определённый слой:
- тайлы A идут либо на слой z=0, либо на слой z=1 (то, куда что идёт, зависит от типа тайла);
- тайлы B, C, D, E идут на слой z=3 или z=2 (при рисовании тайлы размещаются на слой z=3; если мы размещаем тайл на клетку, где уже есть тайл, то старый тайл сдвигается на z=2).
Эти ограничения существуют только в редакторе: в коде можно разместить автотайлы воды или травы на слое z=2 или z=3, или же дерева на слое z=1. Редактор не позволяет разместить тайлы таким образом, но с отображением тайлов проблем не будет.
На вкладке A располагается много автотайлов. Автотайлы — это клетки, у которых много вариантов перехода к соседним клетка: например, вода или земля. Редактор сам выбирает, какой вариант автотайла поставить, но в движке автотайлы хранятся уже поставленными: у каждого варианта автотайла будет свой код. Например, в моём примере у воды коды 2082, 2068, 2049, у жёлтой земли — 2888, 2894, 2909, у высокой травы — 3048, 3053 (у низкой травы тоже несколько вариантов: 2856 и 2844, но они неотличимы на глаз).
Тени
Тени падают на слои от z=0 и z=1. Слои z=2 и z=3 рисуются поверх теней.
Тени хранятся в числах от 0 до 15, при этом:
- 1 (в двоичной системе 0b0001) — тень в левом верхнем углу клетки,
- 2 (в двоичной системе 0b0010) — тень в правом верхнем углу клетки,
- 4 (в двоичной системе 0b0100) — тень в левом нижнем углу клетки,
- 8 (в двоичной системе 0b1000) — тень в правом нижнемуглу клетки.
Значения можно складывать (или объединять побитовой операцией «или»): 3 (1+2) — тень на верхней части клетки, 12 (4+8) — тень на нижней части клетки. 15 (1+2+4+8) – полностью тёмная клетка, 0 — клетка без теней.