## Protocol packets ```rs type Obj = u128 type Res = u128 01 request_resource(name: Res) 02 respond_resource(name: Res, data: Vec) 03 add(id: Obj, prefab: Res) 04 remove(id: Obj) 05 position(id: Obj, pos: Vec3, rot: Vec3) 06 pose(id: Obj, params: Vec) 07 parent(parent: Obj, child: Obj) 08 sound(id: Obj, data: Vec) ``` ## Resource formats ### Prefab ```ts type Prefab = Part[]; ``` ### Part ```ts type Part = { mesh?: Mesh; armature?: Armature; fragment_shader?: Shader; fragment_shader_data?: ShaderData; vertex_shader?: Shader; vertex_shader_data?: ShaderData; texture?: Texture; }; ``` ### Mesh ``` [vertex count:u16] [index count:u16] ([x:f32] [y:f32] [z:f32] [u:f32] [v:f32])* ([n:u16])* ``` ### Texture WebP ### Shader glsl source, todo ### ShaderData ``` ([param:f32])* ``` ## Player tree - LowerTorso (2x leg tilt) - FootL - FootR - UpperTorso (2x arm tilt) - HandL (5x finger, 5x tilt) - HandR (5x finger, 5x tilt) - Head (2x brow, 2x eyelid, 2x eye, 3x mouth)