Skip to content
LordBlacksun edited this page Sep 9, 2026 · 1 revision

Starlancer (2000) — Engine Reference Wiki

Community reverse-engineering reference for Starlancer (Digital Anvil / Microsoft, 2000; developed by Warthog). This is original analysis — addresses, structure, and inferred purpose recovered by static reverse-engineering. It contains no game source code or assets.

Provenance & legal. Findings come from static analysis (Ghidra decompilation) of a legally owned copy of the game. We document behaviour, addresses, and formats; we do not redistribute the game's code, binaries, or assets. See Reverse-Engineering Notes.

What the engine is

Starlancer is a 32-bit Win32 space-combat sim built as a thin game layer over late-1990s middleware. The stack (all verified from imports + code):

Layer Middleware How it's identified
3D renderer Surrender (SR_*) srAPI.cpp/surrenderlib, srddraw.dll, srmemory.dll, SR_* calls
2D / sprites / HUD overlay WinVFX winvfx8.dll / winvfx16.dll, VFX_* entry points
Audio Miles Sound System (mss32) AIL_*; providers Miles/Aureal A3D/EAX/RSX
Video Bink (binkw32) BinkOpen/DoFrame/CopyToBuffer/…
Input DirectInput 7 DirectInputCreateEx(…,0x700,…), force-feedback *.frc
Multiplayer DirectPlay DPInit, DPSYS_*, TCP/IP + MSN Zone
Backend DirectDraw7 + Direct3D7 dynamically loaded via srddraw.dll; DX≥7 enforced at startup

The build retains verbose diagnostics that leak the source tree: lancer\game\*.cpp (hud.cpp, interface.cpp, Create.cpp, gameobj.cpp, shield.cpp, shieldfx.cpp, explode.cpp, wgate.cpp, deathmatch.cpp, gameflow.cpp, bigfile.cpp, DPBits.cpp, DPSession.cpp), lancer\interface\loadout, and lancer\surrender\surrenderlib.

Pages

  • Renderer, Display & Widescreen — Surrender + WinVFX + DirectDraw/D3D7, display-mode selection (dmodes.bin), and the verified targets for a Hor+ widescreen patch.
  • Audio, Video & Input — Miles audio, Bink playback (incl. the boot-movie skip), DirectInput + force-feedback, and the engine's master millisecond clock.
  • Game Objects, Ships & Combat — the "GO" object model, .SHP loading, the stat .BIN record layout, shields/collision/explosions/AI.
  • Missions, AI & Scripting — the .DTE mission format (RefPack container fully decodeddte_parse.py reads all 44 missions: directory, ships, triggers, script), the trigger VM and the TT_* condition set, mission lifecycle.
    • .DTE Scripting Reference — the complete trigger / Executor command / AI-code / opcode tables (fused with Captain Foster / Starlancer ME's research).
    • Campaign Mission Flow — the 24-mission progression rule, the in-game↔.dte numbering map, and where Foster's Last Stand / Dark Reign sit.
  • Networking & Save Formats — DirectPlay, IFF saved games, profile.bin, .fm8 pilots, key/joystick config.
  • Reverse-Engineering Notes — provenance, method, coverage, caveats.

Modern-Windows fixes — boot-video skip, DirectDraw/D3D7 wrappers, resolution/widescreen, DRM, audio and more (fused with this RE) are catalogued in the repo's docs/modern-fixes.md.

Game Reference

Beyond the engine internals, this wiki also carries a Game Reference — the ships, characters, campaign, factions and weapons of Starlancer. Unlike the RE pages above, this is not original analysis: it is factual game data compiled from the community-run Starlancer Wiki on Fandom under CC BY-SA 3.0, reorganized here and cross-checked against our RE (those pages are offered under the same CC BY-SA 3.0 terms).

Conventions

  • Addresses are VA/RVA for ImageBase 0x400000 in the analyzed build (decrypted image, 1,151,021 bytes, OEP 0x004D1210, 2,200 functions).
  • The binary is stripped: functions are FUN_<addr> and globals DAT_<addr>; names here are Ghidra placeholders. Purposes are marked [verified] (read in code) or [inferred].

Clone this wiki locally