Networking and Save Formats - LordBlacksun/Starlancer-OSS GitHub Wiki

Networking & Save Formats

All [verified] by reading the decompilation.

Multiplayer — DirectPlay

Addr Role
0x004B5C50 DPInit — CoCreateInstance(DirectPlay) + address object; provider switch DAT_005DB8D8: 0 = TCP/IP, 1 = IPX, 2 = modem, 3 = serial (baud table 9600…256000), each loading the stock DirectPlay service-provider GUID (0x4DCE58, 0x4DCE68, 0x4DCE38, 0x4DCE48). This row said 0 = IPX, 2 = TCP/IP, 3 = modem/serial until 2026-09-29.
0x004B6A80 DPSYS handler — message dwType 0x03/0x05/0x21/0x31/0x101/0x103/0x109 = create / destroy / delete player, SESSION-LOST, HOST, SET-NAME, CHAT. Player tables DAT_005DB8F0 (stride 0xFC) and DAT_005DB650 (stride 0x3C); 0x20-byte names.
0x004B51D0 DPERR (0x8877xxxx) → string decoder.
0x004BC390 DirectPlay capability check (GetCaps): reads the async and group-optimized flags, and sets the multicast switch 0x005DB648. The "The game requires Winsock 2.0" lines are only advice it prints when DPCAPS_ASYNCSUPPORTED is clear. This row said "Winsock-2.0 capability check" until 2026-09-29.

Source modules: lancer\game\DPBits.cpp, DPSession.cpp, deathmatch.cpp, DPReceivePackets.cpp (string at 0x0050DE64) and DPSendPackets.cpp (0x0050DF48). Lobby support targets the MSN Gaming Zone ("started by the zone").

Saved games — EA-IFF

Saves are standard EA-IFF: each chunk is { FOURCC tag, u32 size } (the size big-endian) with word-aligned bodies.

  • 'FORM' = 0x4D524F46; top-level form 'SAVE' = 0x45564153; mission chunk 'MISS' = 0x5353494D.
  • Path: saves\%sGAME%02d.IFF (the %s prefix is the active profile name).
  • Reader stack: FUN_00490930 / FUN_004909D0 / FUN_00490C40 / FUN_0045E8D0.
  • Writer: FUN_00475650 (gameflow.cpp, 0x1400 buffer).
  • Loader FUN_00475430 walks a dispatch table of 5 rows { FOURCC, dest, size } at 0x00500A20 (the first row's destination is at 0x00500A24). It takes each chunk's size from the file and ignores the table's size column. This line gave the table as PTR_DAT_00500A24 until 2026-09-29.

Profile & face films

  • profile.bin = a single 0xD0 (208) byte blob (DAT_00562CF8; FUN_004751B0 / FUN_00475390 / FUN_004753F0). It leads with mission_number (DAT_00562CF8); the profile name is at +4 (DAT_00562CFC) and becomes the %s prefix for save files. This line said it leads with the name until 2026-09-29.
  • pilots\%s.fm8 are the head-movement ("face") films the radio window plays with a line, not pilot files. FUN_00453DE0 (OpenReliant's permission_to_land) formats one into the radio queue at 0x004542E9, as the other radio routines do. This line called them pilot files and FUN_00453DE0 a killer-record writer until 2026-09-29.

Config (cross-ref)

Key/joystick binds live in [KeyConfig]/[JoyConfig] (defaults in sdefault.txt); audio in [Sound]; display in [Device] + dmodes.bin. See Audio, Video & Input and Renderer, Display & Widescreen.

[open] The byte-level layout inside the IFF 'MISS' chunk and the 0xD0 profile blob were not fully field-mapped; that needs diffing real save/profile files against the field accessors.


Licence — this page is licensed CC BY 4.0: use it in any project, whatever that project's own licence, with attribution. Code and tools in Starlancer-OSS remain GPL-3.0-only, and the Game Reference pages are CC BY-SA 3.0, as they derive from the Starlancer Fandom Wiki. StarLancer, its code and its assets belong to their owners; no licence here covers them.