Tutte le pagine dei formati ↓
Riferimento ai formati di file

Riferimento ai formati di Total Annihilation e TA: Kingdoms

Fonte: coreprime/kbot @ 0ab97bf · Modifica su GitHub

kbot

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:

  1. Che cos'è: scopo e dove compare in un'installazione di TA.
  2. Struttura su disco: la struct dell'intestazione, poi le sezioni del payload, con gli offset dei byte indicati.
  3. Ordine di lettura: la sequenza di seek e letture che permette di analizzare correttamente il file.
  4. Esempio svolto: un vero file Cavedog sezionato byte per byte.
  5. Esaminalo da te: comandi kbot da eseguire sulla tua installazione per vedere i dati dal vivo.
  6. 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.