TDF / FBI / OTA — fichiers de configuration texte
Source : coreprime/kbot @ 0ab97bf · Modifier sur GitHub
Les fichiers TDF (« Text Data File »), FBI (« Feature/Building/Item ») et OTA (« Online Total Annihilation ») partagent tous le même format texte de style INI. C'est sous cette forme que Cavedog déclarait, par principe, tout ce qui n'était pas binaire : caractéristiques des unités, paramètres des armes, définitions des éléments de décor, métadonnées des missions, catégories de sons, indications pour l'IA.
| Extension | Où les trouver | Exemples |
|---|---|---|
.fbi |
units/ |
ARMCOM.FBI, CORRAID.FBI — définitions d'unités |
.tdf |
features/, weapons/, sounds/, gamedata/, etc. |
armflak_weapon.tdf, treeb.tdf |
.ota |
maps/ |
metal heck.ota — métadonnées de carte, positions de départ, consignes pour l'IA |
Ces fichiers sont en ASCII brut ; on peut les ouvrir dans n'importe quel éditeur de texte.
Tip
Essayez vous-même.
# The web UI renders FBI/TDF/OTA as collapsible section trees
kbot mount ~/games/totala --server
# → browse to units/ARMCOM.FBI
Consultez la référence de kbot mount
de la CLI pour l'usage du navigateur en terminal et les options d'aplatissement.
Depuis Go. Utilisez formats/tdf :
import "github.com/coreprime/kbot/formats/tdf"
doc, _ := tdf.ParseFile("units/ARMCOM.FBI")
info := doc.Section("UNITINFO")
fmt.Println(info.String("UnitName"), info.Int("MaxDamage"))
Syntaxe
Un fichier TDF est un arbre de sections. Chaque section a un nom entre
crochets, puis un corps { ... } qui contient des paires clé=valeur et/ou
des sections imbriquées.
[UNITINFO]
{
UnitName=ARMCOM;
Designation=Commander;
Description=Commander, Arm;
Side=ARM;
Objectname=armcom;
BuildCostEnergy=2500;
BuildCostMetal=2500;
MaxDamage=3000;
[SOUNDS]
{
canselect=cmdsel1;
select1=cmdok1;
}
}
Règles :
- Les noms de sections sont entre crochets ; tout ce qui suit jusqu'à
l'accolade
}correspondante appartient à cette section. Une section peut tenir sur une ligne ([special0] { specialwhat=StartPos1; XPos=464; ZPos=216; }). - Une valeur va du
=jusqu'au;suivant, par-delà les sauts de ligne : rien d'autre ne la termine, donc les accolades, les crochets et les=à l'intérieur d'une valeur sont du texte ordinaire, et une valeur ne peut jamais contenir de;. Les espaces, tabulations et sauts de ligne aux deux extrémités d'une clé ou d'une valeur sont supprimés. Une clé affectée deux fois garde sa dernière valeur. - Les clés sont insensibles à la casse.
UnitName,unitnameetUNITNAMEdésignent tous le même champ ; les outils les ramènent couramment en minuscules à la lecture. Les noms de sections sont eux aussi comparés sans tenir compte de la casse. - Les valeurs sont des chaînes par défaut. Les nombres sont lus à la
manière du C, à partir des premiers chiffres :
12abcse lit 12 et56.8se lit 56 là où le jeu attend un entier (des champs commekillmulettidalstrengthsont lus comme des nombres décimaux). Les listes sont séparées par des espaces (par ex.Category=NOTSUB COMMANDER NOTAIR ...). - Les commentaires sont effacés avant toute autre lecture :
//jusqu'à la fin de la ligne, et les blocs/* ... */, qui peuvent s'étendre sur plusieurs lignes. Ainsi,missiondescription=See http://tauniverse.com;perd tout à partir de//, y compris son;, et la valeur se prolonge sur la ligne suivante. kbot refuse d'écrire une valeur qui contient;,//ou/*. - Les blancs et les lignes vides sont ignorés.
Les sections imbriquées (comme [SOUNDS] dans [UNITINFO] ci-dessus) sont
courantes dans les FBI et les OTA. La spécification TDF ne fixe pas de
profondeur maximale ; en pratique, on n'en voit pas plus de 3.
FBI — définitions d'unités
Un FBI est la vision complète qu'a le moteur d'une unité. Il rassemble en un seul endroit le modèle 3D de l'unité, son script, la liste de ses armes, sa banque de sons, ses coûts de construction et son comportement au combat. Exemple abrégé du commandant Arm :
[UNITINFO]
{
// === Identification ===
UnitName=ARMCOM; // Internal lookup key
Objectname=armcom; // → objects3d/armcom.3do, scripts/armcom.cob
Side=ARM; // ARM or CORE
Designation=Commander; // Mouseover label
Description=Commander, Arm;
// === Economy & build ===
BuildCostMetal=2500;
BuildCostEnergy=2500;
BuildTime=89400; // Build-power × seconds (engine units)
WorkerTime=300; // How fast it builds other things
// === Combat ===
MaxDamage=3000; // Hit points
Weapon1=COMMANDER_WEAPON; // → weapons/commander_weapon.tdf [COMMANDER_WEAPON]
Weapon2=disintegrator; // The dreaded D-gun
candgun=1; // Allowed to fire weapon2 on demand
// === Movement ===
MaxVelocity=1.15;
Acceleration=0.075;
BrakeRate=0.0825;
TurnRate=510;
MovementClass=COMMANDER_TANK3; // → gamedata/movinfo.tdf
// === Senses ===
SightDistance=520;
RadarDistance=585;
// === Tags & categories ===
Category=COMMANDER SURFACE MOBILE WEAPON ...;
NoChaseCategory=AIR;
[SOUNDS] {
canselect=cmdsel1;
select1=cmdok1;
...
}
}
Le guide FBI rédigé par la communauté en 1998 (conservé parmi les documents sources de ce dépôt) documente plus d'une centaine de champs. La plupart se comprennent d'eux-mêmes ; les moins évidents sont en général :
| Champ | Ce qu'il contrôle réellement |
|---|---|
Bmcode |
Code de page du menu de construction — laisser à 1 pour les unités normales. |
Category |
Liste d'étiquettes séparées par des espaces, utilisée par BadTargetCategory des armes, par NoChaseCategory, par l'IA et par les menus de construction. |
MovementClass |
Renvoie à une classe de gamedata/movinfo.tdf qui définit les pentes de terrain acceptables, la profondeur d'eau, etc. |
YardMap |
Dessin ASCII (par ex. oooo\noooo\n) qui déclare l'emprise au sol de l'unité et les restrictions eau/terre de chaque case. |
Corpse |
Nom d'une [FEATURE] (voir plus bas) qui sert d'épave laissée sur place. |
SoundCategory |
Choisit la banque de sons dans gamedata/sound.tdf. |
TEDClass |
Indication destinée à l'éditeur de Cavedog ; ignorée à l'exécution. |
Important
UnitName est la clé de recherche partout ailleurs : l'OTA, l'IA et le
menu de construction y font tous référence. Si vous renommez un FBI, il faut
chercher (grep) les références dans tout le mod.
TDF — définitions d'éléments de décor, d'armes et de sons
Les fichiers features/**/*.tdf contiennent des sections [FEATURE], une par
élément de décor statique de la carte. Le format TNT (TNT) y fait
référence par nom de section :
[ArmTree01]
{
description=Arm Tree;
category=trees;
object=arm_tree01; // → objects3d/arm_tree01.3do
footprintx=1;
footprintz=1;
height=20;
blocking=1; // Pathing obstacle
flamable=1;
burnmin=10;
burnmax=20;
burntime=30;
feature_reclamate=ArmTree01_Heap; // Recursive: what's left when reclaimed
damage=15;
reclaimable=1;
energy=0;
metal=2;
seqname=arm_tree01; // GAF sequence to draw (for animated features)
}
Les weapons/*.tdf suivent le même schéma, avec des sections [WEAPON_NAME].
Le champ Weapon1=COMMANDER_WEAPON du FBI se résout vers la section
[COMMANDER_WEAPON] d'un TDF de weapons/, par l'intermédiaire de la table
des armes du jeu, indexée par ID : chaque section a besoin d'un ID= entre 0
et 255, une section ultérieure de même ID remplace la précédente, et un nom
se résout vers l'emplacement le plus bas qui le contient (voir
Gamedata : la table des armes). Le guide des
armes de la communauté documente une soixantaine de champs distincts ; les
plus importants sont ballistic/lineofsight/dropped (l'archétype de
l'arme), weapontimer, weaponvelocity, areaofeffect,
edgeeffectiveness, burst/burstrate et la sous-section [DAMAGE]
(modificateurs de dégâts par catégorie).
[FLAMETHROWER] {
ID=1;
name=Flame Thrower;
rendertype=5;
ballistic=1;
turret=1;
range=160;
reloadtime=1.2;
weapontimer=1;
weaponvelocity=188;
areaofeffect=32;
burst=17;
burstrate=.04;
[DAMAGE] {
default=10;
corpyro=2; // Pyros are nearly fireproof
}
}
[MENUENTRY] — extension du menu de construction
Les fichiers download/*.tdf inscrivent une unité dans les menus de
construction d'un ou plusieurs constructeurs sans modifier
sidedata.tdf. C'est le mécanisme qu'utilise l'extension Core Contingency
de Cavedog pour ajouter ses unités, et la convention que suit chaque extension
.ufo à une seule unité.
[MENUENTRY1]
{
UNITMENU=ARMVP; // Builder's UnitName
MENU=3; // Menu page (row)
BUTTON=4; // Slot within the page
UNITNAME=MYFLASH; // Unit being placed
}
[MENUENTRY2] // Additional builders for the same unit
{
UNITMENU=ARMACV;
MENU=3;
BUTTON=4;
UNITNAME=MYFLASH;
}
| Champ | Type | Signification |
|---|---|---|
UNITMENU |
str | UnitName de l'unité constructrice dont on complète le menu. |
MENU |
int | Numéro de page du menu de construction. 1–2 sont réservées par Cavedog aux unités de base ; la convention de la communauté est de commencer à 3. |
BUTTON |
int | Emplacement dans la page (0–5, disposés en grille de 2 colonnes × 3 lignes : 0=en haut à gauche, 1=en haut à droite, 2=au milieu à gauche, 3=au milieu à droite, 4=en bas à gauche, 5=en bas à droite). |
UNITNAME |
str | L'unité ajoutée — doit correspondre au UnitName= du FBI de votre unité. |
Convention de nommage. Le fichier s'appelle par convention
download/<UNITNAME>.tdf (d'après le UNITNAME= de la première entrée), mais
le moteur lit tous les *.tdf de download/ : le nom de fichier n'est donc
qu'une indication pour le moddeur. Une unité par fichier est la norme.
Entrées multiples. Un même fichier peut contenir plusieurs entrées : le
download/Armfort.tdf de Cavedog en utilise trois pour rendre le mur de
fortification Arm constructible par l'ACK, l'ACV et l'ACA. TA 3.1c lit les
cinq premières sections de chaque fichier, quels que soient leurs noms
([MENUENTRY1] est la convention, [ENTRY0] fonctionne aussi) ; une sixième
section n'est jamais lue. Une entrée dont UNITMENU ne désigne aucune unité,
ou aucune unité avec Builder=1, est ignorée, tout comme une entrée dont
UNITNAME ne désigne aucune unité. MENU et BUTTON sont tronqués à 8 bits,
et le menu d'un constructeur — sa liste [CANBUILD] plus les ajouts de
download — contient au plus 31 unités.
Important
download/*.tdf complète le menu de construction ; il ne remplace rien.
Si l'emplacement choisi entre en collision avec une entrée existante, le
comportement du moteur est imprévisible — en général, l'entrée chargée en
dernier l'emporte, mais l'ordre de chargement des .ufo n'est pas garanti
d'une plateforme à l'autre. Choisissez une page MENU élevée (4 ou 5) pour
les mods destinés à cohabiter.
C'est ce point d'extension additif qui permet de livrer un seul .ufo sans
dériver le sidedata.tdf de 50 Ko. Le tutoriel de
modding le met en œuvre
de bout en bout.
OTA — métadonnées de carte
Un .ota accompagne chaque .tnt et contient tout ce dont le moteur a besoin
pour faire tourner la carte (par opposition au rendu de son terrain) :
[GlobalHeader]
{
missionname=Metal Heck;
missiondescription=A small, brutal metal map.;
planet=metal;
tidalstrength=0;
solarstrength=20;
lavaworld=0;
killmul=50;
waterdoesdamage=0;
minwindspeed=100;
maxwindspeed=2500;
gravity=112;
numplayers=2,4,6,8,10;
[Schema 0] {
Type=Network 1;
aiprofile=DEFAULT;
SurfaceMetal=10;
MohoMetal=125;
HumanMetal=1000;
ComputerMetal=1000;
HumanEnergy=1000;
ComputerEnergy=1000;
[specials] {
[special0] { specialwhat=StartPos1; XPos=464; ZPos=216; }
[special1] { specialwhat=StartPos2; XPos=3408; ZPos=216; }
...
}
}
}
kbot tnt preview lit le .ota correspondant et dessine des marqueurs
numérotés à chaque position de départ du schéma choisi.
Comment le jeu lit les schémas et les positions de départ (toutes les vues de
kbot — l'éditeur de cartes du studio, le bac à sable, l'explorateur de
ressources, kbot tnt preview, kbot tnt lint et le Quality Checker — les
lisent de la même façon, par la vue de jeu OTA de kbot-io) :
- Les schémas sont trouvés par leur nom,
Schema 0,Schema 1, … jusqu'au premier numéro manquant. Les noms sont comparés sans tenir compte de la casse ([schema 1]compte), mais le numéro doit être écrit simplement :[Schema0]ou[Schema 01]ne sont jamais trouvés, et un schéma situé après un trou (Schema 0,Schema 1,Schema 3) n'est jamais lu.SCHEMACOUNTest ignoré. - Les parties en escarmouche et en multijoueur choisissent un schéma selon
son
Typeet son nombre de positions de départ, pas selon sa place dans le fichier. Seuls les schémasNetwork 1àNetwork 4(comparés sans tenir compte de la casse) ayant au moins une position de départ sont retenus. Pour N joueurs, le jeu préfère le dernier schéma retenu qui a exactement N positions de départ, sinon celui qui en a le plus. Une mission de campagne choisit selon la difficulté (Easy,Medium,Hard).numplayersn'est qu'un texte affiché dans le salon (2, 4,2-8etAnyse chargent tous). - Les positions de départ sont les entrées de
[specials]dontspecialwhatcommence parStartPos(sans tenir compte de la casse).StartPosNcorrespond à l'emplacement de joueur N-1,StartPos0correspond lui aussi à l'emplacement 0, et une entrée sans numéro aprèsStartPosprend le numéro suivant dans sa propre série (qui commence à 1).XPosetZPossont en pixels de carte, tronqués à 16 bits. - Les clés manquantes ont des valeurs par défaut, pas des zéros : un
missiondescriptionabsent affiche « No description available », unmaxunitsabsent (campagnes uniquement) vaut 200, et un élément de décor pré-placé ([features]) sansXPosouZPosest ignoré : celui qui se trouve en colonne ou en ligne 0 a donc besoin d'un0explicite.
Note
L'éditeur de cartes du studio modifie le .ota d'une carte sur place.
L'enregistrement ne change que les valeurs que vous avez modifiées (et
ajoute ou retire les schémas et positions de départ que vous avez ajoutés ou
retirés) ; tout le reste — clés de victoire et de déclencheurs,
useonlyunits, [units], [features], autres [specials], nombres
décimaux comme killmul=0.5, commentaires — est réécrit tel quel.
Retirer un schéma ou une position de départ réécrit le fichier dans la
disposition de kbot-io (même contenu, commentaires supprimés) et renumérote
les schémas suivants pour que le jeu les trouve encore. Un .ota que kbot ne
sait pas lire est affiché avec son erreur et laissé intact à
l'enregistrement, et un texte de dialogue contenant ;, // ou /* est
refusé. Il en va de même d'un enregistrement qui ferait lire au jeu un schéma
qu'il ignore actuellement : l'ajout d'un schéma prend le plus petit numéro
libre, donc dans un fichier qui contient [Schema 0] et [Schema 2], le
nouveau [Schema 1] ferait entrer [Schema 2] en jeu ; l'erreur indique la
section à renommer ou à supprimer. Un nombre décimal trop grand pour
être représenté (killmul=1e999, que le jeu lit comme l'infini) s'affiche
comme le plus grand nombre possible et est conservé tel qu'écrit, sauf si
vous le modifiez. Le jeu prend le niveau de la mer dans l'en-tête du .tnt ;
l'éditeur tient à jour une clé sealevel= existante, mais n'en ajoute
jamais.
Exemple commenté — unité minimale
Un FBI « factice » complet et fonctionnel pour une tourelle fixe :
[UNITINFO]
{
UnitName=MYTURRET;
Objectname=myturret;
Side=ARM;
Designation=Test Turret;
Description=Bare-minimum turret for format testing.
BuildCostMetal=200;
BuildCostEnergy=400;
BuildTime=2400;
MaxDamage=600;
Category=NOTSUB SURFACE WEAPON NOTAIR;
TEDClass=LASER;
Builder=0;
canattack=1;
onoffable=0;
ActivateWhenBuilt=1;
Weapon1=LIGHTLASER;
FootprintX=2;
FootprintZ=2;
YardMap=cccc;
MaxSlope=15;
MaxWaterDepth=0;
SightDistance=300;
Corpse=MyTurret_Dead;
[SOUNDS] {
select1=corselect1;
ok1=corok1;
}
}
Pour en faire une extension d'unité complète, il faudrait livrer :
mymod/
├── units/myturret.fbi
├── objects3d/myturret.3do
├── scripts/MYTURRET.cob
├── features/corpses/myturret.tdf # contains [MyTurret_Dead]
└── unitpics/MYTURRET.PCX
…puis empaqueter le répertoire en HPI :
kbot hpi pack ./mymod --target myturret.ufo
Pièges
Warning
Chaque valeur doit se terminer par ;. Un point-virgule manquant ne
provoque pas d'erreur : l'analyseur fusionne silencieusement la valeur avec
la ligne suivante, ce qui produit des caractéristiques déroutantes (un
MaxDamage=3000 suivi d'un Description=... non terminé donne une unité à
30 000 points de vie et sans infobulle).
- Les clés sont insensibles à la casse, les valeurs non.
Side=armcorrespondra bien à la logique de classification des unités pour ARM, mais les mods qui changent de camp à la volée en testantif (Side == "ARM")par égalité stricte de chaînes ne fonctionneront plus. - Les valeurs de liste sont séparées par des espaces
(
Category=COMMANDER MOBILE WEAPON), pas par des virgules. Le moteur découpe à chaque blanc, quel qu'il soit. - Certains champs OTA utilisent pourtant des virgules :
numplayers=2,4,6,8,10. Il n'existe pas de convention unique de séparateur de liste, et le jeu n'analyse jamaisnumplayers: il ne fait qu'en afficher le texte. - Les sections imbriquées n'ont pas de limite de profondeur formelle, mais
Cavedog n'a jamais rien livré au-delà de 3 niveaux. Les éditeurs qui
supposent 2 niveaux échoueront sur une poignée de TDF d'armes avec une
imbrication du type
[WEAPON][DAMAGE][category]. - Les champs booléens sont des entiers (
canmove=1,canstop=0), pastrue/false. Le moteur n'accepte que1/0. - Les fichiers
.otacontiennent souvent du mojibake UTF-8 dans les descriptions de missions (guillemets typographiques venus de Word, etc.). Le moteur les affiche avec la page de code Windows-1252 et transforme en carrés vides tout ce qui en sort.
Tailles typiques
| Ressource | Plage observée dans le contenu de Cavedog |
|---|---|
| FBI d'unité | 1–4 Ko (commandant : ~3 Ko ; char léger : ~1,5 Ko) |
| TDF d'un seul élément de décor | 200 o – 1 Ko |
| TDF d'armes | 0,5–3 Ko par section [WEAPON] |
| Fichier OTA | 1–8 Ko |
gamedata/sidedata.tdf |
~50 Ko (dominé par la disposition de l'interface) |
gamedata/sound.tdf |
~20 Ko |
| Nombre total de FBI dans TA + CC | ~250 fichiers |
Annexe A — dictionnaire des champs FBI
Tous les champs que l'on trouve couramment dans units/*.fbi, regroupés par
fonction. Légende de la colonne Type : str = identifiant/chaîne ;
int = entier ; float = nombre à virgule flottante ; bool = 0/1 ;
list = jetons séparés par des blancs ; enum = petit entier aux
significations documentées.
Les champs qui ne figurent pas ici sont soit des données de travail de
l'éditeur (UnitNumber, Copyright), soit non documentés. Le moteur ignore
silencieusement les clés inconnues.
Identité et affichage
| Champ | Type | Remarques |
|---|---|---|
UnitName |
str | Clé de recherche principale. Référencée par les autres configurations, l'IA, l'OTA, les menus de construction. |
Side |
str | ARM ou CORE (TA), Aramon/Taros/Veruna/Zhon (TA:K). Correspond à une section [SIDE<N>] de gamedata/sidedata.tdf. |
Objectname |
str | Nom de base du maillage .3do, du script .cob et du portrait unitpics/*.pcx de l'unité. |
Designation |
str | Le « code de type » affiché dans le panneau d'informations de l'unité (par ex. ARM-WM pour le commandant Arm). |
Name |
str | Nom court affiché au-dessus de l'unité. |
Description |
str | Texte de l'infobulle affiché sur le bouton de construction et dans le panneau d'informations de l'unité. |
GermanName / FrenchName / SpanishName / ItalianName / JapaneseName / PigLatinName |
str | Noms localisés. Utilisés selon la version linguistique du jeu. |
GermanDescription / FrenchDescription / SpanishDescription / ItalianDescription / JapaneseDescription / PigLatinDescription |
str | Texte d'infobulle localisé. |
Version |
int | Version de schéma suivie par l'éditeur. Toujours 1 ou 2 dans le contenu d'origine. |
UnitNumber |
int | ID propre à l'éditeur. Ignoré à l'exécution. |
Copyright |
str | Chaîne de copyright libre. Ignorée. |
TEDClass |
str | Classification de l'éditeur TAE (KBOT, TANK, COMMANDER, …). Purement cosmétique. |
Économie et construction
| Champ | Type | Remarques |
|---|---|---|
BuildCostMetal |
int | Métal nécessaire pour construire cette unité. |
BuildCostEnergy |
int | Énergie nécessaire pour construire cette unité. |
BuildTime |
int | Puissance de construction × secondes. Le moteur divise par le WorkerTime du constructeur pour obtenir le temps de construction réel. |
WorkerTime |
int | Puissance de construction fournie par cette unité quand c'est un constructeur. |
EnergyUse |
int | Énergie consommée par tick quand l'unité est active. |
EnergyMake |
int | Énergie produite par tick quand l'unité est active. |
MetalUse |
int | Métal consommé par tick. |
MetalMake |
int | Métal produit par tick. |
EnergyStorage |
int | Capacité de stockage. Vide pour les unités sans stockage. |
MetalStorage |
int | Capacité de stockage. Vide pour les unités sans stockage. |
MakesMetal |
int | Métal qu'un convertisseur de métal produit par seconde tant qu'il est allumé et que son énergie est payée ; lu comme un entier (1.9 vaut 1). Distinct de MetalMake, qui est toujours actif. |
ExtractsMetal |
float | Métal qu'un extracteur produit par unité de métal de la carte sous son emprise, tant qu'il est allumé et alimenté. |
TidalGenerator |
bool | La production d'énergie de cette unité suit le tidalstrength de la carte. |
WindGenerator |
bool | La production suit la plage de vitesses du vent de la carte. |
Builder |
bool | Peut construire d'autres unités. |
Builddistance |
int | Portée maximale des nano-lathes, en cases de 16 px. |
CanReclamate |
bool | Peut récupérer épaves et éléments de décor. |
CanCapture |
bool | Peut capturer des unités ennemies (commandants uniquement). |
ActivateWhenBuilt |
bool | Met par défaut l'interrupteur « actif » sur marche quand la construction se termine. |
onoffable |
bool | Dispose d'un interrupteur marche/arrêt que le joueur peut actionner. |
Combat et survie
| Champ | Type | Remarques |
|---|---|---|
MaxDamage |
int | Points de vie. |
Weapon1 / Weapon2 / Weapon3 |
str | Noms de sections d'armes dans weapons/*.tdf. Jusqu'à 3 armes. |
wpri_badTargetCategory |
list | Catégories contre lesquelles l'arme principale est peu efficace (rendues moins prioritaires). |
wsec_badTargetCategory |
list | Idem pour l'arme secondaire. |
BadTargetCategory |
list | Cibles que l'unité dans son ensemble évite. |
NoChaseCategory |
list | Cibles que l'unité ne poursuivra pas (elle ne tirera que si elles sont à portée). |
canattack |
bool | Peut tirer avec ses armes. |
candgun |
bool | Peut tirer manuellement avec sa 3e arme (le D-gun du commandant). |
commandfire |
bool | Oblige chaque tir à être déclenché par le joueur. |
ExplodeAs |
str | Nom de l'arme utilisée pour l'explosion à la mort (dans weapons/*.tdf). |
SelfDestructAs |
str | Nom de l'arme utilisée pour l'explosion d'autodestruction. |
Corpse |
str | Nom de la section [FEATURE] dans features/**/*.tdf qui sert d'épave laissée sur place. |
HealTime |
int | Secondes pour se réparer entièrement sur une plateforme de réparation. |
DamageModifier |
float | Multiplicateur appliqué aux dégâts reçus. <1 = résistant. |
ImmuneToParalyzer |
bool | Insensible aux armes de stase. |
HideDamage |
bool | Cache la barre de dégâts à l'ennemi. |
kamikaze |
bool | Explose au contact au lieu de tirer. |
firestandorders |
bool | Dispose de l'interrupteur d'ordres de tir permanents. |
StandingFireOrder |
enum | Posture de tir par défaut : 0 = cesser le feu, 1 = riposter, 2 = feu à volonté. Une clé absente vaut 2 ; une valeur explicite garde ses deux bits de poids faible, donc 0 signifie vraiment Hold Fire. |
mobilestandorders |
bool | Dispose de l'interrupteur d'ordres de déplacement permanents. |
StandingMoveOrder |
enum | Posture de déplacement par défaut : 0 = tenir la position, 1 = manœuvrer, 2 = se déplacer librement. Une clé absente vaut 2 ; une valeur explicite garde ses deux bits de poids faible (le 0 des commandants signifie Hold Position). |
ShootMe |
bool | Indication pour l'IA et les adversaires ordinateur : cibler cette unité en priorité. |
Commander |
bool | Marque l'unité comme commandant (la partie est perdue s'il est tué). |
Déplacement
| Champ | Type | Remarques |
|---|---|---|
MaxVelocity |
float | Vitesse maximale, en unités du monde par tick. |
Acceleration |
float | Vitesse gagnée par tick. |
BrakeRate |
float | Vitesse perdue par tick quand l'unité freine. |
TurnRate |
int | Vitesse de rotation, en unités de 2π/65536 par tick. |
MaxSlope |
int | Pente de terrain la plus raide que l'unité peut gravir. 255 par défaut. |
MaxWaterDepth |
int | Profondeur d'eau maximale où l'unité peut entrer. 0 = strictement terrestre ; 10000 par défaut. |
MinWaterDepth |
int | Profondeur d'eau minimale (navires uniquement). -10000 par défaut. |
MovementClass |
str | Nom de classe dans gamedata/moveinfo.tdf ([CLASS0]–[CLASS31]). Quand elle se résout, l'emprise, les profondeurs d'eau et les pentes de la classe remplacent les clés propres du FBI (voir Gamedata). |
SteeringMode |
enum | 0/1/2 — tourner puis avancer, ou en arc, ou instantané. |
Upright |
bool | Affiche l'unité debout (kbots) ou à plat (véhicules). |
BankScale |
float | Ampleur du roulis de l'unité en virage (aéronefs). 1 par défaut ; avec un 0 explicite, l'unité ne s'incline jamais. |
PitchScale |
float | Ampleur du tangage de l'unité à l'accélération. |
Scale |
float | Multiplicateur d'échelle visuelle (1.0 = normal). |
CanFly |
bool | Indicateur d'aéronef. |
crusisealt |
int | Altitude de croisière des unités volantes. |
attackrunlength |
int | Distance des passes de mitraillage des VTOL et des bombardiers. |
HoverAttack |
bool | L'aéronef fait du surplace pendant qu'il attaque (hélicoptères de combat). |
floater |
bool | Flotte à la surface de l'eau. |
canmove |
bool | L'unité peut se déplacer. |
canpatrol |
bool | L'ordre de patrouille est disponible. |
canstop |
bool | L'ordre d'arrêt est disponible. |
canguard |
bool | L'ordre de garde est disponible. |
canload |
bool | Peut charger des unités à transporter. |
transportsize |
int | Classe de taille pour les vérifications de chargement des transports. |
transportmaxunits / TransMaxUnits |
int | Capacité des unités de transport. |
manuverleashlength (aussi maneuverleashlength) |
int | Distance jusqu'à laquelle l'unité s'éloigne de sa position pour manœuvrer. |
BadSlope |
int | Pente à partir de laquelle le déplacement ralentit sans être bloqué. |
BuildAngle |
int | Pente maximale sur laquelle cette unité peut être construite. |
Perception
| Champ | Type | Remarques |
|---|---|---|
SightDistance |
int | Rayon de la ligne de vue, en cases de 16 px. |
RadarDistance |
int | Rayon de couverture radar. 0 = pas de radar. |
SonarDistance |
int | Rayon de couverture sonar. |
RadarDistanceJam |
int | Rayon dans lequel l'unité brouille le radar ennemi. |
Stealth |
bool | L'unité n'apparaît pas sur le radar ennemi. |
CloakCost |
int | Énergie par tick pour rester camouflée à l'arrêt. |
CloakCostMoving |
int | Énergie par tick pour rester camouflée en mouvement. |
mincloakdistance |
int | Le camouflage échoue quand un ennemi est à moins de ce nombre de cases. |
Menu de construction et emprise
| Champ | Type | Remarques |
|---|---|---|
Bmcode |
int | Code du menu de construction. Laisser à 1 pour une unité constructible ; 0 pour les bâtiments qui n'y apparaissent pas. |
FootprintX / FootprintZ |
int | Emprise au sol en cases de 16 px. Doit correspondre à l'emprise de la MovementClass. |
YardMap |
str | Grille ASCII sur plusieurs lignes (o=libre, c=fermé, w=eau, g=géothermie) qui définit les restrictions de chaque case. |
ThreeD |
bool | S'affiche comme un modèle 3D. Toujours 1 pour les unités d'origine. |
ZBuffer |
bool | Utilise le Z-buffer. Toujours 1. |
NoShadow |
bool | Ne dessine pas d'ombre. |
NoAutoFire |
bool | Désactive le tir automatique. |
norestrict |
bool | Ignore les zones à accès restreint. |
IsAirBase |
bool | Les aéronefs peuvent s'y poser et s'y faire réparer. |
IsFeature |
bool | Traité comme un élément de décor statique, pas comme une unité. |
Category |
list | Essentiel. Liste d'étiquettes séparées par des blancs, utilisée par le ciblage des armes, les poids de l'IA et les menus de construction. Jetons standard : MOBILE, WEAPON, SURFACE, UNDERWATER, VTOL, KBOT, TANK, SHIP, LEVEL1/LEVEL2/LEVEL3, NOTSUB, NOTAIR, COMMANDER, noms des camps. |
WaterLine |
int | Profondeur à laquelle une unité flottante se stabilise. |
altfromsealevel |
int | L'altitude de l'aéronef est mesurée depuis le niveau de la mer, et non depuis le terrain. |
Audio
| Champ | Type | Remarques |
|---|---|---|
SoundCategory |
str | Nom d'une section de gamedata/sound.tdf qui fournit les échantillons de voix de l'unité. |
[SOUNDS] (section imbriquée) |
sous-section | Remplacements en ligne pour des événements précis (canselect=…, select1=…, etc.). |
Divers / mal compris
| Champ | Type | Remarques |
|---|---|---|
DefaultMissionType |
str | État de mission initial (Standby, Move, etc.). |
sortbias |
int | Poids de tri dans le menu de construction. |
teleporter |
bool | Marque une plateforme de téléportation (Galactic Gate). |
IsAirBase |
bool | Voir « Menu de construction et emprise » — répété par souci d'exhaustivité. |
Ovradjust |
bool | Déclenche une dérogation non documentée du moteur ; seul le commandant l'utilise. |
ShowPlayerName |
bool | Affiche le nom du joueur au-dessus de l'unité (commandant uniquement). |
MoveRate1 / MoveRate2 |
int | Données de travail de l'éditeur, non utilisées à l'exécution. |
antiweapons |
bool | Utilisé par les plateformes anti-armes (Fortitude, anti-nucléaire). |
Exemples concrets dans le catalogue de référence
L'usage des champs s'apprend mieux sur de vrais FBI. Les dépôts de référence cataloguent chaque unité livrée :
- TA — tous les FBI :
de bons exemples « riches » sont
ARMCOM(commandant avecCommander=1,CloakCost,MaxDamage=3000),ARMSAM(tourelle avecWeapon1/2/3remplis),ARMBRAWL(aéronef avecCanFly,crusisealt,BankScale),ARMMEX(extracteur de métal avecExtractsMetal). - TA — tous les TDF d'armes :
[FLAMETHROWER]pourburst/burstrate/firestarter,[NUCLEAR_MISSILE]pour les missiles guidés en deux phases,[LIGHTNING]pour une arme à rayon. - TA — arbre de construction des éléments et des armes
— chaque inscription
[MENUENTRY]de l'installation. - Unités de TA: Kingdoms
— l'autre jeu de champs (
buildcost=à ressource unique,damagecategory=,[WEAPONn]en ligne).ARAKING(Elsin, le monarque d'Aramon) etARAARCH(Archer) sont de bons points d'entrée.
Voir aussi
- TNT — fait référence à des noms d'éléments de décor qui se
résolvent vers des sections TDF
[FEATURE]. - 3DO, COB — référencés par le champ
Objectnamedu FBI. - GAF — référencé par le
seqnamedes éléments de décor et l'explosiongafdes armes. - TDF de gamedata —
moveinfo.tdf,sound.tdfetsidedata.tdf, référencés par des champs du FBI. - Son — comment
SoundCategoryse résout en fichiers WAV. - Glossaire — camp, emprise, yardmap, schéma.