You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A teaching handbook for writing mods against vanilla Tribes 2, patched build 25034 (retail v1.05).
It merges two bodies of knowledge: the surviving community modding tutorials (2002–2003 era) and
this project's client analysis of the V12 Engine build 25034 and the shipped game data.
The V12 ("Darkstar") engine as it actually shipped
Engine C++ modification (you cannot rebuild Tribes2.exe)
TorqueScript, datablocks, packages, the mod-path stack
Reimplementation projects
base/ and Classic/ game data as the reference material
The patches' auth protocol, crypto, and account systems
What the TribesNEXT and RC2a patches change on top — section 07, and an "Under the community patches" section on each affected page
Sections 01–06 describe vanilla. Nobody runs vanilla in 2026 — the WON servers died in 2008 — but it
is the substrate the patches sit on, and the great majority of modding is identical on both. Where a patch
changes something, the page says so at the end, and
section 07 covers the patches in full.
Everything here is written against the engine as it exists on disk. Where a statement comes from
reading the binary or the shipped scripts, it is marked. Where it is an inference, it says so.
Evidence markers
Every non-obvious claim carries one of these:
Marker
Meaning
[binary]
Confirmed by disassembly or string analysis of Tribes2.exe, or of a patch DLL
[dso-verified]
Confirmed empirically — parsed/executed against real .cs.dso files and checked against known .cs source
[script]
Confirmed by reading the shipped V12 .cs in base/scripts.vl2 — file and line cited
[patch-script]
Confirmed by reading a community patch's own shipped .cs
[support-script]
Confirmed by reading the community support pack's own shipped .cs
[mod-script]
Confirmed by reading a documented community mod's own shipped files
[bones]
From NecroBones' Tribes 2 Mapping Tutorial — community practice, attributed
[community]
From the 2002–2003 tutorial corpus, or a mod's own readme; widely relied on, not independently confirmed against code
[inferred]
Reasoned from the above; plausible but unverified
If you find a claim without a marker, treat it as ordinary prose, not a load-bearing fact.
Code blocks are tagged php, deliberately
TorqueScript has no highlighter of its own. Every TorqueScript block in this handbook is fenced as
```php because PHP's highlighter is the closest available fit:
php
cs (C#)
$global
Highlighted as a variable — PHP's native sigil
Unrecognised
%local
Not recognised
Reads as the modulo operator
function, new, if, switch, return
Keywords
Keywords
// comments
Correct
Correct
Neither handles %local, but PHP gets $global right and loses nothing else, so it renders better on
GitHub, MkDocs, and Docusaurus alike. Please do not "correct" these to cs.
Non-TorqueScript blocks use their real language — bash, bat, powershell, ini, mermaid — and
untagged fences are plain output, file listings, or directory trees.
Learning path
Read in order the first time. After that, use it as a reference.
flowchart TD
A["01 · Getting Started<br/>install anatomy, tools, first mod"] --> B["02 · Engine Model<br/>mod paths, boot order, TorqueScript,<br/>SimObjects, datablocks, packages"]
B --> C["03 · Content Recipes<br/>weapons, armors, vehicles,<br/>packs, turrets, effects"]
B --> D["04 · Interface<br/>GUI, HUD, messaging"]
B --> E["05 · Gameplay Systems<br/>gametypes, missions, AI"]
C --> F["06 · Shipping<br/>packaging, hosting, debugging"]
D --> F
E --> F
E --> MAP["10–16 · Mapping<br/>the in-game editor, terrain,<br/>lighting, shipping a map"]
MAP --> BONES["17–20 · Bones' Tutorial<br/>community mapping practice"]
BONES --> F
F --> P["07 · Community Patches<br/>what TribesNEXT and RC2a<br/>change on top of all the above"]
P --> LX["21 · Linux<br/>the Loki Software port,<br/>and what's platform-aware in the shared code"]
LX --> GT["22–30 · Gametypes<br/>base and Classic, side by side,<br/>ending with Team Rabbit 2"]
GT --> BR["31 · The Base Ruleset<br/>gravity, armours, gametypes<br/>and prefs as 25034 shipped them"]
BR --> S["09 · The Support Pack<br/>the community script library<br/>and module system"]
S --> BD["32–36 · Base derivatives<br/>combat mods forked directly<br/>from vanilla base"]
BD --> CL["37–40 · Classic<br/>the ruleset that became the game,<br/>and its optional-rule system"]
CL --> CD["41–44 · Classic derivatives<br/>combat mods forked<br/>from Classic"]
CD --> EV["45–47 · Evolution Admin Mod<br/>generated packages, leased admin,<br/>and a ten-year-old bug"]
EV --> TS["48–50 · TacoServer<br/>the modern codebase:<br/>lineage, features, running it"]
TS --> OC["51–57 · Other combat<br/>server-side mods<br/>least to most deviated"]
OC --> M["58 · The Construction Mod<br/>a total conversion, studied:<br/>what it did and why"]
M --> FK["59–68 · Construction forks<br/>ten derivatives of 0.69a,<br/>compared against the base"]
FK --> CC["69–71 · Combat Construction Mods<br/>forks that put PvP<br/>back into building"]
CC --> CM["72–77 · Client Mods<br/>cosmetic, HUD, and utility<br/>mods with no server ruleset"]
CM --> G["Reference<br/>console functions, class tree,<br/>file formats, tutorial index"]
Loading
Sections 07–09, 21–71 and 72–77 are context rather than instruction — what your users are
running, what libraries exist, and how the mods that shaped the live game were built. Reference carries
no number at all — see below.
The three things that trip up every new Tribes 2 modder
Read these before anything else — they explain most "why doesn't my change take effect?" questions.
Stale .dso files shadow your edits. The engine compiles foo.cs to foo.cs.dso and prefers the
compiled form on later runs [binary] (Compiling %s... / Loading compiled script %s.). Sierra's own
Classic_LAN.bat deletes every .dso under base/scripts/ and Classic/scripts/ before launching
[script]. Do the same. See Debugging.
You override by packaging, not by editing. Copying base/scripts/ into your mod and hacking it
works but makes your mod unmergeable with every other mod. The engine has a first-class override
mechanism — package + Parent:: — and it is the correct tool. See Packages.
Server and client are separate script worlds even in single player. Putting a datablock in a
client-only file, or calling a server function from a client script, fails silently or throws a console
error. See Client/server split.
The Loki dedicated server, $platform-aware code shared with Windows, and Sam Lantinga's fingerprints in console_start.cs
22–30 · Gametypes
Base and Classic, gametype by gametype — what Classic shadowed, what it left alone, and what it patched
around without shadowing. Ends with Team Rabbit 2, a total-conversion sport mod shipped in its own
archives.
Secondary — dozens of combat, Construction, and client mods, credited and fingerprinted on their own pages
† Not included in this repository. These sit alongside it in the authoring workspace; the paths are
recorded so claims can be traced back to their source, not so they can be clicked.
The community tutorial corpus is the origin of a great deal of practical Tribes 2 modding knowledge, and
this handbook preserves its recipes. It also contains guesses and errors that circulated for twenty years;
where the shipped scripts contradict a tutorial, this handbook follows the scripts and says so.