aboutsummaryrefslogtreecommitdiff
path: root/protocol.md
diff options
context:
space:
mode:
Diffstat (limited to 'protocol.md')
-rw-r--r--protocol.md35
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)