Все страницы форматов ↓
Справочник форматов файлов

Справочник форматов Total Annihilation и TA: Kingdoms

Источник: coreprime/kbot @ 0ab97bf · Редактировать на GitHub

kbot

Практическое руководство по закрытым форматам файлов, в которых Cavedog Entertainment выпустила Total Annihilation (1997) и Total Annihilation: Kingdoms (1999), написанное с точки зрения человека, который занимается реверс-инжинирингом на практике. На каждой странице устройство байтов на диске соседствует с однострочной командой kbot, так что настоящие файлы можно изучать прямо по ходу чтения.

Tip

Впервые здесь? Прочитайте Быстрый старт — пять команд, которые за пять минут покажут, на что способен набор инструментов.

Note

Если вы ещё этого не сделали, сначала установите набор инструментов и зарегистрируйте контекст:

go install github.com/coreprime/kbot/cmd/kbot@latest
kbot ctx add ~/games/totala --alias ta --game totala

Когда контекст выбран текущим, большинство команд (kbot tnt preview …, kbot gaf list …, kbot mount --server) находят файл по одному имени в любом архиве HPI/UFO/CCX/GP3 установки — набирать абсолютные пути больше не нужно.


Каталог форматов

Контейнеры и обёртки

Страница Расширения Назначение Полноценная поддержка?
HPI / UFO / CCX / GP3 .hpi .ufo .ccx .gp3 Зашифрованный сжатый архив — обёртка для всего остального TA ✅   TA:K ✅

Графика и медиа

Страница Расширения Назначение Полноценная поддержка?
GAF .gaf .taf Анимации спрайтов с индексированными цветами (курсоры, взрывы, детали юнитов, объекты карты) TA ✅   TA:K ✅
TAF / TSF .taf .tsf Полноцветные (16-битный ARGB) анимации TA: Kingdoms — эффекты заклинаний, взрывы, фоны меню — и их редактируемая текстовая форма TA:K ✅
PCX .pcx Растровое изображение ZSoft Paintbrush — портреты юнитов, панели интерфейса и носители палитр в TA:K TA ✅   TA:K ✅
PAL / ALP / LHT / SHD .pal .alp .lht .shd Палитра на 256 цветов (1 024 байта) и таблицы поиска цветов: .alp 256×256 (65 536 байт), .shd / .lht 32×256 (8 192 байта) TA ✅   TA:K ✅
FNT .fnt Растровый шрифт переменной ширины, 1 бит на пиксель TA ✅
Smacker / ZRB .smk .zrb Видеоролики (RAD Game Tools Smacker, переименованный в .zrb) TA ✅
Bink .bik Видеоролики TA: Kingdoms (RAD Bink 1) — преемник Smacker TA:K ✅
WAV / Звук .wav Обычный WAV и трёхуровневая схема подключения звуковых банков TA ✅   TA:K ✅

Карты и рельеф

Страница Расширения Назначение Полноценная поддержка?
SCT .sct Многоразовые секции карт, из которых сшивают карты .tnt TA ✅
TNT .tnt Полная карта для игры (сетка тайлов + карта высот + миникарта + список объектов) TA ✅
Карты TA:K .tnt .ota .crt .kmp Как устроены карты TA: Kingdoms — рельеф с наложенными текстурами + отрисовка миникарты, а также сопутствующий файл сценария .crt (расставленные юниты, правила, триггеры) TA:K 🟡

Юниты, скрипты, конфигурации

