ALM format
Author: Vladimir Chebotarev aka ex-lend
Categories: RoM 2, Technical
Эта статья будет время от времени дописываться.
Формат зависит от версии файла. Нижеследующее описание соответствует версии 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, если не задано)
|
Discussion (0)