Типы данных
Все данные хранятся в формате Big Endian, он же Network Order. Это значит, что в многобайтовых типах данных байты хранятся в порядке от старшего к младшему.
Ниже перечислены обозначения типов данных, используемые на этой странице (в скобках указаны методы классов DataInputStream и DataOutputStream, используемые соответственно для чтения и записи таких данных)
О переводе файлов игры в текстовый формат
Начиная с AEIIRM v2.3 некоторые файлы игры были переведены из бинарного формата в текстовый для упрощения редактирования. Тем не менее в игре по прежнему можно использовать бинарные версии файлов, при необходимости переименовав их. Ниже приведена таблица, устанавливающая соответствие между оригинальными именами файлов и их новыми текстовыми аналогами.
Оригинальный бинарный файл | Текстовый аналог | Бинарный файл, оставленный для совместимости | Краткое описание файла |
*.sprite | *.sprite | *.sprbin | Описание графики игры, в том числе анимированной |
tiles0.prop | tiles0.prop | tiles0.bin | Описание свойств текстур, используемых на картах |
units.bin | *.unit | units.bin | Описание свойств юнитов |
Все текстовые файлы имеют общий формат:
ИмяСвойства <значение1> [значение2 [значение3 [...]]]
Файлы не чувствительны к регистру и могут содержать произвольное форматирование с использованием пробелов, табуляций и пустых строк. Также файлы могут содержать комментарии, начинающиеся символом ';'.
Набор и порядок следования свойств в общем случае может быть произвольным, однако некоторые свойства невозможно обработать, если предварительно не были ни разу указаны значения некоторых других свойств. Наличие такого рода ограничений отдельно отмечено в подробных описаниях файлов.
Файлы *.sprbin (бывшие *.sprite)
В этих файлах хранятся описания графики игры, в том числе параметры анимации.
Файлы *.sprite используются совместно с одним или несколькими файлами *.png, в зависимости от способа хранения набора кадров. Если все кадры хранятся в одном изображении, файл *.png должен иметь точно такое же имя, как и файл *.sprite. Если же кадры представлены отдельными изображениями, их имена должны иметь вид "имя файла *.sprite" + "_" + "номер кадра", при этом номера кадров начинаются с 0 и номера меньше 10 дополняются спереди дополнительным нулем. При одновременном наличии кадров в обоих представлениях игра будет использовать кадры из сводного изображения.
Параметр | Тип данных | ||||||
Количество кадров | byte | ||||||
Ширина кадра | byte | ||||||
Высота кадра | byte | ||||||
* Определения кадров | Номер кадра на исходном изображении | * по паре значений для каждого кадра | byte | ||||
Режим преобразования | byte | ||||||
Режим привязки | byte | ||||||
Количество кадровых последовательностей | byte | ||||||
Опциональный блок | Задержка смены кадров | блок присутствует только если количество кадровых последовательностей больше 0 | byte | ||||
* Кадровые последовательности | Количество кадров в последовательности | * по блоку данных для каждой последовательности | byte | ||||
* Набор кадров | Номер кадра | * по значению для каждого кадра | byte | ||||
* Смещения кадров | Смещение по горизонтали | * по паре значений для каждого кадра; блок завершается досрочно, если смещение равно -1 | byte | ||||
Смещение по вертикали | byte |
Возможны следующие режимы преобразования кадров (повороты производятся по часовой стрелке, отражение производится относительно вертикальной оси):
Режим преобразования | Описание |
0 | Преобразование отсутствует |
1 | Зеркальное отражение |
2 | Зеркальное отражение и поворот на 180 градусов |
4 | Поворот на 270 градусов |
8 | Поворот на 180 градусов |
16 | Поворот на 90 градусов |
Режим привязки задается в виде битовой карты, где биты имеют следующие значения:
Бит привязки | Описание |
0 | Центровка по горизонтали |
1 | Центровка по вертикали |
2 | Привязка по левому краю |
3 | Привязка по правому краю |
4 | Привязка по верхнему краю |
5 | Привязка по нижнему краю |
Так, например, режим привязки 20 (dec) = 10100 (bin) = привязка по левому верхнему углу, 3 (dec) = 11 (bin) = центровка по вертикали и горизонтали.
Файлы *.sprite
Файл может содержать следующие свойства:
Свойство | Значения | Расположение в файле | Описание |
FrameCount | число кадров | Обязательно, перед FrameDef | Количество кадров в конечном спрайте |
FrameWidth | ширина кадра | Обязательно | Горизонтальный размер (кадра) спрайта |
FrameHeight | высота кадра | Обязательно | Вертикальный размер (кадра) спрайта |
FrameDef | номер конечного кадра, номер исходного кадра, преобразование | Обязательно, должен быть определен каждый кадр | Соответствие между кадрами на исходном изображении и кадрами конечного спрайта |
Align | режим привязки | Не обязательно | Режим привязки кадров |
FrameSeqCount | число кадровых последовательностей | Не обязательно, перед FrameSeq | Количество кадровых последовательностей |
FrameDelay | задержка смены кадров | Не обязательно | Задержка смены кадров спрайта |
FrameSeq | номер кадровой последовательности, число кадров в последовательности, номер кадра 1, номер кадра 2, ..., номер кадра n | Не обязательно, должна быть определена каждая последовательность | Кадровые последовательности спрайта |
Translate | номер кадра, смещение по горизонтали, смещение по вертикали | Не обязательно | Смещение отдельных кадров в конечном спрайте |
Режимы преобразования и привязки аналогичны таковым для бинарной версии файла и описаны выше.
Файл tiles0.bin (бывший tiles0.prop)
Этот файл содержит типы тайлов, используемых при построении карт.
Параметр | Тип данных | ||
Количество тайлов | short | ||
Не используется | short | ||
* Типы тайлов | Номер типа | * по значению для каждого тайла | byte |
Значения типов:
Номер типа | Описание |
0 | Дорога |
1 | Равнина |
2 | Лес |
3 | Холмы |
4 | Горы |
5 | Вода |
6 | Мост |
7 | Крепость |
8 | Дом |
9 | Замок |
Файл tiles0.prop
Файл может содержать следующие свойства:
Свойство | Значения | Расположение в файле | Описание |
TypeCount | число типов тайлов | Обязательно, перед TypeDef | Количество типов тайлов, используемых на картах |
TypeDef | номер типа, проходимость, бонус защиты | Обязательно, перед TileDef, должен быть определен каждый тип | Проходимость (число шагов, необходимых, чтобы встать на тайл данного типа) и бонус защиты для данного типа тайла |
TileCount | число тайлов | Обязательно, перед TileDef | Количество тайлов, используемых на картах |
TileDef | номер тайла, номер типа тайла | Обязательно, должен быть определен каждый тайл | Соответствие тайлов их типам |
Первые 10 типов тайлов аналогичны таковым для бинарной версии файла и описаны выше.
Файл units.bin
В этом файле задаются свойства юнитов, такие как атака, защита, радиус перемещения и т.д.
Файл содержит 12 однотипных структур (по числу юнитов в игре), имеющих следующий формат:
Параметр | Тип данных | ||
Радиус перемещения | byte | ||
Минимальная атака | byte | ||
Максимальная атака | byte | ||
Защита | byte | ||
Максимальное расстояние атаки | byte | ||
Минимальное расстояние атаки | byte | ||
Цена | short | ||
Количество юнитов в группе | byte | ||
* Позиции юнитов в группе | Координата X | * по паре значений для каждого юнита в группе | byte |
Координата Y | byte | ||
Количество свойств | byte | ||
* Свойства | Номер свойства | * по значению для каждого свойства | byte |
Свойства юнитов:
Номер свойства | Описание |
0 | юнит - скелет и не может быть воскрешен |
1 | юнит получает бонусы к атаке и защите на воде |
2 | не используется |
3 | юнит может захватывать дома |
4 | юнит может захватывать замки |
5 | юнит может воскрешать убитых юнитов в скелеты |
6 | юнит получает бонусы к атаке против скелетов |
7 | юнит ядовит |
8 | юнит излучает ауру |
9 | за один ход юнит не может одновременно перемещаться и атаковать |
Файлы *.unit
Файл может содержать следующие свойства:
Свойство | Значения | Расположение в файле | Описание |
MoveRange | радиус перемещения | Обязательно | Радиус перемещения юнита |
Attack | минимальная атака, максимальная атака | Обязательно | Характеристики атаки юнита |
Defence | защита | Обязательно | Характеристики защиты юнита |
AttackRange | максимальное расстояние атаки, минимальное расстояние атаки | Обязательно | Расстояние атаки юнита |
Cost | цена юнита | Обязательно | Цена юнита |
CharCount | число юнитов в группе | Обязательно, перед CharPos | Максимальное число юнитов в группе при отображении анимации боя |
CharPos | номер юнита в группе, координата X, координата Y | Обязательно, должен быть определен каждый юнит в группе | Позиция юнита на экране при отображении анимации боя |
HasProperty | номер свойства | Не обязательно | Обладание юнитом указанным свойством |
Номера свойств аналогичны таковым для бинарной версии файла и описаны выше.
Изменение цвета зданий и юнитов
Картинки зданий и юнитов хранятся в формате PNG с палитрой, и изменение цвета реализовано через замену значений цветов в палитре. Поэтому при редактировании для того, чтобы эти картинки в игре изменялись под цвет игрока, нужно использовать в том числе цвета из одной из колонок в таблице ниже (обычно из синей колонки). Эти цвета при необходимости заменяются игрой на цвета той же строки в другой колонке, остальные цвета остаются без изменений. Сохранять картинки следует в формате PNG с палитрой.
Таблица замены цветов (числа соответствуют значениям красного, зеленого и синего для данного цвета):
Синий | Красный | Зеленый | Черный | ||||
|
|
|
|
||||
|
|
|
|
||||
|
|
|
|
||||
|
|
|
|