Headless GameServer
This target runs the authoritative InternalGameServer without SDL, OpenGL,
audio, Lua, or rendering dependencies. It can prepare campaign/location data
headlessly; networking is not implemented yet.
Build
Windows:
cmake -S server -B server/build
cmake --build server/build --config Release --target GameServer
ctest --test-dir server/build -C Release --output-on-failure
Linux:
cmake -S server -B server/build -DCMAKE_BUILD_TYPE=Release
cmake --build server/build --target GameServer --parallel
ctest --test-dir server/build --output-on-failure
Eigen3 must either be installed or be available at
thirdparty/eigen-5.0.0. The headless target reads ordinary filesystem resources
only; ZIP-backed campaign loading belongs to the later content-loading
milestone.
Run until interrupted:
./server/build/GameServer
For a multi-configuration Windows build, the executable is normally
server/build/Release/GameServer.exe.
For smoke tests, --ticks N limits execution and --no-sleep skips the
real-time delay.
Load a location with no players:
./server/build/GameServer --campaign battle_zone --location uni_exterior
If --location is omitted, the campaign's configured start location is used.
--campaigns PATH selects a different campaign registry. Content paths are
resolved from the process working directory, so run from the repository root
when using the bundled resources/ tree.
Available startup options:
--campaign ID
--location ID
--campaigns PATH
--tick-ms N
--ticks N
--no-sleep
The graphical client executes Lua/dialogue behavior after building its runtime
Location; the headless content pass loads authoritative navigation, NPC,
interactive-object, trigger, teleport, taxi, and animation metadata only.
The standalone lifecycle intentionally creates neither the local "player" nor
the battle-zone test bot. Those are opt-ins used by the graphical host.
Tests
CTest covers:
- repeated
LocationGameState::setup()preserving mutable runtime state; - ticking a prepared location with zero players;
- idle server startup;
- headless loading of
battle_zone/uni_exterior.