Referência de formatos do Total Annihilation e do TA: Kingdoms
Fonte: coreprime/kbot @ 0ab97bf · Editar no GitHub

Um guia de campo dos formatos de arquivo proprietários que a Cavedog
Entertainment lançou no Total Annihilation (1997) e no Total Annihilation:
Kingdoms (1999), escrito do ponto de vista de quem faz engenharia reversa na
prática. Cada página traz a estrutura dos bytes no disco ao lado de um comando
kbot de uma linha, para você examinar os arquivos reais enquanto lê o
texto.
Tip
Primeira vez aqui? Leia o Início rápido: cinco comandos que mostram o kit de ferramentas em cinco minutos.
Note
Se ainda não fez isso, instale o kit de ferramentas e registre um contexto:
go install github.com/coreprime/kbot/cmd/kbot@latest
kbot ctx add ~/games/totala --alias ta --game totala
Com um contexto ativo, a maioria dos comandos (kbot tnt preview …,
kbot gaf list …, kbot mount --server) procura nomes de arquivo sem
caminho em todos os arquivos compactados HPI/UFO/CCX/GP3 da instalação.
Nada de digitar caminhos absolutos.
Catálogo de formatos
Contêineres e invólucros
| Página | Extensões | Finalidade | Suporte completo? |
|---|---|---|---|
| HPI / UFO / CCX / GP3 | .hpi .ufo .ccx .gp3 |
Arquivo compactado e criptografado: o invólucro de todo o resto | TA ✅ TA:K ✅ |
Gráficos e mídia
| Página | Extensões | Finalidade | Suporte completo? |
|---|---|---|---|
| GAF | .gaf .taf |
Animações de sprites em cores indexadas (cursores, explosões, peças de unidades, elementos do mapa) | TA ✅ TA:K ✅ |
| TAF / TSF | .taf .tsf |
Animações truecolor (ARGB de 16 bits) do TA: Kingdoms (efeitos de feitiços, explosões, fundos de menu) e sua forma em texto editável | TA:K ✅ |
| PCX | .pcx |
Bitmap do ZSoft Paintbrush: retratos de unidades, painéis da interface e arquivos que trazem a paleta no TA:K | TA ✅ TA:K ✅ |
| PAL / ALP / LHT / SHD | .pal .alp .lht .shd |
Paleta de 256 cores (1.024 bytes) e tabelas de consulta de cores: .alp 256×256 (65.536 bytes), .shd / .lht 32×256 (8.192 bytes) |
TA ✅ TA:K ✅ |
| FNT | .fnt |
Fonte bitmap de largura variável, 1 bit por pixel | TA ✅ |
| Smacker / ZRB | .smk .zrb |
Vídeo das cinemáticas (Smacker da RAD Game Tools, renomeado como .zrb) |
TA ✅ |
| Bink | .bik |
Vídeo das cinemáticas do TA: Kingdoms (RAD Bink 1), o sucessor do Smacker | TA:K ✅ |
| WAV / Som | .wav |
WAV comum, e como os bancos de som se ligam em três camadas | TA ✅ TA:K ✅ |
Mapas e terreno
| Página | Extensões | Finalidade | Suporte completo? |
|---|---|---|---|
| SCT | .sct |
Seções de mapa reutilizáveis que se juntam para montar mapas .tnt |
TA ✅ |
| TNT | .tnt |
Um mapa jogável completo (grade de blocos + mapa de altura + minimapa + lista de elementos) | TA ✅ |
| Mapas do TA:K | .tnt .ota .crt .kmp |
O sistema de mapas do TA: Kingdoms (terreno texturizado + renderização do minimapa) e o arquivo de cenário .crt que acompanha cada mapa (unidades posicionadas, regras, gatilhos) |
TA:K 🟡 |
Unidades, scripts e configurações
| Página | Extensões | Finalidade | Suporte completo? |
|---|---|---|---|
| 3DO | .3do |
Malha 3D hierárquica de unidades e elementos, com faces em cores indexadas da paleta | TA ✅ |
| COB / BOS | .cob .bos |
Bytecode de animação e script baseado em pilha que controla cada unidade | TA ✅ TA:K ✅ |
| TDF / FBI / OTA | .tdf .fbi .ota |
Árvores de configuração no estilo INI: atributos de unidades, armas, metadados de mapas. Inclui o dicionário completo de campos FBI. | TA ✅ TA:K ✅ |
| TDFs do gamedata | gamedata/*.tdf |
Classes de movimento, dados de cada lado, associações de som, referência de armas | TA ✅ |
| Perfis de IA | ai/*.txt |
Pesos da IA e limites de unidades por dificuldade, em texto simples (os perfis do TAK não têm plan, veja a nota sobre o TAK) | TA ✅ TA:K ✅ |
Interface do TA: Kingdoms
| Página | Extensões | Finalidade | Suporte completo? |
|---|---|---|---|
| Interface do TA:K | .gui |
Árvore de widgets separada por espaços para os menus do TA: Kingdoms | TA:K ✅ |
Tutoriais e referência
| Página | Conteúdo |
|---|---|
| Início rápido | Cinco comandos para começar. |
| Modificar uma unidade | Tutorial completo: extrair → editar → reempacotar → testar (TA). |
| Armadilhas | Resumo de uma página com todas as armadilhas dos documentos de formatos. |
| Formatos do TA e do TA:K | Tabela de uma página: o que é compartilhado, o que é parecido e o que é exclusivo de um jogo. |
| Catálogos de referência | Repositórios independentes: coreprime/reference-ta, com 278 unidades / 199 armas / 45 construtores, e coreprime/reference-tak, com 203 unidades / 198 armas / 32 construtores. |
| Glossário | Termos comuns (piece, axis, sealevel, signal mask, …). |
| Galeria de imagens | Todas as figuras dos documentos, com o comando que gera cada uma. |
Legenda: ✅ suporte completo no kbot · 🟡 documentado, mas o kbot ainda não lê.
Como os formatos se encaixam
┌───────────────────────────────┐
│ 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
└───────┘ └───────┘ └───────┘ └────────┘ └─────────┘
Quase toda sessão de engenharia reversa começa montando um HPI. Até as
instalações desempacotadas são só um HPI extraído. A partir dele, as unidades
(FBI) apontam para malhas (3DO), scripts (COB), retratos de unidades
(PCX) e peças animadas (GAF). Os mapas (TNT) são montados a partir de
seções (SCT) e de posições de elementos que remetem às definições de
elementos em TDF.
Note
Monte a instalação inteira de uma vez. Em vez de examinar um arquivo
compactado de cada vez, aponte o kbot mount para a raiz da instalação. Ele
percorre todos os HPI/UFO/CCX da pasta e sobrepõe o conteúdo em um único
sistema de arquivos virtual, para você navegar até units/ARMCOM.fbi sem
se preocupar com o arquivo compactado de onde ele veio.
kbot mount ~/games/totala --server # opens at http://localhost:8090
Ordem dos bytes, conjunto de caracteres e convenções de coordenadas
Estas regras valem para todos os formatos deste documento, a não ser que uma página diga explicitamente o contrário:
| Propriedade | Convenção |
|---|---|
| Ordem dos bytes | Little-endian (Intel x86). |
| Codificação de strings | ASCII / CP-437, terminadas em NUL. O TA:K trouxe suporte parcial a Windows-1252, mas nunca a UTF-8. |
| Larguras numéricas | uint8 (char), uint16 (short), uint32 (long). Valores de 64 bits não aparecem. |
| Origem das coordenadas | Imagens, grades de blocos, grades de atributos: (0, 0) é o canto superior esquerdo. As malhas 3DO usam Y como eixo vertical (para cima). |
| Escala de ponto fixo 3D | Os modelos 3DO usam ponto fixo com parte fracionária de 16 bits: value / 65536.0 ≈ unidades do espaço do mundo. |
| Taxa de ticks do jogo | 30 ticks por segundo. A maioria dos campos de tempo em COB e GAF usa ticks. |
| Cor transparente | Não existe um índice transparente para a paleta inteira. Cada quadro GAF define sua própria cor-chave (muitas vezes 9, às vezes 0), e os pixels pulados de um quadro comprimido são transparentes. Terreno, minimapas, fundos e texturas de modelos desenham todos os índices, inclusive o índice 0 da paleta (preto). |
Important
Sempre valide os números mágicos antes de confiar em um offset. Vários
formatos (HPI, COB, GAF, TNT, SCT) trazem uma assinatura de 32 bits no
primeiro campo. Se o valor não bater, o arquivo está corrompido, vem de um
mod que usa um formato próprio ou, no TA:K, é uma variante .taf/.tsf
com outra palavra de versão.
Como usar esta documentação
Todas as páginas de formato seguem a mesma estrutura:
- O que é: a finalidade e onde o formato aparece em uma instalação do TA.
- Estrutura no disco: a estrutura do cabeçalho e depois as seções de dados, com os offsets em bytes indicados.
- Ordem de leitura: a sequência de seeks e leituras que analisa o arquivo corretamente.
- Exemplo comentado: um arquivo real da Cavedog dissecado byte a byte.
- Veja você mesmo: comandos
kbotpara rodar na sua própria instalação e ver os dados ao vivo. - Armadilhas: casos-limite não documentados, diferenças entre versões, bytes de lixo deixados pelas ferramentas da Cavedog etc.
Se um destaque tiver esta cara:
Tip
Experimente você mesmo.
kbot pal swatch palettes/palette.pal --target out.png --cell 24
…o comando foi feito para rodar exatamente como está escrito, desde que haja um contexto definido.
Créditos e fontes
Estes documentos reúnem décadas de engenharia reversa feita pela comunidade. As páginas atribuem descobertas específicas no próprio texto, mas a base vem de:
- Joe D.: a dissecação original do formato HPI (1997).
- Saruman & Bobban / dFR Engineering: o primeiro passo a passo do TNT (1997).
- Scott "me22" McMurray: esclarecimentos sobre o formato TNT (2003), com base no código-fonte do Annihilator de Kinboat.
- Kinboat: o formato SCT, ferramentas para GAF e o editor de mapas Annihilator.
- Dan Melchione & Dark Rain: o formato 3DO (1998, revisado em 2002).
- C_A_P, Switeck, KhalvKalash: a engenharia reversa dos opcodes COB/BOS e a família de ferramentas Scriptor.
- Dark Rain: o formato de interface do TA:K e as notas sobre os desafios dos formatos do TA:K.
- Cavedog Entertainment: por fazer um jogo que vale a pena manter vivo mais de 25 anos depois.
Quando esta documentação contradiz um desses originais, quem manda é o código-fonte do kbot: os formatos descritos aqui são testados em ida e volta com milhares de arquivos reais da Cavedog. Se encontrar alguma discrepância, abra uma issue ou um PR em https://github.com/coreprime/kbot.