Documentation

Reference notes on StarLancer (Digital Anvil / Microsoft, 2000; developed by Warthog), on how OpenReliant reimplements its engine, and on the repository's tooling, derived from static analysis of a legally owned copy. The repository holds none of the game's files.

User guide

The user guide covers installing, configuring and playing OpenReliant.

Reference documentation

Path Contents
toolchain.md What make setup installs, and the Ghidra workflow.
binary/executables.md The shipped binaries and the middleware they are built on.
binary/runtime.md The C runtime linked into the game: Visual C++ 6.0's LIBCMT.
binary/sources.md The game's source files, their link order, and which code each holds.
formats/disc-images.md Raw CD images and the discs' ISO 9660 filesystem.
formats/hog.md .HOG archives: EA's BIGF container.
formats/refpack.md RefPack, the compression inside them.
formats/shp.md .SHP models: chunks, parts, levels of detail, geometry, coordinate frame.
formats/spr.md .SPR sprites: the WinVFX interface imagery.
formats/tcache.md Texture caches: every model and effect texture, their palettes and colour cubes.
formats/fat.md .fat sound banks.
formats/speech.md Speech files: the radio's lines, their scrambling and their codec.
formats/mp3.md MP3 files: the crew's lines in the rooms, and the frames OpenReliant reads of them.
formats/fm8.md Face films: the pilots' faces the radio's window plays, their chunks and their codec.
formats/fnt.md .fnt bitmap fonts.
formats/bink.md .bik movies: the Bink container.
formats/frc.md .frc force-feedback effects.
formats/dte.md .DTE missions: directory, ships, triggers, and the script VM.
formats/stats.md Ship, gun, missile and pilot stat tables.
formats/save.md Saved games: the IFF files of the campaign, the autosave and the restart point.
engine/missions.md Missions: how a mission's start finds its file, reads it and binds it.
engine/script-vm.md The script VM at run time: threads, calls, commands, timers, events.
engine/camera.md The camera: the projection, the views, and where each puts the camera.
engine/backdrop.md The backdrop: sky dome, nebula, stars, dust, sun, lens flares and the default lights.
engine/rendering.md Rendering: layers, depth, shading modes as materials, lighting, blending, highlights.
engine/objects.md Live objects: the object array, model hierarchies, components, the flight model.
engine/guns.md Guns: the guns a model holds, their groups, the trigger and the step that fires them.
engine/cloak.md The cloak: which objects cloak, how it comes on and goes, what it draws and what shows through it.
engine/ejection.md The ejection: the pod, the ship left behind, the pickup by tractor, and the mission's end.
engine/effects.md Effects: the particles explosions send out.
engine/sound.md Sound: the banks' sounds on their voices, the 3D effects, the player's engine, the music and the speech.
engine/loop.md The game loop: the 100 Hz tick, the 25 Hz simulation step, collisions.
engine/front-end.md The front end: its screens, the main menu, GAME OPTIONS, the settings screen and its controls, the pilot roster, the dialogs and the backgrounds.
engine/rooms.md The Reliant's rooms: their views and movies, the pointer, the fish tank, the news report, a new pilot's induction and the in-game options.
engine/itac.md The ITAC: its sections, their movies and pictures, the fades, the panes, and the debriefings.
engine/simulator-pod.md The simulator pod: its screens and choices, and the training missions and Instant Action it flies.
engine/locker.md The locker: the lid's movies, and the medals and ribbons that come into view with it.
engine/cd-player.md The CD player: its screen and buttons, each carrier's list of the game's music, and how it plays.
engine/briefing.md The briefing: the door, the way into the briefing room, Enriquez with the mission's movie, her last word, and the campaign's end.
engine/loadout.md The loadout: its hologram, GenILib's 3D interface, the ship page, choosing a ship, the missile page and the racks, the internal guns view, the exit, its panels and figures, and the ship and racks it leaves the mission.
engine/movies.md Movies: how the game plays them, the discs' archives, the intro, the transitions, the hangar's, the landing and the chapters' ends, and the stand-in for Bink.
engine/controls.md Player input: devices, bindings, settings, steering and throttle.
engine/screenshots.md Screenshots: the keys that save the screen, and where the pictures go.
engine/hud.md The head-up display: how it is reached, where an element stands, its text and its art.
engine/radio.md The radio: the lines the pilots say, their queue, the window with the speaker's face, and the speech.
engine/orders.md Orders: the table of what objects can be told to do, each object's stack, and how orders run.
engine/launch.md Launches: the Launch order, its styles, the Reliant's launch and its cutaways, the torpedoes'.
engine/jump.md Jumps: Jump Out and Jump In, the player's formation, their motions and views, and the JumpedIn event.
engine/gates.md Gates: the tunnels ships jump through, the worm, and the orders that open, close and collapse them.
engine/director.md The director's camera: the script's shots, the mission's curves they fly along, and the ships they hold.
engine/maneuvers.md Combat maneuvers: the scripts Fight runs, their language, and how it chooses them.
port/platform.md The platform: the openreliant executable on SDL3, how to build and run it on each system, the installer, and joysticks and gamepads.
port/renderer.md The renderer: Surrender's pipeline and Direct3D driver as ported, the software reference device, improvements and what is not yet ported.
port/scripting.md Scripting: mod scripts in Luau, the Luau state, the sandbox and limits, how scripts read and change the engine's values, and the records load scripts can change.
port/sound.md Sound: the stand-in for the Miles Sound System, and its output through SDL3.

Conventions

Addresses are virtual addresses for the payload executable's image base of 0x400000 unless stated otherwise. The shipped binaries carry no symbols. Function and data names are those make ghidra-annotate gives the Ghidra project; names of the form FUN_<address> are Ghidra's placeholders.

Fixed layouts, in the game's files and in its executable's data, are extern structs in the code, their fields the layout's own: enums for codes, packed structs for flag words, arrays for runs, with comptime asserts on the offsets. The readers view the bytes as those structs in place (formats/layout.zig), which needs a little-endian host; the few big-endian fields, the hog archive's and the mission script's jumps, are layout.Big.

Claims are marked where they are not directly verified:

  • Unknown: not yet determined.
  • Unverified: inferred from surrounding evidence but not confirmed.

Edit this page on GitHub. The documentation is under CC BY-SA 4.0.