Campaign Mission Flow - LordBlacksun/Starlancer-OSS GitHub Wiki
Campaign Mission Flow
How Starlancer's 24 single‑player missions are ordered, numbered, and branched — recovered by
static RE of the executable (the progression logic) fused with our .DTE decoder
(per‑mission content). Addresses are VA for ImageBase 0x400000; all facts read from the
decompilation/data — the game is never run. The full 24‑row per‑mission map lives in the repo doc
docs/campaign-flow.md.
Progression rule [verified]
DAT_00562DC8 holds the current mission number, used directly as the %d in
..\missions\mission%d.dte. It starts at 1 and the gameflow advance routine steps it after each
mission with a valid outcome. The advance is a straight line with three skips and an end (switch
at decompiled lines 55856‑55883):
next = current + 1
11 → 14 (files 12, 13 don't exist)
16 → 18 (file 17 doesn't exist)
21 → 23 (file 22 doesn't exist)
28 → 29 (end-game / credits)
There is no performance‑based path divergence — "branching" is done by loading a variant file into the same slot (below), not by reordering missions.
In‑game number ↔ .dte file [verified]
Because four file numbers are skipped, the player‑facing "Mission N" is offset from the file number
(rule: in‑game N = the N‑th existing .dte once files 12/13/17/22 are dropped):
| In‑game | File | In‑game | File | In‑game | File | In‑game | File |
|---|---|---|---|---|---|---|---|
| 1–11 | 1–11 | 12 | 14 | 15 | 18 | 19 | 23 |
| 13 | 15 | 16 | 19 | 20 | 24 | ||
| 14 | 16 | 17 | 20 | 21 | 25 | ||
| 18 | 21 | 22 | 26 | ||||
| 23 | 27 | ||||||
| 24 | 28 |
Story anchors
- Foster's Last Stand = game 15 (
mission18.dte) — the captain rams the Reliant into a Coalition carrier. It's the only mission carrying both Reliant and Yamato flight groups (the carrier hand‑off). Scripted via thePlayFostersLastStandExecutor command (0x21 0x3F, impl0x00459740). - Dark Reign = game 18 (
mission21.dte) — wingman line "MOOSE: I'm getting some activity from the dark reign", plusNAV DARK REIGN, dark‑reign turrets, and an "impressive" camera cutscene. - Arc: Reliant tour (games 1–14) → Foster transition (15) → Yamato tour (16–24); end‑game = 29.
Variants & unused content
- Slot 25 →
mission251.dteon replay (flagDAT_00587CDC == 1, load line 86341). [verified] - Slot 3 has two files. The single-player campaign, flown from the ship's rooms (
vr_rooms), loadsmission%d.dte(line 86719), so its mission 3 ismission3.dte: the player is sent through the proto gate (order 26), fights at it, destroys its power core and escapes back through the tunnel. A multiplayer session that is not a deathmatch map (interface_runreturns "fly" only from the multiplayer session screens;multiplayer_mission0) loadsmission311.dtefor slot 3 (line 86343): it still places the proto gate and its script blows the gate's core (part 20, order 11), but it never sends the player's wing through the gate. Most likely co-op. [load lines and the multiplayer entries verified 2026-10-01, from user ground-truth that the trip through the gate is not inmission311.dte; co-op specifically inferred; this line calledmission3.dteunused until then] The files that do not exist are 12, 13, 17, 22. mission191resemblesmission19but is not the same mission (36 flight groups to 47, with its ownPetrovwing,kamovsandwarpgate), and the campaign never loads it:WinMainnamesmission%d.dtebymission_number, with onlymission251(mission 25's second part) andmission311(mission 3 in a multiplayer game) apart, and nothing setsmission_numberto 191. [verified 2026-09-29; this line said the two files match by content until then]mission271againstmission27: load condition still open.
Tables (indexed by mission number)
| Table | Addr | Holds |
|---|---|---|
| Mission number shown | DAT_004E5C78 |
short: the mission number the player knows, indexed by file number. 0x00475BFC passes it to sprintf; language_string gets only the string id 0x18A. This row said "Title ID → title string" until 2026-09-29 |
| Earned grade | DAT_00562E2A |
the 0–4 outcome grade you got, per mission |
| Bonus‑cutscene flag | DAT_005009BB |
if set & grade == 4, play a reward movie |
Outcome grades (DAT_0052A428): 0 Failure · 1 Partial Failure · 2 Partial Success · 3 Success ·
4 Success + Bonus.
Open items
The load condition for mission271. (Resolved 2026-09-29: DAT_004E5C78 holds the mission numbers
the player sees, not title ids; mission191 is never loaded; mission311 is mission 3 in a
multiplayer game. Resolved 2026-10-01: the single-player mission 3 is mission3.dte, and the
multiplayer game is most likely co-op.)
See also: Missions, AI & Scripting · .DTE Scripting Reference.
Licence — this page is licensed CC BY 4.0: use it in any project, whatever that project's own licence, with attribution. Code and tools in Starlancer-OSS remain GPL-3.0-only, and the Game Reference pages are CC BY-SA 3.0, as they derive from the Starlancer Fandom Wiki. StarLancer, its code and its assets belong to their owners; no licence here covers them.