Alle Formatseiten ↓
Dateiformat-Referenz

Formatreferenz zu Total Annihilation und TA: Kingdoms

Aus coreprime/kbot @ 0ab97bf · Auf GitHub bearbeiten

kbot

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:

  1. Was es ist – Zweck und wo es in einer TA-Installation vorkommt.
  2. Aufbau auf der Platte – zuerst das Header-Struct, dann die Nutzdaten-Abschnitte, mit ausgewiesenen Byte-Offsets.
  3. Lesereihenfolge – die Abfolge von Seeks und Reads, mit der sich die Datei erfolgreich parsen lässt.
  4. Beispiel im Detail – eine echte Cavedog-Datei, Byte für Byte zerlegt.
  5. Selbst nachsehen – kbot-Befehle, die du gegen deine eigene Installation laufen lassen kannst, um die Daten live zu sehen.
  6. 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.