78 lines
2.2 KiB
Markdown
78 lines
2.2 KiB
Markdown
# 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:
|
|
|
|
```powershell
|
|
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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
./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:
|
|
|
|
```bash
|
|
./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:
|
|
|
|
```text
|
|
--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`.
|