diff options
| author | metamuffin <metamuffin@disroot.org> | 2025-12-05 15:27:58 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2025-12-05 15:27:58 +0100 |
| commit | b1db0e0f201fa1551e3fe98bc41e56e3f802d7af (patch) | |
| tree | 416c4315f64c041741a6c57817c5ab060536d5e4 /protocol.md | |
| parent | 92096618f27053efb2da74a0c359502c6a17d4f8 (diff) | |
| download | hurrycurry-b1db0e0f201fa1551e3fe98bc41e56e3f802d7af.tar hurrycurry-b1db0e0f201fa1551e3fe98bc41e56e3f802d7af.tar.bz2 hurrycurry-b1db0e0f201fa1551e3fe98bc41e56e3f802d7af.tar.zst | |
update protocol doc
Diffstat (limited to 'protocol.md')
| -rw-r--r-- | protocol.md | 35 |
1 files changed, 13 insertions, 22 deletions
diff --git a/protocol.md b/protocol.md index 7a70736a..a014d17e 100644 --- a/protocol.md +++ b/protocol.md @@ -2,27 +2,19 @@ The protocol schema is defined in [`protocol.ts`](./test-client/protocol.ts) -1. Connect to the server via WebSocket and send/receive json in WebSocket "Text" - messages. The binary protocol uses "Binary" messages and is optional for - servers and clients. +1. Connect to the server via WebSocket and send/receive JSON in text messages. 2. Wait for `version` packet and check version compatibiliy (see below). -3. Send the join packet with your username. -4. The server will send the current game state: - - `data` once for setting important look-up tables - - `update_map` for every tile - - `set_tile_item` for every item on a tile - - `add_player` for every player in the game - - `set_player_item` for every item held by a player +3. The server will send the current game data and state, then finishes with + `set_ingame(state=true)` +4. Send `join` with your username, the server will confirm your join with + `joined`. 5. Run the game loop - - Send your position every 20ms - 40ms. + - Send a `keepalive` packet every 1000ms. + - Send your position via `movement` every 20ms - 40ms. - Send `interact` when the player interacts with a tile. - Receive packets -6. The Game ends. The server will remove all players and tiles. Then continue at - step 4. - -Collisions are handled by the clients. Whenever to players collide the player -with the greater PlayerID is responsible for updating their own momentum and -sending a packet to update that of the other player. +6. The Game ends. The server will remove all players and tiles, then send + `set_ingame(state=false)`. Then continue at step 4. ## Ports @@ -32,7 +24,7 @@ sending a packet to update that of the other player. - 27034: Lobby Server Websocket - 27035: Map Editor Server Websocket -## Binary Protocol +<!-- ## Binary Protocol Servers might also support the binary protocol. It uses [Bincode](https://github.com/bincode-org/bincode) to encode packets. If a server @@ -40,14 +32,13 @@ advertises bincode support with the `init` packet, you are free to use the binary protocol. By default the server will send JSON. For every packet you send, you can choose between bincode and JSON. After a client sent the first Bincode packet, the server might start to reply using Bincode aswell. Bincoded -packets are sent with WebSocket "Binary" messages. +packets are sent with WebSocket "Binary" messages. --> ## Protocol Versioning The `init` packet sends minor and major version numbers of the protocol is use by the server. These are to be interpreted according to -[SemVer](https://semver.org/) for the JSON protocol. The binary protocol can not -be used if either minor or major version differs. +[SemVer](https://semver.org/) for the JSON protocol. ## Movement @@ -56,7 +47,7 @@ latency. For this reason it implemented three times: - In GDscript (for the Godot client): [controllable_player.gd](./client/player/controllable_player.gd) -- In Rust (for server, pixelcurry and customers): +- In Rust (for server and standalone bots): [movement.rs](./server/protocol/src/movement.rs) - In TypeScript (for test-client): [movement.ts](./test-client/movement.ts) |