Referencia de formatos de Total Annihilation y TA: Kingdoms
Fuente: coreprime/kbot @ 0ab97bf · Editar en GitHub

Una guía práctica de los formatos de archivo propietarios que Cavedog
Entertainment incluyó en Total Annihilation (1997) y Total Annihilation:
Kingdoms (1999), escrita desde la experiencia real de la ingeniería inversa. Cada
página combina la estructura en disco byte a byte con un comando kbot
de una línea, para que puedas examinar los archivos reales mientras lees.
Tip
¿Es tu primera visita? Lee el Inicio rápido: cinco comandos que muestran el kit de herramientas kbot en cinco minutos.
Note
Si aún no lo has hecho, instala primero el kit de herramientas kbot y registra un contexto:
go install github.com/coreprime/kbot/cmd/kbot@latest
kbot ctx add ~/games/totala --alias ta --game totala
Con un contexto activo, la mayoría de los comandos (kbot tnt preview …,
kbot gaf list …, kbot mount --server) buscan los nombres de archivo
sin ruta en todos los archivos comprimidos HPI/UFO/CCX/GP3 de la
instalación: se acabó escribir rutas absolutas.
Catálogo de formatos
Contenedores y envoltorios
| Página | Extensiones | Propósito | ¿Soporte completo? |
|---|---|---|---|
| HPI / UFO / CCX / GP3 | .hpi .ufo .ccx .gp3 |
Archivo cifrado y comprimido: el envoltorio de todo lo demás | TA ✅ TA:K ✅ |
Gráficos y multimedia
| Página | Extensiones | Propósito | ¿Soporte completo? |
|---|---|---|---|
| GAF | .gaf .taf |
Animaciones de sprites en color indexado (cursores, explosiones, gadgets de unidades, elementos del mapa) | TA ✅ TA:K ✅ |
| TAF / TSF | .taf .tsf |
Animaciones truecolor (ARGB de 16 bits) de TA: Kingdoms (efectos de hechizos, explosiones, fondos de menú) y su forma de texto editable | TA:K ✅ |
| PCX | .pcx |
Mapa de bits de ZSoft Paintbrush: retratos de unidades, paneles de la interfaz y archivos que aportan la paleta en TA:K | TA ✅ TA:K ✅ |
| PAL / ALP / LHT / SHD | .pal .alp .lht .shd |
Paleta de 256 colores (1024 bytes) y tablas de consulta de color: .alp 256×256 (65 536 bytes), .shd / .lht 32×256 (8192 bytes) |
TA ✅ TA:K ✅ |
| FNT | .fnt |
Fuente de mapa de bits de ancho variable, 1 bit por píxel | TA ✅ |
| Smacker / ZRB | .smk .zrb |
Vídeo de las cinemáticas (Smacker de RAD Game Tools, renombrado como .zrb) |
TA ✅ |
| Bink | .bik |
Vídeo de las cinemáticas de TA: Kingdoms (RAD Bink 1), el sucesor de Smacker | TA:K ✅ |
| WAV / Sonido | .wav |
WAV normal y la asignación de los bancos de sonido en tres capas | TA ✅ TA:K ✅ |
Mapas y terreno
| Página | Extensiones | Propósito | ¿Soporte completo? |
|---|---|---|---|
| SCT | .sct |
Secciones de mapa reutilizables que se unen para construir mapas .tnt |
TA ✅ |
| TNT | .tnt |
Un mapa jugable completo (cuadrícula de casillas + mapa de alturas + minimapa + lista de elementos) | TA ✅ |
| Mapas de TA:K | .tnt .ota .crt .kmp |
El sistema de mapas de TA: Kingdoms (terreno texturizado + render del minimapa) y el archivo de escenario .crt que acompaña a cada mapa (unidades colocadas, reglas, disparadores) |
TA:K 🟡 |
Unidades, scripts y configuración
| Página | Extensiones | Propósito | ¿Soporte completo? |
|---|---|---|---|
| 3DO | .3do |
Malla 3D jerárquica de unidades y elementos, con caras en color indexado de la paleta | TA ✅ |
| COB / BOS | .cob .bos |
Bytecode de animación y scripting basado en pila que controla cada unidad | TA ✅ TA:K ✅ |
| TDF / FBI / OTA | .tdf .fbi .ota |
Árboles de configuración al estilo INI: estadísticas de unidades, armas, metadatos de mapas. Incluye el diccionario completo de campos FBI. | TA ✅ TA:K ✅ |
| TDF de gamedata | gamedata/*.tdf |
Clases de movimiento, datos de bandos, asignaciones de sonido, referencia de armas | TA ✅ |
| Perfiles de IA | ai/*.txt |
Pesos de la IA y límites de unidades por dificultad, en texto plano (los perfiles de TAK no tienen plan; ver la nota sobre TAK) | TA ✅ TA:K ✅ |
Interfaz de TA: Kingdoms
| Página | Extensiones | Propósito | ¿Soporte completo? |
|---|---|---|---|
| Interfaz de TA:K | .gui |
Árbol de widgets separados por espacios para los menús de TA: Kingdoms | TA:K ✅ |
Tutoriales y referencia
| Página | Contenido |
|---|---|
| Inicio rápido | Cinco comandos para empezar. |
| Modificar una unidad | Tutorial completo: extraer → editar → reempaquetar → probar (TA). |
| Escollos | Chuleta de una página con todos los escollos que recogen los documentos de formatos. |
| Formatos de TA y TA:K | Tabla de una página: qué se comparte, qué se parece y qué es exclusivo de un juego. |
| Catálogos de referencia | Repositorios independientes: coreprime/reference-ta, con 278 unidades / 199 armas / 45 constructores; coreprime/reference-tak, con 203 unidades / 198 armas / 32 constructores. |
| Glosario | Términos comunes (piece, axis, sealevel, signal mask, …). |
| Galería de imágenes | Todas las figuras de la documentación, con el comando que las genera. |
Leyenda: ✅ soporte completo en kbot · 🟡 documentado, pero kbot todavía no lo analiza.
Cómo encajan los formatos
┌───────────────────────────────┐
│ 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
└───────┘ └───────┘ └───────┘ └────────┘ └─────────┘
Casi todas las sesiones de ingeniería inversa empiezan montando un HPI;
incluso las instalaciones desempaquetadas no son más que un HPI extraído. A
partir de ahí, las unidades (FBI) apuntan a mallas (3DO), scripts
(COB), retratos de unidades (PCX) y gadgets animados (GAF). Los mapas
(TNT) se ensamblan a partir de secciones (SCT) y de elementos colocados
cuyas definiciones están en archivos TDF.
Note
Monta toda la instalación de una vez. En lugar de examinar los
archivos comprimidos de uno en uno, apunta kbot mount a la raíz de la
instalación. Recorre todos los HPI/UFO/CCX de la carpeta y superpone su
contenido en un único sistema de archivos virtual, de modo que puedes
explorar units/ARMCOM.fbi sin que importe de qué archivo comprimido
procede.
kbot mount ~/games/totala --server # opens at http://localhost:8090
Orden de bytes, juego de caracteres y convenciones de coordenadas
Estas convenciones valen para todos los formatos de este documento, salvo que una página indique explícitamente lo contrario:
| Propiedad | Convención |
|---|---|
| Orden de bytes | Little-endian (Intel x86). |
| Codificación de cadenas | ASCII / CP-437, terminadas en NUL. TA:K añadió soporte parcial de Windows-1252, pero nunca UTF-8. |
| Anchos numéricos | uint8 (char), uint16 (short), uint32 (long). No aparecen valores de 64 bits. |
| Origen de coordenadas | Imágenes, cuadrículas de casillas, cuadrículas de atributos: (0, 0) es la esquina superior izquierda. Las mallas 3DO usan Y como eje vertical (hacia arriba). |
| Escala de coma fija 3D | Los modelos 3DO usan coma fija con 16 bits fraccionarios: value / 65536.0 ≈ unidades del espacio del mundo. |
| Frecuencia de ticks del juego | 30 ticks por segundo. La mayoría de los campos de tiempo de COB y GAF se miden en ticks. |
| Color transparente | No existe un índice transparente común a toda la paleta. Cada fotograma GAF indica su propio color clave (a menudo 9, a veces 0), y los píxeles omitidos de un fotograma comprimido son transparentes; el terreno, los minimapas, los fondos y las texturas de los modelos dibujan todos los índices, incluido el índice 0 de la paleta (negro). |
Important
Valida siempre los números mágicos antes de fiarte de un
desplazamiento. Varios formatos (HPI, COB, GAF, TNT, SCT) llevan una
firma de 32 bits en el primer campo. Si el valor no coincide, el archivo
está dañado, procede de un mod que usa un formato privado o, en TA:K, es
una variante .taf/.tsf con otra palabra de versión.
Cómo usar esta documentación
Todas las páginas de formatos siguen la misma estructura:
- Qué es: su propósito y dónde aparece en una instalación de TA.
- Estructura en disco: la estructura de la cabecera y después las secciones de datos, con los desplazamientos en bytes indicados.
- Orden de lectura: la secuencia de saltos y lecturas que permite analizar el archivo correctamente.
- Ejemplo desarrollado: un archivo real de Cavedog diseccionado byte a byte.
- Examínalo tú mismo: comandos de
kbotque puedes ejecutar sobre tu propia instalación para ver los datos en directo. - Escollos: casos límite no documentados, diferencias entre versiones, bytes de trabajo que dejaron las herramientas de Cavedog, etc.
Si un recuadro tiene este aspecto:
Tip
Pruébalo tú mismo.
kbot pal swatch palettes/palette.pal --target out.png --cell 24
…el comando está pensado para ejecutarse tal cual una vez definido un contexto.
Créditos y materiales de origen
Esta documentación reúne décadas de trabajo de ingeniería inversa de la comunidad. Las páginas atribuyen cada hallazgo concreto en el propio texto, pero las bases proceden de:
- Joe D.: la disección original del formato HPI (1997).
- Saruman & Bobban / dFR Engineering: el primer recorrido por el formato TNT (1997).
- Scott «me22» McMurray: aclaraciones sobre el formato TNT (2003), basadas en el código fuente de Annihilator de Kinboat.
- Kinboat: el formato SCT, herramientas para GAF y el editor de mapas Annihilator.
- Dan Melchione & Dark Rain: el formato 3DO (1998, revisado en 2002).
- C_A_P, Switeck, KhalvKalash: la ingeniería inversa de los opcodes de COB/BOS y la familia de herramientas Scriptor.
- Dark Rain: el formato de interfaz de TA:K y las notas sobre los retos de los formatos de TA:K.
- Cavedog Entertainment: por hacer un juego que merece seguir vivo más de 25 años después.
Cuando esta documentación contradiga alguno de esos originales, manda el código fuente de kbot: los formatos descritos aquí se prueban con viajes de ida y vuelta sobre miles de archivos reales de Cavedog. Si encuentras una discrepancia, abre una issue o un PR en https://github.com/coreprime/kbot.