TDF / FBI / OTA — File di configurazione testuali
I file TDF ("Text Data File"), FBI ("Feature/Building/Item") e OTA ("Online Total Annihilation") condividono tutti lo stesso formato testuale in stile INI. Sono il modo canonico con cui Cavedog dichiarava tutto ciò che non era binario: statistiche delle unità, parametri delle armi, definizioni degli elementi, metadati delle missioni, categorie dei suoni, suggerimenti per l'IA.
| Estensione | Dove lo trovi | Esempi |
|---|---|---|
.fbi |
units/ |
ARMCOM.FBI, CORRAID.FBI: definizioni delle unità |
.tdf |
features/, weapons/, sounds/, gamedata/, ecc. |
armflak_weapon.tdf, treeb.tdf |
.ota |
maps/ |
metal heck.ota: metadati della mappa, posizioni di partenza, istruzioni per l'IA |
Sono semplici file di testo ASCII: puoi aprirli con qualsiasi editor di testo.
Tip
Provalo tu stesso.
# The web UI renders FBI/TDF/OTA as collapsible section trees
kbot mount ~/games/totala --server
# → browse to units/ARMCOM.FBI
Consulta il riferimento CLI di kbot mount
per l'uso del browser da terminale e le opzioni di appiattimento.
Da Go. Usa 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"))
Sintassi
Un file TDF è un albero di sezioni. Ogni sezione ha un nome tra parentesi
quadre, seguito da un corpo { ... } che contiene coppie chiave=valore
e/o sezioni annidate.
[UNITINFO]
{
UnitName=ARMCOM;
Designation=Commander;
Description=Commander, Arm;
Side=ARM;
Objectname=armcom;
BuildCostEnergy=2500;
BuildCostMetal=2500;
MaxDamage=3000;
[SOUNDS]
{
canselect=cmdsel1;
select1=cmdok1;
}
}
Regole:
- I nomi delle sezioni stanno tra parentesi quadre; tutto ciò che segue
fino alla
}corrispondente appartiene a quella sezione. Una sezione può stare su una sola riga ([special0] { specialwhat=StartPos1; XPos=464; ZPos=216; }). - Un valore va dal
=fino al;successivo, anche su più righe: nient'altro lo chiude, quindi graffe, parentesi quadre e=dentro un valore sono testo normale, e un valore non può mai contenere un;. Spazi, tabulazioni e a capo alle estremità di una chiave o di un valore vengono rimossi. Una chiave assegnata due volte mantiene l'ultimo valore. - Le chiavi non distinguono tra maiuscole e minuscole.
UnitName,unitnameeUNITNAMEindicano tutte lo stesso campo; gli strumenti di solito le normalizzano in minuscolo durante la lettura. Anche i nomi delle sezioni vengono confrontati ignorando maiuscole e minuscole. - I valori sono stringhe per impostazione predefinita. I numeri vengono
letti alla maniera del C, dalle cifre iniziali:
12abcvale 12 e56.8vale 56 dove il gioco si aspetta un numero intero (campi comekillmuletidalstrengthvengono letti come frazioni). Le liste sono separate da spazi (ad es.Category=NOTSUB COMMANDER NOTAIR ...). - I commenti vengono cancellati prima di leggere qualsiasi altra cosa:
//fino alla fine della riga, e i blocchi/* ... */, che possono estendersi su più righe. Perciòmissiondescription=See http://tauniverse.com;perde tutto da//in poi, compreso il suo;, e il valore prosegue nella riga successiva. kbot si rifiuta di scrivere un valore che contenga;,//o/*. - Spazi bianchi e righe vuote vengono ignorati.
Le sezioni annidate (come [SOUNDS] dentro [UNITINFO] qui sopra) sono
comuni negli FBI e negli OTA. La specifica TDF non fissa una profondità
massima; in pratica non ne vedrai più di 3.
FBI — definizioni delle unità
Un FBI è la visione completa che il motore ha di un'unità. Riunisce in un unico posto il modello 3D dell'unità, lo script, l'elenco delle armi, il banco sonoro, i costi di costruzione e il comportamento in combattimento. Un esempio ridotto dell'Arm Commander:
[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;
...
}
}
La guida agli FBI scritta dalla comunità nel 1998 (conservata tra le fonti di questo repository) documenta più di cento campi. La maggior parte si spiega da sé; quelli meno ovvi sono di solito:
| Campo | Che cosa controlla davvero |
|---|---|
Bmcode |
Codice della pagina del menu di costruzione: lascialo a 1 per le unità normali. |
Category |
Lista di tag separati da spazi usata da BadTargetCategory delle armi, da NoChaseCategory, dall'IA e dai menu di costruzione. |
MovementClass |
Rimanda a una classe in gamedata/movinfo.tdf che definisce le pendenze del terreno accettabili, la profondità dell'acqua, ecc. |
YardMap |
Disegno ASCII (ad es. oooo\noooo\n) che dichiara l'ingombro dell'unità e le restrizioni acqua/terra per ogni cella. |
Corpse |
Nome di una [FEATURE] (vedi sotto) usata come relitto lasciato a terra. |
SoundCategory |
Sceglie il banco audio in gamedata/sound.tdf. |
TEDClass |
Suggerimento per l'editor di Cavedog; ignorato durante il gioco. |
Important
UnitName è la chiave di ricerca usata ovunque: la usano l'OTA, l'IA
e il menu di costruzione. Se rinomini un FBI devi cercare con grep i
riferimenti in tutta la mod.
TDF — definizioni di elementi, armi e suoni
I file features/**/*.tdf contengono sezioni [FEATURE], una per ogni
oggetto statico della mappa. Il formato TNT (TNT) vi fa riferimento
tramite il nome della sezione:
[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)
}
I file weapons/*.tdf seguono lo stesso schema, con sezioni
[WEAPON_NAME]. Il campo Weapon1=COMMANDER_WEAPON dell'FBI si risolve
nella sezione [COMMANDER_WEAPON] di uno dei TDF in weapons/, tramite
la tabella delle armi del gioco, indicizzata per ID: ogni sezione ha bisogno
di un ID= compreso tra 0 e 255, una sezione successiva con lo stesso ID
sostituisce la precedente, e un nome si risolve nello slot più basso che lo
contiene (vedi
Gamedata: la tabella delle armi). La guida
alle armi della comunità documenta circa 60 campi distinti; i più
importanti sono ballistic/lineofsight/dropped (l'archetipo
dell'arma), weapontimer, weaponvelocity, areaofeffect,
edgeeffectiveness, burst/burstrate e la sottosezione [DAMAGE]
(modificatori del danno per categoria).
[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] — Estensione del menu di costruzione
I file in download/*.tdf registrano un'unità nei menu di costruzione di uno
o più costruttori senza modificare sidedata.tdf. È il meccanismo che
l'espansione Core Contingency di Cavedog usa per aggiungere le sue unità, e
la convenzione seguita da ogni componente aggiuntivo .ufo per una singola
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;
}
| Campo | Tipo | Significato |
|---|---|---|
UNITMENU |
str | UnitName del costruttore al cui menu si aggiunge l'unità. |
MENU |
int | Numero di pagina del menu di costruzione. Le pagine 1–2 sono riservate da Cavedog alle unità originali; per convenzione la comunità parte da 3. |
BUTTON |
int | Slot all'interno della pagina (0–5, disposti in una griglia di 2 colonne × 3 righe: 0=in alto a sinistra, 1=in alto a destra, 2=al centro a sinistra, 3=al centro a destra, 4=in basso a sinistra, 5=in basso a destra). |
UNITNAME |
str | L'unità che viene aggiunta: deve corrispondere allo UnitName= nell'FBI della tua unità. |
Convenzione per i nomi dei file. Per convenzione il file si chiama
download/<UNITNAME>.tdf (come lo UNITNAME= della prima voce), ma il
motore legge ogni *.tdf in download/, quindi il nome del file è solo
un'indicazione per il modder. La norma è un'unità per file.
Più voci. Un singolo file può contenere più voci: il
download/Armfort.tdf di Cavedog ne usa tre per rendere l'Arm Fortification
Wall costruibile da ACK, ACV e ACA. TA 3.1c legge le prime cinque sezioni
di ogni file, qualunque sia il loro nome ([MENUENTRY1] è la convenzione, ma
anche [ENTRY0] funziona); una sesta sezione non viene mai letta. Una voce il
cui UNITMENU non nomina alcuna unità, o nessuna unità con Builder=1, viene
ignorata, così come una il cui UNITNAME non nomina alcuna unità. MENU e
BUTTON sono limitati a 8 bit, e il menu di un costruttore (la sua lista
[CANBUILD] più le aggiunte da download/) contiene al massimo 31 unità.
Important
download/*.tdf aggiunge voci al menu di costruzione, non sostituisce
nulla. Se lo slot che scegli entra in conflitto con una voce esistente,
il comportamento del motore è imprevedibile: di solito vince la voce
caricata per ultima, ma l'ordine di caricamento dei .ufo non è garantito
su tutte le piattaforme. Per le mod pensate per convivere, scegli una
pagina MENU alta (4 o 5).
È questo il punto d'aggancio additivo per le mod: ti permette di distribuire
un singolo .ufo senza creare una tua copia modificata del sidedata.tdf da
50 KB. Vedi il tutorial sul modding
per un esempio completo, dall'inizio alla fine.
OTA — metadati della mappa
Un .ota accompagna ogni .tnt e contiene tutto ciò che serve al motore per
far svolgere una partita sulla mappa (anziché per disegnarne il terreno):
[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 legge il .ota corrispondente e disegna indicatori
numerati in ogni posizione di partenza dello schema scelto.
Ecco come il gioco legge gli schemi e le posizioni di partenza. Tutte le viste
di kbot (l'editor di mappe dello studio, la sandbox, l'esploratore di asset,
kbot tnt preview, kbot tnt lint e il Quality Checker) li leggono allo
stesso modo, tramite la vista di gioco degli OTA di kbot-io:
- Gli schemi vengono cercati per nome,
Schema 0,Schema 1, … fino al primo numero mancante. I nomi vengono confrontati ignorando maiuscole e minuscole ([schema 1]conta), ma il numero va scritto in modo semplice:[Schema0]o[Schema 01]non vengono mai trovati, e uno schema dopo un buco nella numerazione (Schema 0,Schema 1,Schema 3) non viene mai letto.SCHEMACOUNTviene ignorato. - Le partite in schermaglia e in multigiocatore scelgono uno schema in base a
Typee al numero di posizioni di partenza, non alla posizione nel file. Sono idonei solo gli schemi daNetwork 1aNetwork 4(confrontati ignorando maiuscole e minuscole) con almeno una posizione di partenza. Per N giocatori il gioco preferisce l'ultimo schema idoneo con esattamente N posizioni di partenza, altrimenti quello che ne ha di più. Una missione della campagna sceglie in base alla difficoltà (Easy,Medium,Hard).numplayersè solo testo mostrato nella lobby (2, 4,2-8eAnysi caricano tutti). - Le posizioni di partenza sono le voci di
[specials]il cuispecialwhatinizia conStartPos(ignorando maiuscole e minuscole).StartPosNè lo slot del giocatore N-1, ancheStartPos0è lo slot 0, e una voce senza numero dopoStartPosprende per sé il numero successivo (il primo è 1).XPoseZPossono pixel della mappa, limitati a 16 bit. - Le chiavi mancanti hanno valori predefiniti, non zeri: un
missiondescriptionmancante mostra "No description available", unmaxunitsmancante (solo nelle campagne) significa 200, e un elemento piazzato in anticipo ([features]) senzaXPosoZPosviene saltato, quindi uno nella colonna o nella riga 0 ha bisogno di uno0esplicito.
Note
L'editor di mappe dello studio modifica direttamente il .ota di una
mappa. Il salvataggio cambia solo i valori che hai modificato (e
aggiunge o rimuove gli schemi e le posizioni di partenza che hai aggiunto o
rimosso); tutto il resto (chiavi di vittoria e di trigger, useonlyunits,
[units], [features], altri [specials], frazioni come killmul=0.5,
commenti) viene riscritto così com'era. Rimuovere uno schema o una
posizione di partenza riscrive il file nella disposizione di kbot-io (stesso
contenuto, commenti eliminati) e rinumera gli schemi successivi in modo che
il gioco li trovi ancora. Un .ota che kbot non riesce a leggere viene
mostrato con il suo errore e lasciato invariato al salvataggio, e il testo
inserito nelle finestre di dialogo che contiene ;, // o /* viene
rifiutato. Lo stesso vale
per un salvataggio che farebbe leggere al gioco uno schema che ora salta:
uno schema aggiunto prende il numero libero più basso, quindi in un
file con [Schema 0] e [Schema 2] il nuovo [Schema 1] metterebbe in
gioco [Schema 2]; l'errore indica la sezione da rinominare o rimuovere.
Una frazione troppo grande per essere rappresentata (killmul=1e999, che
il gioco legge come infinito) viene mostrata come il numero più grande
possibile e conservata così come è scritta, a meno che tu non la cambi. Il
gioco prende il livello del mare dall'intestazione del .tnt; l'editor
mantiene allineata una chiave sealevel= esistente, ma non ne aggiunge mai
una.
Esempio svolto — unità minima
Un FBI "finto", completo e funzionante, per una torretta fissa:
[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;
}
}
Per farne un componente aggiuntivo completo dovresti distribuire:
mymod/
├── units/myturret.fbi
├── objects3d/myturret.3do
├── scripts/MYTURRET.cob
├── features/corpses/myturret.tdf # contains [MyTurret_Dead]
└── unitpics/MYTURRET.PCX
…e poi impacchettare la directory in un HPI:
kbot hpi pack ./mymod --target myturret.ufo
Insidie
Warning
Ogni valore deve terminare con ;. Un punto e virgola mancante non
genera errori: il parser unisce silenziosamente il valore alla riga
successiva, con statistiche sconcertanti (un MaxDamage=3000 seguito da un
Description=... non terminato dà un'unità con 30.000 punti ferita e
senza tooltip).
- Le chiavi non distinguono tra maiuscole e minuscole, i valori sì.
Side=armcorrisponde alla logica di classificazione delle unità per ARM, ma le mod che cambiano fazione al volo conif (Side == "ARM")tramite ricerche per uguaglianza di stringhe si rompono. - I valori delle liste sono separati da spazi
(
Category=COMMANDER MOBILE WEAPON), non da virgole. Il motore spezza la lista a ogni carattere di spaziatura. - Alcuni campi degli OTA usano però le virgole:
numplayers=2,4,6,8,10. Non c'è un'unica convenzione per il separatore delle liste, e il gioco non analizza affattonumplayers: ne mostra solo il testo. - Le sezioni annidate non hanno un limite formale di profondità, ma
Cavedog non ha mai distribuito nulla con più di 3 livelli. Gli editor che
presuppongono 2 livelli falliscono su una manciata di TDF delle armi con
annidamenti in stile
[WEAPON][DAMAGE][category]. - I campi booleani sono interi (
canmove=1,canstop=0), nontrue/false. Il motore accetta solo1/0. - I file
.otahanno spesso mojibake UTF-8 nelle descrizioni delle missioni (virgolette tipografiche di Word, ecc.). Il motore li visualizza con la codepage Windows-1252 e mostrerà come quadratini ("tofu") qualsiasi carattere al di fuori di essa.
Dimensioni tipiche
| Elemento | Intervallo osservato nei contenuti Cavedog |
|---|---|
| FBI di un'unità | 1–4 KB (comandante: ~3 KB; carro leggero: ~1,5 KB) |
| TDF di un singolo elemento | 200 B – 1 KB |
| TDF di un'arma | 0,5–3 KB per sezione [WEAPON] |
| File OTA | 1–8 KB |
gamedata/sidedata.tdf |
~50 KB (per lo più la disposizione dell'HUD) |
gamedata/sound.tdf |
~20 KB |
| FBI totali in TA + CC | ~250 file |
Appendice A — Dizionario dei campi FBI
Ogni campo che si trova comunemente in units/*.fbi, raggruppato per scopo.
Legenda della colonna Tipo: str = identificatore/stringa; int =
intero; float = numero in virgola mobile; bool = 0/1; list = token
separati da spazi bianchi; enum = piccolo intero con significati
documentati.
I campi non elencati qui sono residui dell'editor (UnitNumber,
Copyright) oppure non sono documentati. Il motore ignora silenziosamente le
chiavi sconosciute.
Identità e visualizzazione
| Campo | Tipo | Note |
|---|---|---|
UnitName |
str | Chiave di ricerca principale. Vi fanno riferimento altre configurazioni, l'IA, l'OTA, i menu di costruzione. |
Side |
str | ARM o CORE (TA), Aramon/Taros/Veruna/Zhon (TA:K). Corrisponde a una [SIDE<N>] in gamedata/sidedata.tdf. |
Objectname |
str | Nome di base per la mesh .3do, lo script .cob e il ritratto unitpics/*.pcx dell'unità. |
Designation |
str | Il "codice del tipo" mostrato nel pannello informativo dell'unità (ad es. ARM-WM per il comandante Arm). |
Name |
str | Nome breve mostrato sopra l'unità. |
Description |
str | Testo del tooltip mostrato sul pulsante di costruzione e nel pannello informativo dell'unità. |
GermanName / FrenchName / SpanishName / ItalianName / JapaneseName / PigLatinName |
str | Nomi localizzati. Usati in base alla versione localizzata del gioco. |
GermanDescription / FrenchDescription / SpanishDescription / ItalianDescription / JapaneseDescription / PigLatinDescription |
str | Testo del tooltip localizzato. |
Version |
int | Versione dello schema tenuta dall'editor. Sempre 1 o 2 nei contenuti originali. |
UnitNumber |
int | ID usato solo dall'editor. Ignorato durante il gioco. |
Copyright |
str | Stringa di copyright in formato libero. Ignorata. |
TEDClass |
str | Classificazione dell'editor TAE (KBOT, TANK, COMMANDER, …). Puramente estetica. |
Economia e costruzione
| Campo | Tipo | Note |
|---|---|---|
BuildCostMetal |
int | Metallo necessario per costruire questa unità. |
BuildCostEnergy |
int | Energia necessaria per costruire questa unità. |
BuildTime |
int | Potenza di costruzione × secondi. Il motore lo divide per il WorkerTime del costruttore per ottenere il tempo di costruzione reale. |
WorkerTime |
int | Potenza di costruzione erogata da questa unità quando fa da costruttore. |
EnergyUse |
int | Energia consumata per tick quando è attiva. |
EnergyMake |
int | Energia prodotta per tick quando è attiva. |
MetalUse |
int | Metallo consumato per tick. |
MetalMake |
int | Metallo prodotto per tick. |
EnergyStorage |
int | Capacità di immagazzinamento. Vuoto per le unità che non immagazzinano. |
MetalStorage |
int | Capacità di immagazzinamento. Vuoto per le unità che non immagazzinano. |
MakesMetal |
int | Metallo che un metal maker converte al secondo mentre è acceso e il suo costo in energia è coperto; letto come numero intero (1.9 vale 1). Distinto da MetalMake, che è sempre attivo. |
ExtractsMetal |
float | Metallo che un estrattore rende per ogni unità di metallo della mappa sotto il suo ingombro, mentre è acceso e alimentato. |
TidalGenerator |
bool | La produzione di energia di questa unità varia in proporzione al tidalstrength della mappa. |
WindGenerator |
bool | La produzione varia con l'intervallo di velocità del vento della mappa. |
Builder |
bool | Può costruire altre unità. |
Builddistance |
int | Distanza massima del nano-lathe, in celle da 16 px. |
CanReclamate |
bool | Può recuperare relitti ed elementi. |
CanCapture |
bool | Può catturare le unità nemiche (solo i comandanti). |
ActivateWhenBuilt |
bool | Imposta su acceso l'interruttore "attivo" al termine della costruzione. |
onoffable |
bool | Ha un interruttore acceso/spento che il giocatore può azionare. |
Combattimento e sopravvivenza
| Campo | Tipo | Note |
|---|---|---|
MaxDamage |
int | Punti ferita. |
Weapon1 / Weapon2 / Weapon3 |
str | Nomi di sezioni di armi in weapons/*.tdf. Fino a 3 armi. |
wpri_badTargetCategory |
list | Categorie contro cui l'arma primaria rende poco (priorità ridotta). |
wsec_badTargetCategory |
list | Lo stesso per l'arma secondaria. |
BadTargetCategory |
list | Bersagli che l'unità nel suo complesso evita. |
NoChaseCategory |
list | Bersagli che l'unità non insegue (spara solo se sono a portata). |
canattack |
bool | Può sparare con le armi. |
candgun |
bool | Può sparare manualmente con la sua terza arma (il D-gun del comandante). |
commandfire |
bool | Ogni colpo deve essere comandato dal giocatore. |
ExplodeAs |
str | Nome dell'arma per l'esplosione alla morte (in weapons/*.tdf). |
SelfDestructAs |
str | Nome dell'arma per l'esplosione di autodistruzione. |
Corpse |
str | Nome della sezione [FEATURE] in features/**/*.tdf per il relitto lasciato a terra. |
HealTime |
int | Secondi per ripararsi completamente su una piattaforma di riparazione. |
DamageModifier |
float | Moltiplicatore applicato al danno in arrivo. <1 = resistente. |
ImmuneToParalyzer |
bool | Ignora le armi paralizzanti. |
HideDamage |
bool | Nasconde al nemico la barra del danno. |
kamikaze |
bool | Detona al contatto invece di sparare. |
firestandorders |
bool | Ha l'interruttore dell'ordine di fuoco permanente. |
StandingFireOrder |
enum | Atteggiamento di fuoco predefinito: 0 = non sparare, 1 = rispondi al fuoco, 2 = fuoco a volontà. Una chiave mancante vale 2; un valore esplicito mantiene i suoi due bit bassi, quindi 0 è davvero Hold Fire (non sparare). |
mobilestandorders |
bool | Ha l'interruttore dell'ordine di movimento permanente. |
StandingMoveOrder |
enum | Atteggiamento di movimento predefinito: 0 = mantieni la posizione, 1 = manovra, 2 = vaga. Una chiave mancante vale 2; un valore esplicito mantiene i suoi due bit bassi (lo 0 dei comandanti è Hold Position, mantieni la posizione). |
ShootMe |
bool | Suggerimento per gli avversari IA/computer: dare priorità a questa unità come bersaglio. |
Commander |
bool | La contrassegna come unità comandante (la partita è persa quando viene uccisa). |
Movimento
| Campo | Tipo | Note |
|---|---|---|
MaxVelocity |
float | Velocità massima in unità del mondo per tick. |
Acceleration |
float | Velocità guadagnata per tick. |
BrakeRate |
float | Velocità persa per tick in frenata. |
TurnRate |
int | Velocità di rotazione in unità di 2π/65536 per tick. |
MaxSlope |
int | Pendenza del terreno più ripida che l'unità può affrontare. Predefinito 255. |
MaxWaterDepth |
int | Acqua più profonda in cui l'unità può entrare. 0 = solo terraferma; predefinito 10000. |
MinWaterDepth |
int | Profondità minima dell'acqua (solo navi). Predefinito -10000. |
MovementClass |
str | Nome della classe in gamedata/moveinfo.tdf ([CLASS0]–[CLASS31]). Quando il nome corrisponde a una classe, l'ingombro, le profondità dell'acqua e le pendenze della classe sostituiscono le chiavi dell'FBI stesso (vedi Gamedata). |
SteeringMode |
enum | 0/1/2: prima gira e poi si muove, oppure in curva, oppure istantaneo. |
Upright |
bool | Mostra l'unità in piedi (kbot) o in piano (veicoli). |
BankScale |
float | Quanto l'unità si inclina lateralmente in virata (aerei). Predefinito 1; con uno 0 esplicito non si inclina mai. |
PitchScale |
float | Quanto l'unità beccheggia quando accelera. |
Scale |
float | Moltiplicatore della scala visiva (1.0 = normale). |
CanFly |
bool | Flag degli aerei. |
crusisealt |
int | Quota di crociera per le unità volanti. |
attackrunlength |
int | Distanza per i passaggi di mitragliamento di VTOL e bombardieri. |
HoverAttack |
bool | L'aereo resta sospeso in volo mentre attacca (cannoniere). |
floater |
bool | Galleggia sulla superficie dell'acqua. |
canmove |
bool | L'unità può muoversi. |
canpatrol |
bool | L'ordine di pattuglia è abilitato. |
canstop |
bool | L'ordine di stop è abilitato. |
canguard |
bool | L'ordine di guardia è abilitato. |
canload |
bool | Può caricare unità da trasportare. |
transportsize |
int | Classe di dimensione per i controlli di carico dei trasporti. |
transportmaxunits / TransMaxUnits |
int | Capacità delle unità da trasporto. |
manuverleashlength (anche maneuverleashlength) |
int | Quanto lontano dalla sua posizione di stazionamento l'unità si spingerà in manovra. |
BadSlope |
int | Pendenza alla quale il movimento rallenta senza essere bloccato. |
BuildAngle |
int | Pendenza massima su cui questa unità può essere costruita. |
Sensori
| Campo | Tipo | Note |
|---|---|---|
SightDistance |
int | Raggio della linea di vista (LOS) in celle da 16 px. |
RadarDistance |
int | Raggio di copertura radar. 0 = nessun radar. |
SonarDistance |
int | Raggio di copertura sonar. |
RadarDistanceJam |
int | Raggio entro cui l'unità disturba i radar nemici. |
Stealth |
bool | L'unità non compare sui radar nemici. |
CloakCost |
int | Energia per tick per restare occultata da ferma. |
CloakCostMoving |
int | Energia per tick per restare occultata in movimento. |
mincloakdistance |
int | L'occultamento fallisce quando un nemico è entro questo numero di celle. |
Menu di costruzione e ingombro
| Campo | Tipo | Note |
|---|---|---|
Bmcode |
int | Codice del menu di costruzione. Lascialo a 1 per le unità costruibili; 0 per gli edifici che non compaiono. |
FootprintX / FootprintZ |
int | Ingombro in celle da 16 px. Deve corrispondere all'ingombro della MovementClass. |
YardMap |
str | Griglia ASCII su più righe (o=aperto, c=chiuso, w=acqua, g=geotermico) che definisce le restrizioni di ogni cella. |
ThreeD |
bool | Viene visualizzata come modello 3D. Sempre 1 per le unità originali. |
ZBuffer |
bool | Usa lo Z-buffer. Sempre 1. |
NoShadow |
bool | Salta il rendering dell'ombra. |
NoAutoFire |
bool | Disattiva il fuoco automatico. |
norestrict |
bool | Salta l'applicazione delle zone vietate. |
IsAirBase |
bool | Gli aerei possono atterrare/ripararsi qui. |
IsFeature |
bool | Va trattata come elemento statico, non come unità. |
Category |
list | Fondamentale. Lista di tag separati da spazi bianchi usata dalla scelta dei bersagli delle armi, dai pesi dell'IA, dai menu di costruzione. Token standard: MOBILE, WEAPON, SURFACE, UNDERWATER, VTOL, KBOT, TANK, SHIP, LEVEL1/LEVEL2/LEVEL3, NOTSUB, NOTAIR, COMMANDER, nomi delle fazioni. |
WaterLine |
int | Profondità alla quale si assesta un'unità galleggiante. |
altfromsealevel |
int | La quota degli aerei si misura dal livello del mare, non dal terreno. |
Audio
| Campo | Tipo | Note |
|---|---|---|
SoundCategory |
str | Nome di una sezione in gamedata/sound.tdf che fornisce i campioni vocali dell'unità. |
[SOUNDS] (sezione annidata) |
sottosezione | Sostituzioni inline per eventi specifici (canselect=…, select1=…, ecc.). |
Varie / poco chiari
| Campo | Tipo | Note |
|---|---|---|
DefaultMissionType |
str | Stato iniziale della missione (Standby, Move, ecc.). |
sortbias |
int | Peso di ordinamento nel menu di costruzione. |
teleporter |
bool | La contrassegna come piattaforma di teletrasporto (Galactic Gate). |
IsAirBase |
bool | Vedi "Menu di costruzione e ingombro": ripetuto per completezza. |
Ovradjust |
bool | Attiva una sostituzione del motore non documentata; la usa solo il comandante. |
ShowPlayerName |
bool | Mostra il nome del giocatore sopra l'unità (solo il comandante). |
MoveRate1 / MoveRate2 |
int | Residui dell'editor. Non usati durante il gioco. |
antiweapons |
bool | Usato dalle piattaforme antiarma (Fortitude, antinucleare). |
Esempi reali nel catalogo di riferimento
L'uso dei campi si impara meglio dagli FBI reali. I repository di riferimento catalogano ogni unità distribuita:
- TA — tutti gli FBI:
buoni esempi "ricchi" sono
ARMCOM(comandante conCommander=1,CloakCost,MaxDamage=3000),ARMSAM(torretta conWeapon1/2/3tutti impostati),ARMBRAWL(aereo conCanFly,crusisealt,BankScale),ARMMEX(estrattore di metallo conExtractsMetal). - TA — tutti i TDF delle armi:
[FLAMETHROWER]perburst/burstrate/firestarter,[NUCLEAR_MISSILE]per i missili guidati a due fasi,[LIGHTNING]per un'arma a raggio. - TA — albero di costruzione di elementi e armi:
ogni registrazione
[MENUENTRY]dell'installazione. - Unità di TA: Kingdoms:
il diverso insieme di campi (
buildcost=con una sola risorsa,damagecategory=,[WEAPONn]inline).ARAKING(Elsin, il monarca di Aramon) eARAARCH(Archer) sono buoni punti di partenza.
Vedi anche
- TNT: fa riferimento a nomi di elementi che si risolvono in
sezioni TDF
[FEATURE]. - 3DO, COB: richiamati dall'
Objectnamedell'FBI. - GAF: richiamato dal
seqnamedegli elementi e dall'explosiongafdelle armi. - TDF di gamedata:
moveinfo.tdf,sound.tdf,sidedata.tdf, richiamati dai campi dell'FBI. - Audio: come
SoundCategorysi risolve in file WAV. - Glossario: fazione (side), ingombro (footprint), yardmap, schema.