-
Notifications
You must be signed in to change notification settings - Fork 0
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.
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.
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 |
-
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.
-
Slot 25 →
mission251.dteon replay (flagDAT_00587CDC == 1, load line 86341). [verified] -
Slot 3 →
mission311.dteat one load path (line 86343) — somission3.dteappears unused / superseded. A cutting‑room‑floor candidate alongside the non‑existent files 12, 13, 17, 22. -
mission191/mission271matchmission19/mission27by content (variant files); exact load condition open. [inferred]
| Table | Addr | Holds |
|---|---|---|
| Title ID | DAT_004E5C78 |
short → FUN_00491030(id) → title string (resource; not yet resolved) |
| 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.
Official mission titles (resolve DAT_004E5C78 → FUN_00491030 → the string resource); the exact
load conditions for mission191 / mission271 and mission3 vs mission311.
See also: Missions, AI & Scripting · .DTE Scripting Reference.