Skip to content

Campaign Mission Flow

LordBlacksun edited this page Sep 9, 2026 · 1 revision

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 the PlayFostersLastStand Executor command (0x21 0x3F, impl 0x00459740).
  • Dark Reign = game 18 (mission21.dte) — wingman line "MOOSE: I'm getting some activity from the dark reign", plus NAV 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.dte on replay (flag DAT_00587CDC == 1, load line 86341). [verified]
  • Slot 3 → mission311.dte at one load path (line 86343) — so mission3.dte appears unused / superseded. A cutting‑room‑floor candidate alongside the non‑existent files 12, 13, 17, 22.
  • mission191 / mission271 match mission19 / mission27 by content (variant files); exact load condition open. [inferred]

Tables (indexed by mission number)

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.

Open items

Official mission titles (resolve DAT_004E5C78FUN_00491030 → the string resource); the exact load conditions for mission191 / mission271 and mission3 vs mission311.

See also: Missions, AI & Scripting · .DTE Scripting Reference.

Clone this wiki locally