-
Notifications
You must be signed in to change notification settings - Fork 0
Home
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.
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.
-
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,
.SHPloading, the stat.BINrecord layout, shields/collision/explosions/AI. -
Missions, AI & Scripting — the
.DTEmission format (RefPack container fully decoded —dte_parse.pyreads all 44 missions: directory, ships, triggers, script), the trigger VM and theTT_*condition set, mission lifecycle.-
.DTEScripting 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↔
.dtenumbering map, and where Foster's Last Stand / Dark Reign sit.
-
-
Networking & Save Formats — DirectPlay, IFF saved games,
profile.bin,.fm8pilots, 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.
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).
- Fighters · Capital Ships — stat tables and full rosters.
- Characters — the 53-name pilot / officer / ace roster.
- Sol War Campaign — the 24-mission story, fused with the engine-side Campaign Mission Flow (the wiki's mission order independently confirms our RE: Mission 15 = Foster's Last Stand, Mission 18 = Dark Reign).
- Factions, Squadrons & Locations · Weapons & Progression.
- Addresses are VA/RVA for ImageBase
0x400000in the analyzed build (decrypted image, 1,151,021 bytes, OEP0x004D1210, 2,200 functions). - The binary is stripped: functions are
FUN_<addr>and globalsDAT_<addr>; names here are Ghidra placeholders. Purposes are marked [verified] (read in code) or [inferred].