Обновлено:

На этой странице

Юниты и анимации оригинальной игры

Связь правил и графики

Для основного профиля установлена цепочка PRTO → идентификатор Civilopedia → ANIMNAME в Pediaicons → каталог юнита → INI → FLC и звук. Тип юнита из правил и каталог анимации не обязаны иметь одинаковое имя. Несколько типов могут использовать одну графику.

Например, в правилах есть разные типы поселенцев, а часть из них использует каталог Settler. Имя юнита для интерфейса следует брать из профиля правил; имя каталога — из индекса графики. Сопоставление только по русскому названию или порядковому номеру папки ненадёжно.

В unit-resource-links.json сохранены связи для всех 413 строк PRTO. Настройки графики найдены для 412 строк. Аудит с учётом вариантов по эпохам проверил 4 612 прямых ссылок действий и звуков. Дополнительно проверены 2 145 ссылок на изображения из блоков значков; отсутствующих файлов среди этих ссылок не найдено. Полнота ссылок не равна проверке корректного отображения каждого ресурса.

Действия и варианты по эпохам

INI описывает отдельные анимации DEFAULT, RUN, ATTACK1, DEATH, FORTIFY и другие. Не каждое действие заполнено; отсутствие WALK, VICTORY или дополнительной атаки не означает неисправность набора. Допустимые действия дополнительно задаются флагами PRTO.

В Pediaicons обнаружено 20 привязок по эпохам: по четыре для армий, лидеров и трёх типов варваров. Импортер должен разрешать такой ключ по текущей эпохе. Для адмирала найдено различие регистра ключа Fleet и fleet; анализатор нормализует ключи при сопоставлении, но это не подтверждает чувствительность оригинального движка к регистру.

Звуки INI могут находиться рядом с FLC или ссылаться на соседний каталог через ... Это нормальная зависимость ресурсов. Составные AMB требуют дополнительного чтения — см. аудиоформаты.

Структура FLC

В архиве 3 963 файла с расширением FLC; заголовки стандартного FLIC прочитаны у 3 962. Из них у 3 622 число последовательностей в расширенных полях равно восьми, у 61 — одному, у двух — двум, у 277 — нулю. Ноль встречается у обычных FLIC без заполненного расширения направлений и не должен автоматически трактоваться как пустая анимация.

Фактический размер кадра различается. Встречаются 200×240, 140×140, 240×240, 73×73 и другие размеры. У боевого верблюда WCDefault.flc кадр — 104×120, а поля исходного холста указывают 240×240 и смещения внутри него. Единый размер спрайта для всех юнитов приведёт к прыжкам или неправильной привязке к клетке.

У этого примера записано 128 основных кадров: восемь направлений по 16 кадров. Кроме основных кадров, контейнеры содержат дополнительные кадры замыкания последовательностей. Проверка границ выявила восемь дополнительных кадров у всех 3 622 контейнеров с восемью последовательностями. Кадры замыкания не следует автоматически включать в обычный цикл воспроизведения.

Среди подблоков встречаются палитры, полностью сжатые кадры, дельты, несжатые данные, служебные и необычные варианты. Для чтения последующего дельта-кадра требуется предыдущее изображение. Набор независимых PNG нельзя получить простым вырезанием блоков из файла.

Особенности контейнеров модификации

Первый строгий проход не смог полностью пройти 949 контейнеров. Дальнейший анализ показал повторяющиеся особенности:

  • Последний блок палитры иногда имеет служебное значение размера 0xCDCDCDCD. В 2 217 таких блоках форма данных соответствует полной палитре на 256 цветов, точно ограниченной концом кадра. Для неё добавлена узкая обработка с проверкой структуры.
  • В 114 случаях объявленное число подблоков превышает число, помещающееся в границы кадра. Анализатор останавливает чтение на границе и фиксирует предупреждение.
  • После такой обработки полностью пройдены границы 3 961 контейнера. Art/units/Tactical Nuke/Tact_AttackA.flc остаётся неразобранным строгой проверкой подблоков.
  • Отдельный ModernInfantryVictoryAlt.flc не прошёл даже проверку стандартной сигнатуры. Это может быть иной вариант формата или некорректный файл; автоматического исправления не выполнялось.

Эти результаты нельзя описывать как «949 повреждённых анимаций». Они показывают необходимость совместимого декодера и явных диагностик. Пройдены контейнеры, а не все пиксели всех кадров. Журнал предупреждений: animation-container-warnings.json; итог: animation-chunk-summary.json.

Что сохранять при конвертации

Для браузерного атласа нужны тип юнита, действие, направление, индекс кадра, длительность, точка привязки, смещение относительно исходного холста, правила повтора, прозрачность, тень и слой цвета цивилизации. Названия и последовательность восьми направлений следует подтвердить визуально на нескольких действиях, а не присваивать по предположению.

Палитра несёт служебный смысл. В открытой реализации конвертации отдельно обрабатываются прозрачные индексы, тени и окрашиваемая одежда. Для нашего конвертера нужна такая же явная модель, проверенная на конкретных кадрах. Однократная конвертация в обычный RGB закрепит цвет одежды и потеряет часть эффектов.

Для управления действиями подходит собственный автомат состояний поверх Canvas или WebGL. Анимированный WebP удобен для простого непрерывного ролика, но атлас с манифестом лучше подходит для выбора направления, прерывания движения атакой и синхронизации звука. Сам игровой движок из FLC не извлекается.

Оставшиеся ссылки для ручного решения

PRTO_Heavy_Frigate указывает на Ship_of_the_Line, тогда как в поставке есть каталог Ship of the Line. Это кандидат на явный псевдоним импортера после проверки нужной графики. У всадника Rider.INI поле DEAD равно точке; его нужно классифицировать как специальное пустое значение или уточнить поведение в игре. Исходные файлы не изменялись.

Дополнение: для Art/Animations/Cursor/Cursor.flc найден одинарный кольцевой кадр. При 30 объявленных кадрах физически присутствует 31; последний точно равен первому по индексам и палитре. Декодер проверяет равенство перед удалением и записывает предупреждение; отличающийся лишний кадр по-прежнему отклоняется. Подготовлены исходные 30 кадров выбранного юнита и NTP01/NTP09 по общей модели цветовых слотов и альфа. Проверки включены в tests/test_cursor_media.py; Windows-тайминг не считается установленным.

Дополнение v0.23.0: десант и восстановленные контейнеры

Для наземного десанта используется исходное Build из INI. Однонаправленные атласы имеют одну строку; выбор направления не может выйти за её пределы. Восстановлены23 объявленных кадра DesertParatrooperDrop и120 кадров AirTransDeath без изменения оригиналов: ограниченное кольцо расширенного заголовка и одно строго проверенное вложение F1FA. Все143 кадра сравнены с PNG по пикселям; рекурсивное/неправильно ограниченное вложение отклоняется. Исходные пустые Build у124 и342 остаются пустыми, вывод использует Default. Подробности, исходные случаи и ограничения.