Implemented the real server

This commit is contained in:
Vladislav Khorev committed 2026-10-30 16:37:30 +06:00
1 parent 931236bec0
commit 075750442f
22 files changed
+1130 -44

No files matched your search

+16 -7
View File
@@ -1,8 +1,8 @@
# 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.
audio, Lua, or rendering dependencies. On Windows it exposes the state through
a Boost.Beast WebSocket listener.
## Build
@@ -39,12 +39,18 @@ For a multi-configuration Windows build, the executable is normally
For smoke tests, `--ticks N` limits execution and `--no-sleep` skips the
real-time delay.
Load a location with no players:
Start the first multiplayer transport iteration:
```bash
./server/build/GameServer --campaign battle_zone --location uni_exterior
```powershell
.\server\build\Release\GameServer.exe --campaign battle_zone --location uni_exterior
```
The listener defaults to `ws://0.0.0.0:8080`. Launch the Windows graphical game
afterward and select `battle_zone`; that campaign connects to
`ws://127.0.0.1:8080`. Other campaigns continue to use the in-process server.
The server broadcasts an initial full state and then one every five seconds.
Client commands are intentionally discarded in this iteration.
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
@@ -56,6 +62,8 @@ Available startup options:
--campaign ID
--location ID
--campaigns PATH
--address IP
--port N
--tick-ms N
--ticks N
--no-sleep
@@ -64,8 +72,9 @@ Available startup options:
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.
The standalone WebSocket lifecycle creates the existing shared `"player"` so
the graphical client can render its local character. It does not create the
battle-zone test bot.
## Tests