====== Legacy Protocol ====== A networking protocol used by the legacy client/server. It is built on the message format of the [[https://www.maartenbaert.be/game-maker-dlls/http-dll-2/|Http Dll 2]] GameMaker extension. Every message may be optionally compressed with deflate. Client and server will always attempt to decompress messages. Messages start with a byte specifying its message type. ===== Data types ===== All data types are little-endian. ^ Type ^ Format ^ | String | Null terminated UTF-8 | | Byte | 8-bit byte | | Float | 32-bit float | | Boolean | 8-bit byte, non-zero meaning true | | Uint32 | | Varint | todo | ===== Server to client ===== ==== Login (0x01) ==== Used for identifying the player logging in and creates the brick loading message. ^ Type ^ Description ^ | Uint32 | Net ID of player | | Uint32 | Brick count of world | | Uint32 | User ID of player | | String | Username of player | | Boolean | Is admin | | Byte | Membership type | | Uint32 | Set ID | | String | Set Name | ==== Message (0x06) ==== Appends a message to the chat log. ^ Type ^ Description ^ | String | Message | ==== Set brick attribute (0x09) ==== ^ Type ^ Description ^ | Uint32 | Net ID of brick | | String | Attribute type | === Type: pos === Sets position of brick. ^ Type ^ Description ^ | Float | X position | | Float | Y position | | Float | Z position | === Type: rot === Old method of setting brick rotation. Only allows Z rotation to be set. ^ Type ^ Description ^ | Uint32 | Z rotation | === Type: rot2 === Sets brick rotation. ^ Type ^ Description ^ | Int32 | X rotation | | Int32 | Y rotation | | Int32 | Z rotation | === Type: scale === Sets brick scale. ^ Type ^ Description ^ | Uint32 | X scale | | Uint32 | Y scale | | Uint32 | Z scale | Time is in milliseconds. === Type: kill === Activates physics on brick and remove brick from world after set time. ^ Type ^ Description ^ | Uint32 | Time | Time is in milliseconds. === Type: destroy === Deletes brick from world. ^ Type ^ Description ^ | Float | Color | === Type: col === Sets color of brick. ^ Type ^ Description ^ | Float | Color | === Type: alpha === Sets transparency of brick. ^ Type ^ Description ^ | Float | Alpha | Alpha value ranges from 0 to 1. === Type: lightcol === Sets light color of brick. ^ Type ^ Description ^ | Uint32 | Color | === Type: lightrange === Sets light range of brick. ^ Type ^ Description ^ | Uint32 | Mesh UUID | === Type: model === Sets mesh on brick. ^ Type ^ Description ^ | String | Mesh UUID | | String | Texture UUID | A mesh UUID of ''none'' will remove the mesh. === Type: clickable === Sets clickable status on brick. ^ Type ^ Description ^ | Boolean | Clickable enabled | | Uint32 | Click distance | === Type: collide === Sets collision of brick. ^ Type ^ Description ^ | Boolean | Collision enabled | === Type: global === Moves brick to the internal global cluster model. ==== Delete bricks (0x10) ==== Delete bricks from the world. ==== Create bricks (0x11) ==== Loads bricks into the world. ==== Clear world (0x0E) ==== Deletes all bricks from the world. No message data is specified. ==== Brick model (0x14) ==== What happens if a brick model is defined for an already existing mesh ID? Knowing what happens may be useful information. Defines a mesh made out of bricks to the mesh cache. The model can then be used as a brick model or a hat by using the newly defined mesh ID. ^ Type ^ Description ^ | String | Mesh ID | | Uint32 | Brick count of model | Bricks are defined for the number of bricks in model. ^ Type ^ Description ^ | Float | X position | | Float | Y position | | Float | Z position | | Float | X scale | | Float | Y scale | | Float | Z scale | | Int32 | X rotation | | Int32 | Y rotation | | Int32 | Z rotation | | Uint32 | Color | | Float | Alpha | ===== Client to server ===== todo