Author: Vladimir Chebotarev aka ex-lend
Формат зависит от версии файла. Нижеследующее описание соответствует версии 1600 (0x640).
Формат таблиц простой — размер и описание элемента. Если есть несколько похожих элементов, идущих друг за другом, ставится знак многоточия. Красным обозначены не целиком разобранные блоки
файл alm | |
0x14 | заголовок alm |
variable | секция alm |
… | … |
variable | секция alm |
заголовок alm | |
0x04 | сигнатура (M7R\0) |
0x04 | размер заголовка alm (0x14) |
0x04 | некий размер (0x48+H*W*4) |
0x04 | количество секций |
0x04 | версия редактора (0x640) |
секция alm | |
0x14 | заголовок секции alm |
variable | данные секции alm |
заголовок секции alm | |
0x04 | 7, иногда 5 (что это?) |
0x04 | размер заголовка секции alm (0x14) |
0x04 | размер данных секции (*) |
0x04 | id секции (не совпадает с порядком по умолчанию) |
0x04 | произвольное значение |
(*) Размер данных неверно задается редактором карт для секции c id=0.
данные секции 1 (id=0) (общая информация) | |
0x04 | ширина карты (W) |
0x04 | высота карты (H) |
0x04 | отрицательный угол солнца (float, -45..45) |
0x04 | время суток в минутах |
0x04 | антияркость (0x00-0x40) |
0x04 | контрастность (0x00-0x40) |
0x04 | флаги присутствия типов ландшафта (useTiles) |
0x04 | количество игроков в секции 5 |
0x04 | количество строений в секции 7 (*) |
0x04 | количество юнитов в секции 10 |
0x04 | суммарное количество триггеров, проверок и инструкций (instance) |
0x04 | количество мешков в секции 9 |
0x04 | количество групп в секции 12 |
0x04 | количество описаний таверн в секции 6 |
0x04 | количество описаний магазинов в секции 6 |
0x04 | количество описаний указателей в секции 6 |
0x04 | количество записей о музыке в секции 13 |
0x40 | название карты |
0x04 | рекомендуемое число игроков |
0x04 | уровень карты |
0x04 | 0 (что это?) |
0x04 | 60,000,000, иногда 90,000,000 (что это?) |
0x200 | автор карты |
(*) Таверны и лавки записываются в обе секции: (6 и 7)
данные секции 2 (id=1) (ландшафт) | |
0x02 | флаги | id тайла в данной клетке (всего W*H) |
… | … |
0x02 | флаги | id тайла в данной клетке (всего W*H) |
Примечание. tile_id = raw & 0x3FF, флаги: 0x2000 — клетка не проходима
данные секции 3 (id=2) (высоты) | |
0x01 | высота данного узла (всего W*H) |
… | … |
0x01 | высота данного узла (всего W*H) |
данные секции 4 (id=3) (объекты) | |
0x01 | id объекта в данной клетке (всего W*H) |
… | … |
0x01 | id объекта в данной клетке (всего W*H) |
данные секции 5 (id=5) (игроки) | |
0x4C | данные игрока |
… | … |
0x4C | данные игрока |
данные игрока | |
0x04 | цвет игрока |
0x04 | флаги (1 — AI, 2 — quest kill) |
0x04 | деньги игрока |
0x20 | имя игрока |
0x02 | дипломатия относительно каждого игрока (всего 16) — флаги (0x01 — враг, 0x02 — друг, 0x10 — вид) |
… | … |
0x02 | дипломатия относительно каждого игрока (всего 16) — флаги (0x01 — враг, 0x02 — друг, 0x10 — вид) |
данные секции 6 (id=11) (опции) | |
0x0C | описание данной таверны |
… | … |
0x0C | описание данной таверны |
0x54 | описание данного магазина |
… | … |
0x54 | описание данного магазина |
0x0C | описание данного указателя |
… | … |
0x0C | описание данного указателя |
Примечание. В файле могут находиться описания несуществующих строений
описание таверны | |
0x04 | id постройки |
0x04 | флаги (0x02 — delivery item, 0x04 — raise dead, 0x10 — kill all (humans), 0x20 — kill all (monsters), 0x40 — kill all (undead/necro) |
0x04 | delivery item id (если не задано, то -1) |
описание указателя | |
0x04 | id постройки |
0x04 | флаг instanceOn |
0x04 | instance id |
описание лавки | |||||
0x04 | id постройки | ||||
0x04 | флаги вещей на полке 1
|
||||
0x04 | флаги вещей на полке 2 | ||||
0x04 | флаги вещей на полке 3 | ||||
0x04 | флаги вещей на полке 4 | ||||
0x04 | минимальная цена (полка 1) | ||||
0x04 | минимальная цена (полка 2) | ||||
0x04 | минимальная цена (полка 3) | ||||
0x04 | минимальная цена (полка 4) | ||||
0x04 | максимальная цена (полка 1) | ||||
0x04 | максимальная цена (полка 2) | ||||
0x04 | максимальная цена (полка 3) | ||||
0x04 | максимальная цена (полка 4) | ||||
0x04 | максимальное число предметов (полка 1) | ||||
0x04 | максимальное число предметов (полка 2) | ||||
0x04 | максимальное число предметов (полка 3) | ||||
0x04 | максимальное число предметов (полка 4) | ||||
0x04 | максимальное число однотипных предметов (полка 1) | ||||
0x04 | максимальное число однотипных предметов (полка 2) | ||||
0x04 | максимальное число однотипных предметов (полка 3) | ||||
0x04 | максимальное число однотипных предметов (полка 4) |
данные секции 7 (id=4) (постройки) | |
0x14 | данные постройки |
… | … |
0x14 | данные постройки |
Примечание. Если секция пуста, она не записывается.
данные постройки | |
0x04 | (x << 0x10) + 0x80 |
0x04 | (y << 0x10) + 0x80 |
0x04 | type id постройки |
0x02 | здоровье постройки |
0x04 | id игрока |
0x02 | id постройки |
0x04 | ширина моста (*) |
0x04 | высота моста (*) |
Примечания. Поля (*) существуют только при typeid & 0x10000000
данные секции 8 (id=9) (эффекты) | |
0x04 | количество эффектов |
variable | данные эффекта |
… | … |
variable | данные эффекта |
данные эффекта | ||
эффект вещи | эффект ловушки (trap) | |
0x04 | effect id (начиная с 0), видимо, не используется | |
0x04 | 0 | trap x |
0x04 | 0 | trap y |
0x02 | урон магией … (0, 1-5) | флаги: 1 — from structure, 2 — to unit |
0x02 | минимальный урон магией | structure id (4 байта) |
0x02 | разброс урона магии | |
0x02 | type id заклинания (либо 0) | |
0x02 | сила заклинания (0-100) | |
0x04 | количество модификаторов | всегда 2 |
0x06 | данные модификатора | spell src x (2 байта) |
spell src y (4 байта) | ||
… | … | spell dest x (2 байта) |
spell dest y (4 байта) | ||
0x06 | данные модификатора |
данные модификатора эффекта | |
0x02 | тип модификатора |
0x04 | значение модификатора |
данные секции 9 (id=8) (мешки) | |
variable | данные мешка |
… | … |
variable | данные мешка |
данные мешка | |
0x04 | количество предметов в мешке |
0x04 | id юнита, в котором мешок (или 0, если просто мешок) |
0x04 | x |
0x04 | y |
0x04 | количество золота в мешке |
0x0A | данные предмета |
… | … |
0x0A | данные предмета |
данные предмета | |
0x04 | id предмета |
0x02 | признак wielded |
0x04 | номер присоединенного эффекта, начиная с 1 (в секции 8) |
данные секции 10 (id=6) (юниты) | |
0x30 | данные юнита |
… | … |
0x30 | данные юнита |
Примечание. Если секция пуста, она не записывается.
данные юнита | |
0x04 | (x << 0x10) + 0x80 |
0x04 | (y << 0x10) + 0x80 |
0x02 | typeId |
0x02 | face |
0x04 | флаги (0x10 — isHuman) |
0x04 | флаги (01 — quest kill, 02 — quest intercept, 04 — quest escort, 08 — no xp for kill) |
0x04 | тип юнита (serverId) |
0x04 | id игрока |
0x04 | id вложенного мешка |
0x04 | поворот юнита (0 — С, 2 — СЗ, 4 — З, 6 — ЮЗ, 8 — Ю…) |
0x02 | HP |
0x02 | max HP |
0x04 | id юнита |
0x04 | id группы |
данные секции 11 (id=7) (логика) | |
0x04 | количество инстанций (кто найдет перевод лучше пишите) |
0x31С | данные инстанции |
… | … |
0x31С | данные инстанции |
0x04 | количество проверок (кто найдет перевод лучше пишите) |
0x31С | данные проверки |
… | … |
0x31С | данные проверки |
0x04 | количество триггеров |
0xB8 | данные триггера |
… | … |
0xB8 | данные триггера |
данные инстанции (instance) | |
0x40 | название |
0x04 | instance type id (начиная с 1) |
0x04 | instance index (начиная с 1) |
0x04 | execute once flag |
0x04 | значение данного аргумента instance (всего 10) |
… | … |
0x04 | значение данного аргумента instance (всего 10) |
0x04 | тип данного аргумента instance (всего 10) 1 — число, индекс 2 — group 3 — player 4 — unit 5 — x 6 — y 8 — item 9 — building см. Description checks/instants.ini |
… | … |
0x04 | тип данного аргумента instance (всего 10) |
0x40 | название данного аргумента instance (всего 10) |
… | … |
0x40 | название данного аргумента instance (всего 10) |
данные проверки (check) | |
0x40 | название |
0x04 | check type id (начиная с 1) |
0x04 | check index (начиная с 1) |
0x04 | execute once flag |
0x04 | значение данного аргумента check (всего 10) |
… | … |
0x04 | значение данного аргумента check (всего 10) |
0x04 | тип данного аргумента check (всего 10), см. данные instance |
… | … |
0x04 | тип данного аргумента check (всего 10) |
0x40 | название данного аргумента check (всего 10) |
… | … |
0x40 | название данного аргумента check (всего 10) |
данные триггера | |
0x04 | check 1 id |
0x04 | check 2 id |
0x04 | check 3 id |
0x04 | check 4 id |
0x04 | check 5 id |
0x04 | check 6 id |
0x04 | instance 1 id |
0x04 | instance 2 id |
0x04 | instance 3 id |
0x04 | instance 4 id |
0x04 | check 1/2 operator 0 — ‘=’ 1 — ‘!=’ 2 — ‘>’ 3 — ‘<‘ 4 — ‘>=’ 5 — ‘<=’ |
0x04 | check 3/4 operator |
0x04 | check 5/6 operator |
0x04 | run once flag |
данные секции 12 (id=10) (группы) | |
0x10 | данные группы |
… | … |
0x10 | данные группы |
данные группы | |
0x04 | id группы |
0x04 | repop time |
0x04 | flags (01 — ai instant enabled, 02 — random positions, 04 — quest kill, 08 — quest intercept) |
0x04 | instance id (если не выбрано, то -1) |
данные секции 13 (id=12) (музыка) | |
0x1C | запись о музыке по умолчанию |
0x1C | данная запись о музыке |
… | … |
0x1C | данная запись о музыке |
Примечание. Количество записей о музыке из секции 1 не включает запись по умолчанию.
запись о музыке | |
0x04 | x |
0x04 | y |
0x04 | радиус |
0x04 | type id мелодии 1 (-1, если не задано) |
0x04 | type id мелодии 2 (-1, если не задано) |
0x04 | type id мелодии 3 (-1, если не задано) |
0x04 | type id мелодии 4 (-1, если не задано) |