Todas as páginas de formatos ↓
Referência de formatos de ficheiro

Referência de formatos do Total Annihilation e do TA: Kingdoms

Fonte: coreprime/kbot @ 0ab97bf · Editar no GitHub

kbot

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:

  1. O que é — a função e onde aparece numa instalação do TA.
  2. Disposição no disco — a estrutura do cabeçalho e depois as secções de dados, com os deslocamentos dos bytes indicados.
  3. Ordem de leitura — a sequência de posicionamentos e leituras que analisa o ficheiro com sucesso.
  4. Exemplo comentado — um ficheiro real da Cavedog dissecado byte a byte.
  5. Inspecione por si — comandos kbot que pode executar na sua própria instalação para ver os dados ao vivo.
  6. 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.