Toutes les pages de formats ↓
Référence des formats de fichiers

Référence des formats de Total Annihilation et TA: Kingdoms

Source : coreprime/kbot @ 0ab97bf · Modifier sur GitHub

kbot

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 :

  1. Ce que c'est — son rôle et l'endroit où il apparaît dans une installation de TA.
  2. Disposition sur le disque — la structure d'en-tête, puis les sections de charge utile, avec les offsets en octets indiqués.
  3. Ordre de lecture — la suite de déplacements (seek) et de lectures qui permet d'analyser correctement le fichier.
  4. Exemple commenté — un vrai fichier Cavedog disséqué octet par octet.
  5. Examinez-le vous-même — des commandes kbot à lancer sur votre propre installation pour voir les données en direct.
  6. 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.