Formatreferenz zu Total Annihilation und TA: Kingdoms

Ein Praxisführer zu den proprietären Dateiformaten, die Cavedog Entertainment
mit Total Annihilation (1997) und Total Annihilation: Kingdoms (1999)
ausgeliefert hat, geschrieben aus der Praxis des Reverse Engineerings.
Jede Seite stellt den Byte-Aufbau auf der Platte neben einen einzeiligen
kbot-Befehl, damit du parallel zum Text an den echten Dateien
herumstochern kannst.
Tip
Zum ersten Mal hier? Lies den Schnellstart – fünf Befehle, die das Toolkit in fünf Minuten vorführen.
Note
Falls noch nicht geschehen, installiere zuerst das Toolkit und registriere einen Kontext:
go install github.com/coreprime/kbot/cmd/kbot@latest
kbot ctx add ~/games/totala --alias ta --game totala
Sobald ein Kontext aktiv ist, lösen die meisten Befehle (kbot tnt preview …,
kbot gaf list …, kbot mount --server) bloße Dateinamen über alle
HPI/UFO/CCX/GP3-Archive der Installation auf – du musst keine absoluten
Pfade mehr tippen.
Formatkatalog
Container- und Hüllformate
| Seite | Endungen | Zweck | Voll unterstützt? |
|---|---|---|---|
| HPI / UFO / CCX / GP3 | .hpi .ufo .ccx .gp3 |
Verschlüsseltes, komprimiertes Archiv – die Hülle für alles andere | TA ✅ TA:K ✅ |
Grafik und Medien
| Seite | Endungen | Zweck | Voll unterstützt? |
|---|---|---|---|
| GAF | .gaf .taf |
Sprite-Animationen mit indizierten Farben (Cursor, Explosionen, Einheitenteile, Kartenobjekte) | TA ✅ TA:K ✅ |
| TAF / TSF | .taf .tsf |
Truecolor-Animationen (16-Bit-ARGB) von TA: Kingdoms – Zaubereffekte, Explosionen, Menühintergründe – samt ihrer bearbeitbaren Textform | TA:K ✅ |
| PCX | .pcx |
ZSoft-Paintbrush-Bitmap – Einheitenporträts, Oberflächen-Panels und Palettenträger in TA:K | TA ✅ TA:K ✅ |
| PAL / ALP / LHT / SHD | .pal .alp .lht .shd |
Palette mit 256 Farben (1.024 Byte) und Farb-Nachschlagetabellen: .alp 256×256 (65.536 Byte), .shd / .lht 32×256 (8.192 Byte) |
TA ✅ TA:K ✅ |
| FNT | .fnt |
Bitmap-Schrift mit variabler Breite, 1 Bit pro Pixel | TA ✅ |
| Smacker / ZRB | .smk .zrb |
Zwischensequenz-Video (RAD Game Tools Smacker, umbenannt in .zrb) |
TA ✅ |
| Bink | .bik |
Zwischensequenz-Video von TA: Kingdoms (RAD Bink 1) – der Nachfolger von Smacker | TA:K ✅ |
| WAV / Sound | .wav |
Gewöhnliches WAV plus die dreistufige Verdrahtung der Soundbanks | TA ✅ TA:K ✅ |
Karten und Gelände
| Seite | Endungen | Zweck | Voll unterstützt? |
|---|---|---|---|
| SCT | .sct |
Wiederverwendbare Kartensektionen, aus denen .tnt-Karten zusammengesetzt werden |
TA ✅ |
| TNT | .tnt |
Eine vollständige spielbare Karte (Kachelraster + Höhenkarte + Minikarte + Objektliste) | TA ✅ |
| TA:K-Karten | .tnt .ota .crt .kmp |
Die Karten-Pipeline von TA: Kingdoms – texturiertes Gelände + Minikarten-Rendering, dazu die Szenario-Begleitdatei .crt (platzierte Einheiten, Regeln, Auslöser) |
TA:K 🟡 |
Einheiten, Skripte, Konfiguration
| Seite | Endungen | Zweck | Voll unterstützt? |
|---|---|---|---|
| 3DO | .3do |
Hierarchisches 3D-Mesh für Einheiten und Objekte mit palettenindizierten Flächen | TA ✅ |
| COB / BOS | .cob .bos |
Stackbasierter Animations- und Skript-Bytecode, der jede Einheit steuert | TA ✅ TA:K ✅ |
| TDF / FBI / OTA | .tdf .fbi .ota |
Konfigurationsbäume im INI-Stil – Einheitenwerte, Waffen, Karten-Metadaten. Mit vollständigem FBI-Feldverzeichnis. | TA ✅ TA:K ✅ |
| Gamedata-TDFs | gamedata/*.tdf |
Bewegungsklassen, Seitendaten, Sound-Zuordnungen, Waffenreferenz | TA ✅ |
| KI-Profile | ai/*.txt |
KI-Gewichte und Einheitenlimits je Schwierigkeitsgrad als Klartext (TAK-Profile haben kein plan; siehe TAK-Hinweis) | TA ✅ TA:K ✅ |
Oberfläche von TA: Kingdoms
| Seite | Endungen | Zweck | Voll unterstützt? |
|---|---|---|---|
| TA:K-Oberfläche | .gui |
Durch Leerraum getrennter Widget-Baum für die Menüs von TA: Kingdoms | TA:K ✅ |
Tutorials und Nachschlagewerk
| Seite | Inhalt |
|---|---|
| Schnellstart | Fünf Befehle für den Anfang. |
| Einheit modden | Tutorial von Anfang bis Ende: entpacken → bearbeiten → neu packen → testen (TA). |
| Stolperfallen | Spickzettel auf einer Seite mit allen Stolperfallen aus den Formatdokumenten. |
| TA- und TA:K-Formate | Übersicht auf einer Seite: was gleich, ähnlich oder einem Spiel vorbehalten ist. |
| Referenzkataloge | Eigenständige Repos: coreprime/reference-ta – 278 Einheiten / 199 Waffen / 45 Baueinheiten; coreprime/reference-tak – 203 Einheiten / 198 Waffen / 32 Baueinheiten. |
| Glossar | Gängige Begriffe (piece, axis, sealevel, signal mask, …). |
| Bildergalerie | Jede Abbildung der Dokumentation mit dem Befehl, der sie erzeugt. |
Legende: ✅ volle Unterstützung in kbot · 🟡 dokumentiert, aber von kbot derzeit nicht geparst.
Wie die Formate zusammenhängen
┌───────────────────────────────┐
│ 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
└───────┘ └───────┘ └───────┘ └────────┘ └─────────┘
Fast jede Reverse-Engineering-Sitzung beginnt damit, ein HPI einzuhängen –
selbst geflattete Installationen sind nichts anderes als ein extrahiertes HPI.
Von dort aus verweisen Einheiten (FBI) auf Meshes (3DO), Skripte (COB),
Einheitenporträts (PCX) und Animationsteile (GAF). Karten (TNT) werden
aus Sektionen (SCT) und platzierten Kartenobjekten zusammengesetzt, die
auf Objektdefinitionen in TDF-Dateien verweisen.
Note
Die ganze Installation auf einmal einhängen. Statt ein Archiv nach dem
anderen zu untersuchen, richte kbot mount auf das Wurzelverzeichnis der
Installation. Der Befehl durchläuft jedes HPI/UFO/CCX im Ordner und legt die
Inhalte in einem einzigen virtuellen Dateisystem übereinander, sodass du
units/ARMCOM.fbi öffnen kannst, ganz gleich, aus welchem Archiv die Datei
stammt.
kbot mount ~/games/totala --server # opens at http://localhost:8090
Byte-Reihenfolge, Zeichensatz und Koordinatenkonventionen
Diese Regeln gelten für jedes Format dieser Dokumentation, sofern eine Seite nicht ausdrücklich etwas anderes angibt:
| Eigenschaft | Konvention |
|---|---|
| Byte-Reihenfolge | Little-Endian (Intel x86). |
| Zeichenkodierung | ASCII / CP-437, NUL-terminiert. TA:K brachte teilweise Unterstützung für Windows-1252, aber nie UTF-8. |
| Zahlenbreiten | uint8 (char), uint16 (short), uint32 (long). 64-Bit-Werte kommen nicht vor. |
| Koordinatenursprung | Bilder, Kachelraster, Attributraster – (0, 0) ist oben links. 3DO-Meshes verwenden Y als Vertikale (nach oben). |
| 3D-Festkomma-Skalierung | 3DO-Modelle verwenden Festkommazahlen mit 16 Nachkommabits: value / 65536.0 ≈ Einheiten im Weltkoordinatensystem. |
| Tickrate des Spiels | 30 Ticks/Sekunde. Die meisten Zeitfelder in COB und GAF zählen in Ticks. |
| Transparente Farbe | Es gibt keinen palettenweiten transparenten Index. Ein GAF-Frame nennt seinen eigenen Transparenzschlüssel (oft 9, manchmal 0), und die übersprungenen Pixel eines komprimierten Frames sind transparent; Gelände, Minikarten, Hintergründe und Modelltexturen zeichnen jeden Index, Palettenindex 0 (Schwarz) eingeschlossen. |
Important
Prüfe immer die Magic Number, bevor du einem Offset traust. Mehrere
Formate (HPI, COB, GAF, TNT, SCT) tragen im ersten Feld eine 32-Bit-Signatur.
Stimmt der Wert nicht, ist die Datei entweder beschädigt, stammt aus einem
Mod, der ein privates Format verwendet, oder ist – bei TA:K – eine
.taf/.tsf-Variante mit einem anderen Versionswort.
Mit dieser Dokumentation arbeiten
Jede Formatseite ist gleich aufgebaut:
- Was es ist – Zweck und wo es in einer TA-Installation vorkommt.
- Aufbau auf der Platte – zuerst das Header-Struct, dann die Nutzdaten-Abschnitte, mit ausgewiesenen Byte-Offsets.
- Lesereihenfolge – die Abfolge von Seeks und Reads, mit der sich die Datei erfolgreich parsen lässt.
- Beispiel im Detail – eine echte Cavedog-Datei, Byte für Byte zerlegt.
- Selbst nachsehen –
kbot-Befehle, die du gegen deine eigene Installation laufen lassen kannst, um die Daten live zu sehen. - Stolperfallen – undokumentierte Grenzfälle, Versionsunterschiede, Speicherreste, die Cavedogs Werkzeuge in den Dateien hinterlassen haben, usw.
Sieht ein Hinweiskasten so aus:
Tip
Probier es selbst.
kbot pal swatch palettes/palette.pal --target out.png --cell 24
…dann ist der Befehl dafür gedacht, unverändert zu laufen, sobald ein Kontext gesetzt ist.
Danksagungen und Quellen
Diese Dokumentation fasst Jahrzehnte an Reverse-Engineering-Arbeit der Community zusammen. Die Seiten nennen die Urheber einzelner Erkenntnisse direkt im Text, die Grundlagen aber stammen von:
- Joe D. – die erste Zerlegung des HPI-Formats (1997).
- Saruman & Bobban / dFR Engineering – die erste Beschreibung des TNT-Formats (1997).
- Scott „me22“ McMurray – Präzisierungen zum TNT-Format (2003), gestützt auf den Quellcode von Kinboats Annihilator.
- Kinboat – SCT-Format, GAF-Werkzeuge, der Karteneditor Annihilator.
- Dan Melchione & Dark Rain – 3DO-Format (1998, überarbeitet 2002).
- C_A_P, Switeck, KhalvKalash – Reverse Engineering der COB/BOS-Opcodes und die Scriptor-Werkzeugfamilie.
- Dark Rain – das GUI-Format von TA:K und die Notizen zu den Tücken der TA:K-Formate.
- Cavedog Entertainment – für ein Spiel, das es wert ist, auch nach über 25 Jahren noch am Leben gehalten zu werden.
Widerspricht diese Dokumentation einem dieser Originale, gilt der Quellcode von kbot als maßgeblich – die Formate hier sind im Round-Trip an Tausenden echter Cavedog-Dateien getestet. Wenn du eine Abweichung findest, eröffne ein Issue oder einen PR unter https://github.com/coreprime/kbot.