X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=doc%2Fprotocol;h=ce3f5fd75afcd4515d351f6d396ab1a3c5679ce8;hb=808d9dbd3ab101c0ff10697e36ef2c45a23b6ef5;hp=a20d8d641073f3c561aa3b04e9076c38d034fd95;hpb=1812e1a29378526a59a346caa2348df3e7522049;p=blank.git diff --git a/doc/protocol b/doc/protocol index a20d8d6..ce3f5fd 100644 --- a/doc/protocol +++ b/doc/protocol @@ -17,6 +17,26 @@ with native LE (or BE if the server and all clients are on that, but that's by accident and will break if conversion code is ever added) +Common Types +------------ + +Name Size Type +vec3 12 3x 32bit float +vec3i 12 3x 32bit signed int +vec3b 3 3x 8bit signed int +packn 2 16bit signed int representing a float value normalized to [-1,1] + it can be unpacked by dividing by 32767 +packu 2 16bit unsigned int representing a float value normalized to [0,1] + it can be unpacked by dividing by 65535 +vec3n 6 3x packn +vec3u 6 3x packu +quat 8 4x packn float +entity state 50 [ 0] vec3i chunk pos (there's a variation where this is a vec3b) + [12] vec3u block pos by 16, + [18] vec3 velocity, + [30] quat orientation, + [38] 12 reserved bytes (used to be angular velocity) + Packets ======= @@ -30,12 +50,13 @@ a while. Code: 0 Payload: none +Length: 0 Login ----- -Sent from client to serveri as a request to join. The server may +Sent from client to server as a request to join. The server may respond negatively if the player name is already taken or some cap has been reached. @@ -43,6 +64,7 @@ Code: 1 Payload: 0 player name, max 32 byte UTF-8 string, shorter names should be zero terminated +Length: 0-32 Join @@ -54,10 +76,10 @@ it's changing worlds. Code: 2 Payload: 0 entity ID of the player, 32bit unsigned int - 4 chunk coords of the player, 3x 32bit signed int - 16 pos/vel/rot/ang of the player, 13x 32bit float - 68 name of the world the server's currently running + 4 entity state of the player + 54 name of the world the server's currently running max 32 byte UTF-8 string +Length: 54-86 Part @@ -69,3 +91,134 @@ Optionally sent by the client on disconnect. Code: 3 Payload: none +Length: 0 + + +Player Update +------------- + +Sent by clients to notify the server of their changes to the player. + +Code: 4 +Payload: + 0 player's entity state as predicted by the client + 50 movement input, vec3n + 56 pitch input by PI/2, packn + 58 yaw input by PI, packn + 60 active actions, 8bit bit field, first three bits are primary, secondary, and tertiary + 61 selected inventory slot, 8bit unsigned int +Length: 62 + + +Spawn Entity +------------ + +Sent by the server to notify the client of an entity entering spawn range. + +Code: 5 +Payload: + 0 entity ID, 32bit unsigned int + 4 entity's model ID, 32bit unsigned int + 8 entity state + 58 bounding box of the entity, 6x 32bit float + 82 flags, 32bit bitfield with boolean values + 1: world collision + 86 entity name, max 32 byte UTF-8 string +Length: 87 - 118 + + +Despawn Entity +-------------- + +Sent by the server to notify the client of an entity leaving spawn range. + +Code: 6 +Payload: + 0 entity ID, 32bit unsigned int +Length: 4 + + +Entity Update +------------- + +Sent by the server to notify the client of updated entity properties. +Contained entities must be ordered by ascending entity ID. + +Code: 7 +Payload: + 0 number of entities, 32bit int, 1-10 + 4 base for chunk coordinates, vec3i + 16 entity ID, 32bit unsigned int + 20 entity state with vec3b as chunk position (rather than vec3i) + 62 next entity... +Length: 16 + multiple of 45, max 466 + + +Player Correction +----------------- + +Sent by the server to tell a client that its prediction is way off. + +Code: 8 +Payload: + 0 sequence number of the offending packet, 16bit unsigned int + 2 entity state of the player's entity on the server +Length: 52 + + +Chunk Begin +----------- + +Sent by the server to inform the client of an upcoming chunk transmission. + +Code: 9 +Payload: + 0 transmission ID, used for reference with Chunk Data packets, 32bit unsigned int + 4 flags, 32bit bitfield with boolean values + 1: compressed + 8 chunk coordinates, vec3i + 20 data size, 32bit unsigned int +Length: 24 + + +Chunk Data +---------- + +Raw chunk data sent by the server, optionally compressed with zlib. + +Code: 10 +Payload: + 0 transmission ID, references the Chunk Begin packet this data belongs to, 32bit unsigned int + 4 block offset, offset of this block inside the whole data, 32bit unsigned int + 8 block size, size of the data block, 32bit unsigned int + 12 data, raw data +Length: 12-484 + + +Block Update +------------ + +Sent by the server whenever one or more block in a chunk have changed. + +Code: 11 +Payload: + 0 chunk coordinates, vec3i + 12 number of blocks, 32bit unsigned int, 1-78 + 16 first block index, 16bit unsigned int + 18 first block data, 32bit + 22 second block index... +Length: 16 + multiple of 6, max 484 + + +Message +------- + +Sent by the client when the user submits a line on the chat input. +Sent by the server on various events like player chat, server status, command output, etc. + +Code: 12 +Payload: + 0 message type, 8bit unsigned int: 0 = notification, 1 = chat + 1 referral, 32bit unsigned int, entity ID if type = 1 + 5 message, max 450 byte UTF-8 string, should be zero terminated if shorter +Length: 6-455