Riferimento ai formati di Total Annihilation e TA: Kingdoms

Una guida pratica ai formati di file proprietari che Cavedog Entertainment
distribuì con Total Annihilation (1997) e Total Annihilation: Kingdoms (1999),
scritta dal punto di vista di chi fa davvero reverse engineering. Ogni pagina
affianca alla struttura dei byte su disco un comando kbot di una riga,
così puoi esaminare i file reali mentre leggi il testo.
Tip
Prima volta qui? Leggi la Guida rapida: cinque comandi che mostrano il toolkit in cinque minuti.
Note
Se non l'hai ancora fatto, installa il toolkit e registra prima un contesto:
go install github.com/coreprime/kbot/cmd/kbot@latest
kbot ctx add ~/games/totala --alias ta --game totala
Una volta impostato un contesto corrente, la maggior parte dei comandi
(kbot tnt preview …, kbot gaf list …, kbot mount --server) risolve i
nomi di file semplici in tutti gli archivi HPI/UFO/CCX/GP3 dell'installazione:
niente più percorsi assoluti da digitare.
Catalogo dei formati
Contenitori e involucri
| Pagina | Estensioni | Scopo | Supporto completo? |
|---|---|---|---|
| HPI / UFO / CCX / GP3 | .hpi .ufo .ccx .gp3 |
Archivio cifrato e compresso — l'involucro di tutto il resto | TA ✅ TA:K ✅ |
Grafica e media
| Pagina | Estensioni | Scopo | Supporto completo? |
|---|---|---|---|
| GAF | .gaf .taf |
Animazioni di sprite a colori indicizzati (cursori, esplosioni, parti delle unità, elementi della mappa) | TA ✅ TA:K ✅ |
| TAF / TSF | .taf .tsf |
Animazioni truecolor (ARGB a 16 bit) di TA: Kingdoms — effetti degli incantesimi, esplosioni, sfondi dei menu — più la loro forma testuale modificabile | TA:K ✅ |
| PCX | .pcx |
Bitmap ZSoft Paintbrush — ritratti delle unità, pannelli dell'interfaccia e contenitori di palette in TA:K | TA ✅ TA:K ✅ |
| PAL / ALP / LHT / SHD | .pal .alp .lht .shd |
Palette a 256 colori (1.024 byte) e tabelle di ricerca dei colori: .alp 256×256 (65.536 byte), .shd / .lht 32×256 (8.192 byte) |
TA ✅ TA:K ✅ |
| FNT | .fnt |
Font bitmap a larghezza variabile, 1 bit per pixel | TA ✅ |
| Smacker / ZRB | .smk .zrb |
Filmati (Smacker di RAD Game Tools, rinominato .zrb) |
TA ✅ |
| Bink | .bik |
Filmati di TA: Kingdoms (RAD Bink 1) — il successore di Smacker | TA:K ✅ |
| WAV / Audio | .wav |
WAV normale, più il collegamento a tre livelli dei banchi sonori | TA ✅ TA:K ✅ |
Mappe e terreno
| Pagina | Estensioni | Scopo | Supporto completo? |
|---|---|---|---|
| SCT | .sct |
Sezioni di mappa riutilizzabili, cucite insieme per costruire le mappe .tnt |
TA ✅ |
| TNT | .tnt |
Una mappa giocabile completa (griglia di tile + mappa delle altezze + minimappa + elenco degli elementi) | TA ✅ |
| Mappe TA:K | .tnt .ota .crt .kmp |
La pipeline delle mappe di TA: Kingdoms — terreno texturizzato + rendering della minimappa, e il file di scenario .crt che lo accompagna (unità piazzate, regole, trigger) |
TA:K 🟡 |
Unità, script, configurazioni
| Pagina | Estensioni | Scopo | Supporto completo? |
|---|---|---|---|
| 3DO | .3do |
Mesh 3D gerarchica di unità ed elementi, con facce a colori indicizzati della palette | TA ✅ |
| COB / BOS | .cob .bos |
Bytecode di animazione e scripting basato su stack che governa ogni unità | TA ✅ TA:K ✅ |
| TDF / FBI / OTA | .tdf .fbi .ota |
Alberi di configurazione in stile INI — statistiche delle unità, armi, metadati delle mappe. Con il dizionario completo dei campi FBI. | TA ✅ TA:K ✅ |
| TDF di gamedata | gamedata/*.tdf |
Classi di movimento, dati delle fazioni, associazioni dei suoni, riferimento delle armi | TA ✅ |
| Profili IA | ai/*.txt |
Pesi dell'IA e limiti di unità per difficoltà, in testo semplice (i profili di TAK non hanno plan; vedi la nota su TAK) | TA ✅ TA:K ✅ |
Interfaccia di TA: Kingdoms
| Pagina | Estensioni | Scopo | Supporto completo? |
|---|---|---|---|
| Interfaccia TA:K | .gui |
Albero di widget separati da spazi per i menu di TA: Kingdoms | TA:K ✅ |
Tutorial e riferimenti
| Pagina | Contenuto |
|---|---|
| Guida rapida | Cinque comandi da provare subito. |
| Moddare un'unità | Tutorial completo: estrai → modifica → reimpacchetta → prova (TA). |
| Insidie | Promemoria di una pagina con tutte le insidie dei documenti sui formati. |
| Formati TA e TA:K | Tabella di una pagina: cosa è condiviso, simile o esclusivo di un gioco. |
| Cataloghi di riferimento | Repository separati: coreprime/reference-ta — 278 unità / 199 armi / 45 costruttori; coreprime/reference-tak — 203 unità / 198 armi / 32 costruttori. |
| Glossario | Termini comuni (piece, axis, sealevel, signal mask, …). |
| Galleria di immagini | Ogni figura dei documenti con il comando che la produce. |
Legenda: ✅ supporto completo in kbot · 🟡 documentato ma oggi non analizzato da kbot.
Come si combinano i formati
┌───────────────────────────────┐
│ 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
└───────┘ └───────┘ └───────┘ └────────┘ └─────────┘
Quasi ogni sessione di reverse engineering comincia montando un HPI: anche le
installazioni appiattite non sono altro che un HPI estratto. Da lì, le unità
(FBI) puntano a mesh (3DO), script (COB), ritratti delle unità (PCX) e
parti animate (GAF). Le mappe (TNT) sono assemblate a partire da sezioni
(SCT) e da posizionamenti di elementi che rimandano alle definizioni degli
elementi in TDF.
Note
Monta l'intera installazione in un colpo solo. Invece di esaminare un
archivio alla volta, passa a kbot mount la radice dell'installazione:
il comando legge ogni HPI/UFO/CCX della cartella e ne sovrappone i contenuti in un
unico filesystem virtuale, così puoi sfogliare units/ARMCOM.fbi senza
preoccuparti dell'archivio da cui proviene.
kbot mount ~/games/totala --server # opens at http://localhost:8090
Ordine dei byte, set di caratteri e convenzioni sulle coordinate
Queste convenzioni valgono per tutti i formati di questo documento, salvo quando una pagina le ridefinisce esplicitamente:
| Proprietà | Convenzione |
|---|---|
| Ordine dei byte | Little-endian (Intel x86). |
| Codifica delle stringhe | ASCII / CP-437, terminate da NUL. TA:K aggiunse un supporto parziale a Windows-1252, ma mai a UTF-8. |
| Ampiezze numeriche | uint8 (char), uint16 (short), uint32 (long). Non compaiono valori a 64 bit. |
| Origine delle coordinate | Immagini, griglie di tile, griglie di attributi: (0, 0) è l'angolo in alto a sinistra. Le mesh 3DO usano Y come asse verticale (verso l'alto). |
| Scala in virgola fissa 3D | I modelli 3DO usano una virgola fissa con parte frazionaria a 16 bit: value / 65536.0 ≈ unità dello spazio mondo. |
| Frequenza dei tick di gioco | 30 tick al secondo. La maggior parte dei campi di temporizzazione in COB e GAF usa i tick. |
| Colore trasparente | Non esiste un indice trasparente valido per tutta la palette. Un frame GAF indica la propria chiave (spesso 9, a volte 0) e i pixel saltati di un frame compresso sono trasparenti; terreno, minimappe, fondali e texture dei modelli disegnano ogni indice, compreso l'indice 0 della palette (nero). |
Important
Verifica sempre i magic number prima di fidarti di un offset. Diversi
formati (HPI, COB, GAF, TNT, SCT) hanno una firma a 32 bit nel primo campo.
Se il valore non corrisponde, il file è corrotto, viene da una mod che usa
un formato privato oppure, in TA:K, è una variante .taf/.tsf con una
parola di versione diversa.
Come usare questa documentazione
Ogni pagina dedicata a un formato ha la stessa struttura:
- Che cos'è: scopo e dove compare in un'installazione di TA.
- Struttura su disco: la struct dell'intestazione, poi le sezioni del payload, con gli offset dei byte indicati.
- Ordine di lettura: la sequenza di seek e letture che permette di analizzare correttamente il file.
- Esempio svolto: un vero file Cavedog sezionato byte per byte.
- Esaminalo da te: comandi
kbotda eseguire sulla tua installazione per vedere i dati dal vivo. - Insidie: casi limite non documentati, differenze tra versioni, byte residui lasciati dagli strumenti di Cavedog, ecc.
Se un riquadro ha questo aspetto:
Tip
Provalo tu stesso.
kbot pal swatch palettes/palette.pal --target out.png --cell 24
…allora il comando si può eseguire così com'è, una volta impostato un contesto.
Riconoscimenti e fonti
Questi documenti sintetizzano decenni di reverse engineering della comunità. Le pagine citano nel testo gli autori delle singole scoperte, ma le fondamenta vengono da:
- Joe D. — prima analisi del formato HPI (1997).
- Saruman & Bobban / dFR Engineering — prima descrizione dettagliata del formato TNT (1997).
- Scott "me22" McMurray — chiarimenti sul formato TNT (2003), basati sul sorgente di Annihilator di Kinboat.
- Kinboat — formato SCT, strumenti per GAF, editor di mappe Annihilator.
- Dan Melchione & Dark Rain — formato 3DO (1998, rivisto nel 2002).
- C_A_P, Switeck, KhalvKalash — reverse engineering degli opcode COB/BOS e la famiglia di strumenti Scriptor.
- Dark Rain — formato GUI di TA:K e le note sulle difficoltà dei formati di TA:K.
- Cavedog Entertainment — per aver creato un gioco che vale la pena tenere in vita a più di 25 anni di distanza.
Quando questa documentazione contraddice uno di quegli originali, fa fede il codice sorgente di kbot: i formati descritti qui sono verificati in round-trip (lettura e riscrittura) su migliaia di file Cavedog reali. Se trovi una discrepanza, apri una issue o una PR su https://github.com/coreprime/kbot.