Ancient Empires II RM/Форматы файлов игры

Материал из Project D8
Перейти к навигации Перейти к поиску

Типы данных

Все данные хранятся в формате Big Endian, он же Network Order. Это значит, что в многобайтовых типах данных байты хранятся в порядке от старшего к младшему.

Ниже перечислены обозначения типов данных, используемые на этой странице (в скобках указаны методы классов DataInputStream и DataOutputStream, используемые соответственно для чтения и записи таких данных)

  • byte — целое число размером 8 бит со знаком (readByte, writeByte)
  • short — целое число размером 16 бит со знаком (readShort, writeShort)
  • int — целое число размером 32 бит со знаком (readInt, writeInt)
  • UTF — строка в «модифицированном»[1] формате UTF-8 (readUTF, writeUTF)

Файл локализации (lang.dat)

Этот файл содержит все строки интерфейса игры в достаточно простом формате:

Параметр Тип данных
Количество строк, сохраненных в файле int
* Собственно строки * UTF — столько штук, сколько указано в начале файла

В UniFM есть модули для распаковки этих файлов в редактируемый INI и для запаковки обратно в двоичный DAT.

Файлы ресурсов (*.pak)

Хитрый архив без сжатия. Изначально, видимо, разрабатывался с учетом возможной распаковки ресурсов по мере необходимости, однако и в Ancient Empires II, и в Fatal Force все ресурсы распаковываются сразу, поэтому некоторые поля не используются.

Параметр Тип данных
Размер заголовка (смещение первого файла) short
Число файлов в архиве short
* Список файлов Имя файла * По одной записи на файл UTF
Смещение файла от конца заголовка int
Размер файла short
* Файлы * Содержимое файла * По одной записи на файл * Содержимое файла

SieFM может работать с этими архивами: поддерживается запаковка, распаковка, изменение файлов, и т. д.

О переводе файлов игры в текстовый формат

Начиная с 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 юнит — дракон, против которого имеют бонус к атаке юниты со свойством 6
1 юнит получает бонусы к атаке и защите на воде
2 не используется
3 юнит может захватывать дома
4 юнит может захватывать замки
5 юнит может воскрешать убитых юнитов в скелеты
6 юнит получает бонусы к атаке против драконов (и вообще любых юнитов со свойством 0)
7 юнит ядовит
8 юнит излучает ауру
9 за один ход юнит не может одновременно перемещаться и атаковать

Файлы *.unit

Файл может содержать следующие свойства:

Свойство Значения Расположение в файле Описание
MoveRange радиус перемещения Обязательно Радиус перемещения юнита
Attack минимальная атака, максимальная атака Обязательно Характеристики атаки юнита
Defence защита Обязательно Характеристики защиты юнита
AttackRange максимальное расстояние атаки, минимальное расстояние атаки Обязательно Расстояние атаки юнита
Cost цена юнита Обязательно Цена юнита
CharCount число юнитов в группе Обязательно, перед CharPos Максимальное число юнитов в группе при отображении анимации боя
CharPos номер юнита в группе, координата X, координата Y Обязательно, должен быть определен каждый юнит в группе Позиция юнита на экране при отображении анимации боя
HasProperty номер свойства Не обязательно Обладание юнитом указанным свойством

Номера свойств аналогичны таковым для бинарной версии файла и описаны выше.

Изменение цвета зданий и юнитов

Все нижесказанное относится к AEIIRM версий 2.0 — 2.3 включительно. Начиная с версии 2.4 работа с цветами изменилась: для каждого цвета выделен свой набор картинок, использовать указанные в таблице цвета больше не требуется.

Картинки зданий и юнитов хранятся в формате PNG с палитрой, и изменение цвета реализовано через замену значений цветов в палитре. Поэтому при редактировании для того, чтобы эти картинки в игре изменялись под цвет игрока, нужно использовать в том числе цвета из одной из колонок в таблице ниже (обычно из синей колонки). Эти цвета при необходимости заменяются игрой на цвета той же строки в другой колонке, остальные цвета остаются без изменений. Сохранять картинки следует в формате PNG с палитрой.

Таблица замены цветов (числа соответствуют значениям красного, зеленого и синего для данного цвета):

Синий Красный Зеленый Черный
150, 217, 244
244, 158, 156
171, 237, 90
0, 118, 150
65, 149, 233
219, 36, 113
99, 190, 37
0, 65, 114
0, 100, 198
161, 0, 112
0, 153, 55
0, 43, 75
12, 53, 112
95, 5, 120
0, 85, 82
0, 22, 48

Примечания

  1. Отличия от «обычного» UTF-8 там незначительные. Если вам вдруг понадобится узнать, в чем же именно они состоят, смотрите Java Virtual Machine Specification.