File formats
Every extension in a vanilla build-25034 install, with counts from a survey across all 19 .vl2 archives.
Counts
| Extension | Count | Format |
|---|---|---|
.wav |
2962 | RIFF WAVE audio — PCM and ADPCM, mostly Miles-encoded |
.png |
2747 | PNG image |
.bm8 |
2477 | 8-bit indexed bitmap, Tribes 2-specific — the low-end texture set |
.dsq |
428 | Dynamix animation Sequence |
.dif |
325 | Dynamix Interior Format — building interiors |
.cs |
290 | TorqueScript source |
.dts |
244 | Dynamix Three Space — models |
.gui |
136 | TorqueScript GUI definition |
.dml |
89 | DyMaterial List — texture/material lists |
.ter |
86 | Dynamix terrain heightfield |
.mis |
84 | Mission file (TorqueScript) |
.jpg |
82 | JPEG image |
.spn |
81 | Spawn graph for spawn spheres |
.ifl |
73 | Image List — animated frame sequence |
.gft |
58 | Tribes 2 GUI font (bitmap font) |
.nav |
26 | AI navigation graph |
.bmp |
17 | Windows bitmap — loading screens |
.hfl |
8 | Help File — markup for the mission editor’s docs |
.ifr |
8 | Immersion Force-feedback Resource |
.txt |
5 | Plain text — EULA, readmes |
.avi |
1 | AVI video — the intro cinematic |
.log |
1 | A build artefact left in base.vl2 |
.sfk |
1 | Unknown — a singleton with no public Torque reference |
Plus generated files not shipped: .dso (compiled script) and .ml (per-mission lightmaps).
The ones you will author or edit
.cs — TorqueScript source
Plain text. Compiled to .cs.dso on first load; the compiled form is preferred afterwards [binary].
See TorqueScript.
.dso — compiled script
The bytecode form. Generated by the engine, or in bulk by compile(fileName) / the -prepbuild launch
mode [script].
Stale .dso files shadowing edited .cs files is the single most common modding problem. Sierra’s
own launchers delete them all before every run [script]. See
Packaging.
For the format itself — header, string/float tables, and the full opcode set — see
TorqueScript — V12 Compiler. For reading a .dso back to
.cs, including a byte-level worked example and a client-side decompiler tool, see
TorqueScript — V12 Decompiler.
.gui — GUI definition
TorqueScript, executed like any script. A nested chain of new statements. Written by the in-game GUI
editor, which stamps //--- OBJECT WRITE BEGIN --- at the top. See
GUI system.
.mis — mission
TorqueScript, executed by loadMissionStage2. One nested new SimGroup(MissionGroup) declaration plus a
block of metadata comments that the engine parses as data — // MissionTypes = , // DisplayName = ,
and the quote and string blocks. See Missions.
.vl2 — archive
A standard PKZIP archive with a renamed extension. Magic bytes at offset 0 are 50 4B 03 04
[binary]. “VL2” is Dynamix branding for “Volume v2”.
| Property | Vanilla | TribesNEXT t2csri.vl2 |
|---|---|---|
| Compression | Stored (method 0, no compression) | Deflate for .cs, Stored for .cs.dso and fonts |
| CRC32 | Present per entry | Present |
| Timestamps | 2000-01-01, and 2002-09/10/11 clusters |
2025-… |
Any zip tool reads and writes them. Paths inside use forward slashes and are relative to the mod directory. See Packaging.
The 19 archives in base/:
audio.vl2 base.vl2 badlands.vl2 Classic_maps_v1.vl2
desert.vl2 ice.vl2 interiors.vl2 lava.vl2
lush.vl2 missions.vl2 scripts.vl2 shapes.vl2
skins.vl2 textures.vl2 voice.vl2
TR2final093-extras.vl2 TR2final105-client.vl2 TR2final105-server.vl2
zz_Classic_client_v1.vl2
The zz_ prefix on the last is a load-order trick — see
Mod paths and overrides.
Art formats
.dts — Dynamix Three Space shape
The model format: geometry, materials, nodes (mount points), detail levels, and optionally embedded sequences. Period tooling was a 3ds Max exporter. Modern viewers exist; authoring is difficult.
Most mods reuse shipped shapes. shapeFile = "weapon_disc.dts" on your own datablock costs nothing
and works everywhere.
.dsq — Dynamix Sequence
Animation data, kept separate from the shape so one skeleton can share many animations. Bound to a shape
by a TSShapeConstructor datablock:
sequence0 = "light_male_root.dsq root";
See Armors.
.dif — Dynamix Interior Format
Building interiors — the constructed geometry inside bases. Placed by InteriorInstance objects in a
.mis. The engine can view one directly:
Tribes2.exe MyBuilding.dif
which sets $LaunchMode = "InteriorView" [script].
.ter — terrain
The heightfield, referenced by TerrainBlock.terrainFile in a .mis. Authored in the in-game terrain
editor.
.dml — DyMaterial List
A list of textures forming a material set, used by terrain and by animated surfaces.
.ifl — Image List
A frame sequence for animated textures — a text file listing image names and durations.
.png / .jpg / .bmp / .bm8
Ordinary images, except .bm8 — an 8-bit paletted Tribes 2 format used to supply a low-memory texture
set for period hardware. There are 2477 of them, roughly paralleling the .png set. Replacing a texture
usually means replacing both.
.gft — GUI font
Bitmap font format. console_start.cs references fonts by name (fontType = "Univers Condensed"), which
resolve to .gft files.
Data formats
.nav — navigation graph
The AI’s map of where it can go. Generated, not authored:
Tribes2.exe -navBuild <MissionName> <MissionType>
A map without one has no bot support — buildMissionList tests for the file’s existence [script].
See AI and bots.
.spn — spawn graph
The spawn graph for spawn spheres, generated by:
Tribes2.exe -spnBuild <MissionName> <MissionType>
Placing spawn spheres in the editor is not sufficient — the graph is a separate build step, and a map without one has spheres that silently do nothing [bones]. See 15 · Lighting, navigation & spawn data.
.ml — lightmap
Per-mission precomputed lighting, written as lighting/<mission>_<crc>.ml [binary]. The CRC is the
mission file’s — which is why editing a .mis invalidates cached lighting. Regenerate with:
Tribes2.exe -light <MissionName>
.hfl — help file
Markup documents for the mission editor’s in-game help, using <font:> and <a:> tags. Eight ship in
scripts.vl2’s help/ directory. Same markup family as GuiMLTextCtrl — see
GUI system.
.ifr — Immersion Force-feedback Resource
Force-feedback effect data for Immersion TouchSense hardware, referenced by EffectProfile.effectname.
Eight ship in base.vl2’s effects/. You do not need to author these — an AudioProfile with no
effect field works fine. See Audio.
.jrn — journal
Recorded input event streams from -jsave, replayable with -jload / -jplay. See
Debugging.
Where each type lives
The category directory is part of the lookup path — a datablock saying shapeFile = "foo.dts" resolves to
<modpath>/shapes/foo.dts:
| Category directory | Holds |
|---|---|
scripts/ |
.cs |
gui/ |
.gui and interface bitmaps |
shapes/ |
.dts, .dsq |
textures/ |
.png, .jpg, .bm8, .dml, .ifl |
interiors/ |
.dif |
terrains/ |
.ter, .nav, .spn |
missions/ |
.mis |
audio/ |
.wav |
voice/<pack>/ |
voice .wav |
music/ |
music |
lighting/ |
.ml (generated) |
prefs/ |
preference .cs (write target) |
help/ |
.hfl |
effects/ |
.ifr |
Under the community patches
Every vanilla format above is still read. Two additions and one deprecation.
.sdft — the replacement font format
The QoL patch ships six fonts in t2csri.vl2/fonts/ in Torque’s modern .sdft format, replacing the
vanilla .gft bitmap fonts:
Sui Generis.sdft
Univers.sdft
Univers Bold.sdft
Univers Condensed.sdft
Univers Condensed Bold.sdft
Univers italic.sdft
Every vanilla font name is rerouted to them through $Font::Substitute [patch-script], so .gft
files remain on disk and are simply no longer reached for those names.
You do not author these. If you ship a .gui, it asks for a font by name and gets whatever the
substitution table maps it to. See GUI system.
RC2a keeps the vanilla .gft fonts.
.rb — Ruby, RC2a only
t2csri/crypto.rb and t2csri/certstore.rb are Ruby 1.9 source, read by rubyExec() and evaluated in the
embedded interpreter [patch-script]. Both are GPL-3-or-later. Removed entirely in the QoL rewrite.
Not a game format — the engine never sees them; a TorqueScript FileObject reads them as text and hands
the contents to rubyEval.
.ifr — inert on the QoL patch
Immersion force-feedback resources still ship in base.vl2’s effects/ and EffectProfile datablocks
still reference them, but TribesNEXT’s IFC22.dll stubs the Immersion exports [binary], so nothing
plays. RC2a keeps the vendor DLL, so they still work there.
.vl2 — unchanged
Both patch archives are ordinary PKZIP. The QoL archive mixes methods — Deflate for .cs, Stored for
.cs.dso and fonts [binary] — confirming that compression choice is free. Vanilla archives are all
Stored.
.ini — the support pack’s config
Not an engine format. The community support pack writes
prefs/autoload.ini (load order and per-script enable/disable, ; for comments) and prefs/autoload.log
[support-script]. Both are plain text parsed by TorqueScript with FileObject, not by the engine.
The pack’s // #directive = value script headers are the same idea — metadata carried in comments the
compiler ignores, parsed by script. Vanilla uses the technique for // MissionTypes = and
// DisplayName = [script]; see The autoload system.
Related
- Packaging — building
.vl2and handling.dso - Install anatomy — where the archives sit
- Missions —
.misand its companions - 07 · Community Patches — the patch archives