Files
shadow-over-bishkek001/server
2026-10-30 15:09:13 +06:00
..
2026-10-30 14:56:24 +06:00
2026-10-30 15:09:13 +06:00
2026-10-30 14:56:24 +06:00

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.