Формат .alm

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

материалы:
0x00000001: из железа
0x00000002: из бронзы
0x00000004: из стали
0x00000008: из серебра
0x00000010: из золота
0x00000020: из мифрила
0x00000040: из адаманта
0x00000080: из метеорита
0x00000100: из дерева
0x00000200: из волшебного дерева
0x00000400: из кожи
0x00000800: из толстой кожи
0x00001000: из драконьей кожи
0x00002000: из кристалла
0x00004000: «никакие» (none)
типы предметов:
0x00400000: оружие
0x00800000: щиты
0x01000000: броня
0x02000000: одежда (для магов)
0x04000000: остальное (other)
0x08000000: посохи
allowed extra:
0x10000000: common
0x20000000: magic
виды предметов:
0x00008000: common
0x00010000: uncommon
0x00020000: rare
0x00040000: very rare
0x00080000: elven
0x00100000: bad
0x00200000: good
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, если не задано)