Страница Расширения Назначение Полноценная поддержка?
3DO .3do Иерархическая 3D-сетка юнита или объекта с гранями в индексированных цветах палитры TA ✅
COB / BOS .cob .bos Стековый байткод анимации и скриптов, который управляет каждым юнитом TA ✅   TA:K ✅
TDF / FBI / OTA .tdf .fbi .ota Конфигурационные деревья в стиле INI — характеристики юнитов, оружие, метаданные карт. Включает полный словарь полей FBI. TA ✅   TA:K ✅
TDF в gamedata gamedata/*.tdf Классы передвижения, данные сторон, привязки звуков, справка по оружию TA ✅
Профили ИИ ai/*.txt Текстовые веса ИИ и лимиты юнитов по уровням сложности (в профилях TAK нет plan, см. примечание о TAK) TA ✅   TA:K ✅

Интерфейс TA: Kingdoms

Страница Расширения Назначение Полноценная поддержка?
Интерфейс TA:K .gui Дерево виджетов с разделением пробелами для меню TA: Kingdoms TA:K ✅

Руководства и справка

Страница Содержание
Быстрый старт Пять команд для начала.
Моддинг юнита Сквозное руководство: извлечь → изменить → перепаковать → проверить (TA).
Подводные камни Шпаргалка на одну страницу со всеми подводными камнями из документации по форматам.
Форматы TA и TA:K Таблица на одну страницу: что общее, что похоже, а что есть только в одной игре.
Справочные каталоги Отдельные репозитории: coreprime/reference-ta — 278 юнитов / 199 видов оружия / 45 строителей; coreprime/reference-tak — 203 юнита / 198 видов оружия / 32 строителя.
Глоссарий Распространённые термины (piece, axis, sealevel, signal mask, …).
Галерея изображений Все иллюстрации документации вместе с командами, которыми они получены.

Условные обозначения: ✅ полноценная поддержка в kbot · 🟡 описан, но kbot пока его не разбирает.


Как форматы связаны между собой

                                ┌───────────────────────────────┐
                                │   HPI / UFO / CCX / GP3       │
                                │   (encrypted, compressed VFS) │
                                └──────────────┬────────────────┘
                                               │ contains
            ┌──────────────────────┬───────────┼───────────────┬──────────────────┐
            ▼                      ▼           ▼               ▼                  ▼
        ┌───────┐             ┌───────┐   ┌───────┐       ┌────────┐        ┌─────────┐
        │  FBI  │ unit stats  │  COB  │   │  3DO  │ mesh  │  GAF   │ sprites│   TNT   │ map
        └───┬───┘             └───┬───┘   └───┬───┘       └────┬───┘        └────┬────┘
            │ references          │ runs on   │ textured by    │ used by         │ built from
            ▼                     ▼           ▼                ▼                 ▼
        ┌───────┐             ┌───────┐   ┌───────┐       ┌────────┐        ┌─────────┐
        │  TDF  │ weapons     │ piece │   │  PCX  │ skins │  PAL   │ colour │   SCT   │ tiles
        │ /OTA  │ /features   │ tree  │   │  unitpic│      │ /ALP/LHT/SHD   │ + heights
        └───────┘             └───────┘   └───────┘       └────────┘        └─────────┘

Почти любой сеанс реверс-инжиниринга начинается с монтирования HPI — даже «распакованные» установки представляют собой просто извлечённое содержимое HPI. Дальше юниты (FBI) ссылаются на сетки (3DO), скрипты (COB), портреты юнитов (PCX) и анимированные детали (GAF). Карты (TNT) собираются из секций (SCT) и расстановки объектов, которая разрешается в определения объектов в TDF.

Note

Монтируйте всю установку сразу. Вместо того чтобы разбирать архивы по одному, укажите kbot mount корень установки. Он обходит все HPI/UFO/CCX в папке и накладывает их содержимое слоями в одну виртуальную файловую систему, так что units/ARMCOM.fbi можно открыть, не задумываясь, из какого архива он взят.

kbot mount ~/games/totala --server   # opens at http://localhost:8090

Порядок байтов, кодировка и система координат

Эти соглашения действуют для всех форматов в этом справочнике, если страница явно не оговаривает иное:

Свойство Соглашение
Порядок байтов Little-endian (Intel x86).
Кодировка строк ASCII / CP-437, завершённые NUL. В TA:K добавили частичную поддержку Windows-1252, но UTF-8 так и не появилась.
Разрядность чисел uint8 (char), uint16 (short), uint32 (long). 64-битных значений нет.
Начало координат Изображения, сетки тайлов, сетки атрибутов — (0, 0) находится в левом верхнем углу. В сетках 3DO ось Y вертикальна (направлена вверх).
Масштаб 3D с фиксированной точкой Модели 3DO используют формат с фиксированной точкой и 16-битной дробной частью: value / 65536.0 ≈ единицы мира.
Частота тиков игры 30 тиков в секунду. Большинство полей времени в COB и GAF задаются в тиках.
Прозрачный цвет Общего для всей палитры прозрачного индекса нет. Кадр GAF сам указывает свой ключевой цвет (часто 9, иногда 0), а пропущенные пиксели сжатого кадра прозрачны. Рельеф, миникарты, фоны и текстуры моделей рисуют каждый индекс, включая индекс палитры 0 (чёрный).

Important

Всегда проверяйте магические числа, прежде чем доверять смещению. Некоторые форматы (HPI, COB, GAF, TNT, SCT) хранят 32-битную сигнатуру в первом поле. Если значение не совпадает, файл либо повреждён, либо взят из мода с собственным закрытым форматом, либо — в случае TA:K — это вариант .taf/.tsf с другим словом версии.


Как пользоваться этой документацией

Все страницы о форматах устроены одинаково:

  1. Что это такое — назначение и где файл встречается в установке TA.
  2. Устройство на диске — структура заголовка, затем секции данных с указанием смещений в байтах.
  3. Порядок чтения — последовательность переходов и чтений, которая успешно разбирает файл.
  4. Разбор примера — настоящий файл Cavedog, разобранный байт за байтом.
  5. Проверьте сами — команды kbot, которые можно запустить на своей установке и увидеть данные вживую.
  6. Подводные камни — недокументированные пограничные случаи, различия версий, мусорные байты, оставленные инструментами Cavedog, и т. п.

Если врезка выглядит так:

Tip

Попробуйте сами.

kbot pal swatch palettes/palette.pal --target out.png --cell 24

…значит, команду можно запускать как есть, как только задан контекст.


Благодарности и исходные материалы

Эта документация обобщает десятилетия работы сообщества по реверс-инжинирингу. Конкретные находки указаны прямо на страницах, но фундамент заложили:

  • Joe D. — первый разбор формата HPI (1997).
  • Saruman и Bobban / dFR Engineering — первое описание TNT (1997).
  • Scott «me22» McMurray — уточнения формата TNT (2003) на основе исходников Annihilator от Kinboat.
  • Kinboat — формат SCT, инструменты для GAF, редактор карт Annihilator.
  • Dan Melchione и Dark Rain — формат 3DO (1998, переработка 2002).
  • C_A_P, Switeck, KhalvKalash — реверс-инжиниринг опкодов COB/BOS и семейство инструментов Scriptor.
  • Dark Rain — формат интерфейса TA:K и заметки о трудностях форматов TA:K.
  • Cavedog Entertainment — за игру, которую стоит поддерживать живой и через 25 с лишним лет.

Если эта документация расходится с одним из этих первоисточников, истиной считается исходный код kbot: описанные здесь форматы проверены round-trip на тысячах настоящих файлов Cavedog. Нашли расхождение — откройте issue или PR на https://github.com/coreprime/kbot.