Référence des formats de Total Annihilation et TA: Kingdoms
Source : coreprime/kbot @ 0ab97bf · Modifier sur GitHub

Un guide pratique des formats de fichiers propriétaires que Cavedog
Entertainment a livrés avec Total Annihilation (1997) et Total
Annihilation: Kingdoms (1999), écrit par quelqu'un qui en fait réellement la
rétro-ingénierie. Chaque page associe la disposition des octets sur le disque
à une commande kbot d'une ligne, pour que vous puissiez explorer les
vrais fichiers au fil de la lecture.
Tip
Première visite ? Lisez le Démarrage rapide : cinq commandes qui font le tour de la boîte à outils kbot en cinq minutes.
Note
Si ce n'est pas encore fait, installez d'abord la boîte à outils et enregistrez un contexte :
go install github.com/coreprime/kbot/cmd/kbot@latest
kbot ctx add ~/games/totala --alias ta --game totala
Une fois un contexte actif, la plupart des commandes (kbot tnt preview …,
kbot gaf list …, kbot mount --server) cherchent un simple nom de fichier
dans toutes les archives HPI/UFO/CCX/GP3 de l'installation : fini les chemins
absolus à taper.
Catalogue des formats
Conteneurs et enveloppes
| Page | Extensions | Rôle | Prise en charge complète ? |
|---|---|---|---|
| HPI / UFO / CCX / GP3 | .hpi .ufo .ccx .gp3 |
Archive chiffrée et compressée — l'enveloppe de tout le reste | TA ✅ TA:K ✅ |
Graphismes et médias
| Page | Extensions | Rôle | Prise en charge complète ? |
|---|---|---|---|
| GAF | .gaf .taf |
Animations de sprites en couleurs indexées (curseurs, explosions, gadgets d'unités, éléments de décor) | TA ✅ TA:K ✅ |
| TAF / TSF | .taf .tsf |
Animations truecolor (ARGB 16 bits) de TA: Kingdoms — effets de sorts, explosions, fonds de menus — et leur forme texte modifiable | TA:K ✅ |
| PCX | .pcx |
Bitmap ZSoft Paintbrush — portraits d'unités, panneaux d'interface et porteurs de palette de TA:K | TA ✅ TA:K ✅ |
| PAL / ALP / LHT / SHD | .pal .alp .lht .shd |
Palette de 256 couleurs (1 024 octets) et tables de correspondance de couleurs : .alp 256×256 (65 536 octets), .shd / .lht 32×256 (8 192 octets) |
TA ✅ TA:K ✅ |
| FNT | .fnt |
Police bitmap à chasse variable, 1 bit par pixel | TA ✅ |
| Smacker / ZRB | .smk .zrb |
Vidéo des cinématiques (Smacker de RAD Game Tools, renommé en .zrb) |
TA ✅ |
| Bink | .bik |
Vidéo des cinématiques de TA: Kingdoms (RAD Bink 1) — le successeur de Smacker | TA:K ✅ |
| WAV / Son | .wav |
WAV classique, plus le câblage des banques de sons sur trois niveaux | TA ✅ TA:K ✅ |
Cartes et terrain
| Page | Extensions | Rôle | Prise en charge complète ? |
|---|---|---|---|
| SCT | .sct |
Sections de carte réutilisables, assemblées pour construire les cartes .tnt |
TA ✅ |
| TNT | .tnt |
Une carte jouable complète (grille de tuiles + carte des hauteurs + minicarte + liste des éléments) | TA ✅ |
| Cartes TA:K | .tnt .ota .crt .kmp |
La chaîne des cartes de TA: Kingdoms — terrain texturé + rendu de la minicarte, et le fichier compagnon de scénario .crt (unités placées, règles, déclencheurs) |
TA:K 🟡 |
Unités, scripts, configurations
| Page | Extensions | Rôle | Prise en charge complète ? |
|---|---|---|---|
| 3DO | .3do |
Maillage 3D hiérarchique d'unité ou d'élément de décor, aux faces en couleurs indexées de la palette | TA ✅ |
| COB / BOS | .cob .bos |
Bytecode à pile pour l'animation et les scripts, qui pilote chaque unité | TA ✅ TA:K ✅ |
| TDF / FBI / OTA | .tdf .fbi .ota |
Arbres de configuration de style INI — caractéristiques des unités, armes, métadonnées des cartes. Comprend le dictionnaire complet des champs FBI. | TA ✅ TA:K ✅ |
| TDF de gamedata | gamedata/*.tdf |
Classes de déplacement, données des camps, liaisons de sons, référence des armes | TA ✅ |
| Profils d'IA | ai/*.txt |
Poids d'IA et limites d'unités par difficulté, en texte brut (les profils de TAK n'ont pas de plan ; voir la note TAK) | TA ✅ TA:K ✅ |
Interface de TA: Kingdoms
| Page | Extensions | Rôle | Prise en charge complète ? |
|---|---|---|---|
| TA:K GUI | .gui |
Arbre de widgets séparés par des espaces pour les menus de TA: Kingdoms | TA:K ✅ |
Tutoriels et références
| Page | Contenu |
|---|---|
| Démarrage rapide | Cinq commandes pour commencer. |
| Modder une unité | Tutoriel de bout en bout : extraire → modifier → réempaqueter → tester (TA). |
| Pièges | Aide-mémoire d'une page qui rassemble tous les pièges des documents de formats. |
| Formats TA et TA:K | Tableau d'une page : ce qui est commun, semblable ou propre à un seul jeu. |
| Catalogues de référence | Dépôts indépendants : coreprime/reference-ta — 278 unités / 199 armes / 45 constructeurs ; coreprime/reference-tak — 203 unités / 198 armes / 32 constructeurs. |
| Glossaire | Termes courants (piece, axis, sealevel, signal mask, …). |
| Galerie d'images | Toutes les figures de la documentation, chacune avec la commande qui la produit. |
Légende : ✅ prise en charge complète par kbot · 🟡 documenté, mais non analysé par kbot à ce jour.
Comment les formats s'articulent
┌───────────────────────────────┐
│ 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
└───────┘ └───────┘ └───────┘ └────────┘ └─────────┘
Presque toute session de rétro-ingénierie commence par le montage d'un HPI :
même les installations aplaties ne sont qu'un HPI extrait. De là, les unités
(FBI) renvoient à des maillages (3DO), à des scripts (COB), à des
portraits d'unités (PCX) et à des gadgets d'animation (GAF). Les cartes
(TNT) sont assemblées à partir de sections (SCT) et de placements
d'éléments de décor, qui renvoient à des définitions d'éléments en TDF.
Note
Montez toute l'installation d'un coup. Au lieu d'examiner les archives
une à une, pointez kbot mount sur la racine de l'installation. Il
parcourt chaque HPI/UFO/CCX du dossier et superpose leur contenu en un seul
système de fichiers virtuel : vous ouvrez units/ARMCOM.fbi sans vous
soucier de l'archive d'où il vient.
kbot mount ~/games/totala --server # opens at http://localhost:8090
Boutisme, jeu de caractères et conventions de coordonnées
Ces conventions valent pour tous les formats de cette documentation, sauf quand une page indique explicitement le contraire :
| Propriété | Convention |
|---|---|
| Boutisme | Little-endian (Intel x86). |
| Encodage des chaînes | ASCII / CP-437, terminées par un NUL. TA:K a ajouté une prise en charge partielle de Windows-1252, mais jamais d'UTF-8. |
| Largeurs numériques | uint8 (char), uint16 (short), uint32 (long). Aucune valeur 64 bits n'apparaît. |
| Origine des coordonnées | Images, grilles de tuiles, grilles d'attributs : (0, 0) est en haut à gauche. Les maillages 3DO prennent Y comme axe vertical (vers le haut). |
| Échelle de la virgule fixe 3D | Les modèles 3DO utilisent une virgule fixe avec 16 bits de partie fractionnaire : value / 65536.0 ≈ unités de l'espace monde. |
| Fréquence des ticks | 30 ticks par seconde. La plupart des champs de durée de COB et GAF sont exprimés en ticks. |
| Couleur transparente | Il n'existe pas d'index transparent valable pour toute la palette. Une frame GAF désigne sa propre couleur clé (souvent 9, parfois 0), et les pixels sautés d'une frame compressée sont transparents ; le terrain, les minicartes, les fonds et les textures des modèles dessinent tous les index, y compris l'index 0 de la palette (noir). |
Important
Vérifiez toujours les nombres magiques avant de vous fier à un offset.
Plusieurs formats (HPI, COB, GAF, TNT, SCT) portent une signature de 32 bits
dans leur premier champ. Si la valeur ne correspond pas, le fichier est soit
corrompu, soit issu d'un mod qui utilise un format privé, soit, pour TA:K,
une variante .taf/.tsf avec un autre mot de version.
Utiliser cette documentation
Chaque page de format suit la même structure :
- Ce que c'est — son rôle et l'endroit où il apparaît dans une installation de TA.
- Disposition sur le disque — la structure d'en-tête, puis les sections de charge utile, avec les offsets en octets indiqués.
- Ordre de lecture — la suite de déplacements (seek) et de lectures qui permet d'analyser correctement le fichier.
- Exemple commenté — un vrai fichier Cavedog disséqué octet par octet.
- Examinez-le vous-même — des commandes
kbotà lancer sur votre propre installation pour voir les données en direct. - Pièges — cas limites non documentés, différences entre versions, octets de travail laissés par les outils de Cavedog, etc.
Si un encadré ressemble à ceci :
Tip
Essayez vous-même.
kbot pal swatch palettes/palette.pal --target out.png --cell 24
…alors la commande peut être lancée telle quelle une fois un contexte défini.
Remerciements et sources
Cette documentation fait la synthèse de plusieurs décennies de rétro-ingénierie menée par la communauté. Chaque page attribue dans le texte les découvertes particulières à leurs auteurs, mais les fondations viennent de :
- Joe D. — première dissection du format HPI (1997).
- Saruman & Bobban / dFR Engineering — première description détaillée du format TNT (1997).
- Scott « me22 » McMurray — précisions sur le format TNT (2003), en s'appuyant sur le code source d'Annihilator de Kinboat.
- Kinboat — format SCT, outils GAF, éditeur de cartes Annihilator.
- Dan Melchione & Dark Rain — format 3DO (1998, révisé en 2002).
- C_A_P, Switeck, KhalvKalash — rétro-ingénierie des opcodes COB/BOS et la famille d'outils Scriptor.
- Dark Rain — format GUI de TA:K et les notes sur les difficultés des formats de TA:K.
- Cavedog Entertainment — pour avoir créé un jeu qui mérite d'être maintenu en vie plus de 25 ans après.
Quand cette documentation contredit l'un de ces documents d'origine, c'est le code source de kbot qui fait foi : les formats décrits ici sont testés en aller-retour sur des milliers de vrais fichiers Cavedog. Si vous trouvez une divergence, ouvrez une issue ou une PR sur https://github.com/coreprime/kbot.