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 ficheiro 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 inversa na prática. Cada página junta a disposição dos bytes no
disco a um comando kbot de uma linha, para poder mexer nos ficheiros
reais enquanto lê o texto.
Tip
É a primeira vez que cá vem? Leia o Início rápido: cinco comandos que mostram o kit de ferramentas em cinco minutos.
Note
Se ainda não o fez, instale o kit de ferramentas e registe primeiro um contexto:
go install github.com/coreprime/kbot/cmd/kbot@latest
kbot ctx add ~/games/totala --alias ta --game totala
Com um contexto definido como atual, a maioria dos comandos
(kbot tnt preview …, kbot gaf list …, kbot mount --server)
procura os nomes de ficheiro simples em todos os arquivos
HPI/UFO/CCX/GP3 da instalação: acabaram-se os caminhos absolutos.
Catálogo de formatos
Contentores e invólucros
| Página | Extensões | Função | Suporte completo? |
|---|---|---|---|
| HPI / UFO / CCX / GP3 | .hpi .ufo .ccx .gp3 |
Arquivo cifrado e comprimido: o invólucro de tudo o resto | TA ✅ TA:K ✅ |
Gráficos e multimédia
| Página | Extensões | Função | Suporte completo? |
|---|---|---|---|
| GAF | .gaf .taf |
Animações de sprites em cor indexada (cursores, explosões, peças das 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 a sua forma de texto editável | TA:K ✅ |
| PCX | .pcx |
Mapa de bits do ZSoft Paintbrush: retratos das unidades, painéis da interface e ficheiros que transportam a paleta no TA:K | TA ✅ TA:K ✅ |
| PAL / ALP / LHT / SHD | .pal .alp .lht .shd |
Paleta de 256 cores (1024 bytes) e tabelas de consulta de cores: .alp 256×256 (65 536 bytes), .shd / .lht 32×256 (8192 bytes) |
TA ✅ TA:K ✅ |
| FNT | .fnt |
Tipo de letra bitmap de largura variável, 1 bit por píxel | TA ✅ |
| Smacker / ZRB | .smk .zrb |
Vídeo das cinemáticas (Smacker da RAD Game Tools, com a extensão mudada para .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 simples, e como os bancos de som se ligam em três camadas | TA ✅ TA:K ✅ |
Mapas e terreno
| Página | Extensões | Função | Suporte completo? |
|---|---|---|---|
| SCT | .sct |
Secções de mapa reutilizáveis que se juntam para construir mapas .tnt |
TA ✅ |
| TNT | .tnt |
Um mapa jogável completo (grelha de mosaicos + mapa de alturas + 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 ficheiro de cenário .crt que acompanha cada mapa (unidades colocadas, regras, acionadores) |
TA:K 🟡 |
Unidades, scripts e ficheiros de configuração
| Página | Extensões | Função | Suporte completo? |
|---|---|---|---|
| 3DO | .3do |
Malha 3D hierárquica de unidades e elementos, com faces em cor indexada da paleta | TA ✅ |
| COB / BOS | .cob .bos |
Bytecode de animação e scripting baseado em pilha que controla cada unidade | TA ✅ TA:K ✅ |
| TDF / FBI / OTA | .tdf .fbi .ota |
Árvores de configuração ao estilo INI: atributos das unidades, armas, metadados dos mapas. Inclui o dicionário completo dos 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 | Função | Suporte completo? |
|---|---|---|---|
| Interface do TA:K | .gui |
Árvore de widgets separados 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 que os documentos de formatos apontam. |
| Formatos do TA e do TA:K | Tabela de uma página: o que é partilhado, o que é parecido e o que é exclusivo de um jogo. |
| Catálogos de referência | Repositórios independentes: coreprime/reference-ta — 278 unidades / 199 armas / 45 construtores; coreprime/reference-tak — 203 unidades / 198 armas / 32 construtores. |
| Glossário | Termos comuns (piece, axis, sealevel, signal mask, …). |
| Galeria de imagens | Todas as figuras da documentação, com o comando que as produz. |
Legenda: ✅ suporte completo no kbot · 🟡 documentado, mas o kbot ainda não o analisa.
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 todas as sessões de engenharia inversa começam por montar um HPI;
até as instalações desempacotadas não passam de uma extração de HPI. A
partir daí, as unidades (FBI) apontam para malhas (3DO), scripts
(COB), retratos de unidades (PCX) e efeitos animados (GAF). Os
mapas (TNT) são montados a partir de secções (SCT) e de colocações
de elementos que remetem para definições de elementos em TDF.
Note
Monte a instalação inteira de uma vez. Em vez de mexer num arquivo
de cada vez, aponte o kbot mount para a raiz da instalação. Ele
percorre todos os HPI/UFO/CCX da pasta e junta o conteúdo, em camadas,
num único sistema de ficheiros virtual, para que possa navegar em
units/ARMCOM.fbi sem se preocupar com o arquivo de onde veio.
kbot mount ~/games/totala --server # opens at http://localhost:8090
Ordem dos bytes, conjunto de caracteres e convenções de coordenadas
Estas convenções 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 das cadeias de caracteres | ASCII / CP-437, terminadas em NUL. O TA:K acrescentou suporte parcial a Windows-1252, mas nunca a UTF-8. |
| Larguras numéricas | uint8 (char), uint16 (short), uint32 (long). Não aparecem valores de 64 bits. |
| Origem das coordenadas | Imagens, grelhas de mosaicos, grelhas de atributos: (0, 0) é o canto superior esquerdo. As malhas 3DO usam o Y como eixo vertical (para cima). |
| Escala de vírgula fixa 3D | Os modelos 3DO usam vírgula fixa com 16 bits de parte fracionária: value / 65536.0 ≈ unidades do espaço do mundo. |
| Ritmo de ticks do jogo | 30 ticks/segundo. A maioria dos campos de tempo no COB e no GAF usa ticks. |
| Cor transparente | Não há um índice transparente para toda a paleta. Um fotograma GAF indica a sua própria chave (muitas vezes 9, às vezes 0) e os píxeis saltados de um fotograma comprimido são transparentes; o terreno, os minimapas, os fundos e as texturas dos modelos desenham todos os índices, incluindo o índice 0 da paleta (preto). |
Important
Valide sempre os números mágicos antes de confiar num deslocamento.
Vários formatos (HPI, COB, GAF, TNT, SCT) têm uma assinatura de 32 bits
no primeiro campo. Se o valor não corresponder, o ficheiro está
corrompido, vem de um mod que usa um formato privado ou, no TA:K, é uma
variante .taf/.tsf com uma palavra de versão diferente.
Como usar esta documentação
Todas as páginas de formato seguem a mesma estrutura:
- O que é — a função e onde aparece numa instalação do TA.
- Disposição no disco — a estrutura do cabeçalho e depois as secções de dados, com os deslocamentos dos bytes indicados.
- Ordem de leitura — a sequência de posicionamentos e leituras que analisa o ficheiro com sucesso.
- Exemplo comentado — um ficheiro real da Cavedog dissecado byte a byte.
- Inspecione por si — comandos
kbotque pode executar na sua própria instalação para ver os dados ao vivo. - Armadilhas — casos-limite não documentados, diferenças entre versões, dados de trabalho deixados pelas ferramentas da Cavedog, etc.
Se um destaque tiver este aspeto:
Tip
Experimente por si.
kbot pal swatch palettes/palette.pal --target out.png --cell 24
…então o comando foi feito para funcionar tal como está escrito, depois de definido um contexto.
Créditos e fontes
Estes documentos reúnem décadas de trabalho de engenharia inversa da comunidade. As páginas atribuem as descobertas específicas no próprio texto, mas os alicerces vêm de:
- Joe D. — dissecação original do formato HPI (1997).
- Saruman & Bobban / dFR Engineering — primeiro percurso pelo formato TNT (1997).
- Scott "me22" McMurray — esclarecimentos sobre o formato TNT (2003), com base no código-fonte do Annihilator, do Kinboat.
- Kinboat — formato SCT, ferramentas GAF, editor de mapas Annihilator.
- Dan Melchione & Dark Rain — formato 3DO (1998, revisto em 2002).
- C_A_P, Switeck, KhalvKalash — engenharia inversa dos opcodes COB/BOS e a família de ferramentas Scriptor.
- Dark Rain — formato GUI do TA:K e as notas sobre as dificuldades dos formatos do TA:K.
- Cavedog Entertainment — por ter feito 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 aqui descritos são testados em ida e volta com milhares de ficheiros reais da Cavedog. Se encontrar uma discrepância, abra uma issue ou um PR em https://github.com/coreprime/kbot.