Справочник форматов Total Annihilation и TA: Kingdoms
Источник: coreprime/kbot @ 0ab97bf · Редактировать на GitHub

Практическое руководство по закрытым форматам файлов, в которых 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 с другим словом версии.
Как пользоваться этой документацией
Все страницы о форматах устроены одинаково:
- Что это такое — назначение и где файл встречается в установке TA.
- Устройство на диске — структура заголовка, затем секции данных с указанием смещений в байтах.
- Порядок чтения — последовательность переходов и чтений, которая успешно разбирает файл.
- Разбор примера — настоящий файл Cavedog, разобранный байт за байтом.
- Проверьте сами — команды
kbot, которые можно запустить на своей установке и увидеть данные вживую. - Подводные камни — недокументированные пограничные случаи, различия версий, мусорные байты, оставленные инструментами 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.