# undercooked protocol The protocol schema is defined in [`protocol.ts`](./test-client/protocol.ts) 1. Connect to the server via TCP (on port 27031) or WebSocket (on port 27032) and send/receive json on individual lines / text messages. 2. Send the join packet with your username. 3. Wait for `init` packet. 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 5. Run the game loop - Send your position every 40ms. - Send `interact` when the player interacts with a tile. Make sure to set the `edge` parameter consistently. - 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. ## Movement Movement is handled mostly client-side. Therefore it is implemented three times: - In the test-client: [movement.ts](./test-client/movement.ts) - For customers in the server: [movement.rs](./server/src/customer/movement.rs) - In the client: [controllable_player.gd](./client/player/controllable_player.gd)