From 3d156d75de3852dd36d0eeda33b17a2b6f10aa4a Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 7 Jan 2025 21:16:40 +0100 Subject: new proto doc --- doc/other.md | 10 ++++++++ doc/protocol.md | 36 ++++++++++++++++++++++++++++ doc/resources.md | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 119 insertions(+) create mode 100644 doc/other.md create mode 100644 doc/protocol.md create mode 100644 doc/resources.md (limited to 'doc') diff --git a/doc/other.md b/doc/other.md new file mode 100644 index 0000000..76c8c37 --- /dev/null +++ b/doc/other.md @@ -0,0 +1,10 @@ + +## 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) diff --git a/doc/protocol.md b/doc/protocol.md new file mode 100644 index 0000000..cd4694e --- /dev/null +++ b/doc/protocol.md @@ -0,0 +1,36 @@ +# Protocol + +Default port is 28555 for TCP and UDP transport. + +For TCP, packets are concatenated to a stream. + +For UDP, game packets are concatenated in groups of at least one to form one UDP +packet. + +## Protocol packets + +All packets are preceeded by its length as u32. The next byte indicates the +type. The following bytes are the parameters. + +`Vec` is stored as u32 element count followed by the elements. `Res` is +used to denote 256-bit resource hash referring to data of type T. `Obj` refers +128-bit game objects IDs. + +```rs +00 connect(identity: u128) +ff disconnect() +01 request_resource(name: Res) +02 respond_resource(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) +09 prefab_index(res: Res) +``` + +## Resources + +Resources are reusable things. They are identified by the SHA-256 hash of their +serialized content. See [resources.md](./resources.md) diff --git a/doc/resources.md b/doc/resources.md new file mode 100644 index 0000000..3add075 --- /dev/null +++ b/doc/resources.md @@ -0,0 +1,73 @@ +# Resource formats + +## Dictionary format + +``` +[kkkk vvvv KK... VV...]... + ^ ^ ^ ^ + | | | | value + | | | key + | | 16-bit kalue length + | 16-bit key length +``` + +## PrefabIndex + +| Key | Value Type | +| -------- | ---------- | +| \ | Resource | + +## Prefab + +| Key | Value Type | | +| ----------- | ----------------------- | --------- | +| mesh | Matrix3, Vec3, Resource | Multi key | +| light | Vec3, Resource | Multi key | +| environment | Resource | | + +## MeshPart + +Combinations of g__, va__ and tex_* are multiplied except normal which is added. +Defaults should be the identity for that operation, so default is 1 / white +except normals are zero. + +| Key | Value Type | | +| ---------------- | ------------- | ------------------ | +| index | Resource | | +| g_metallic | f32 | | +| g_roughness | f32 | | +| g_albedo | Vec3 | | +| g_transmission | f32 | | +| g_emission | Vec3 | | +| va_position | [Resource; 3] | | +| va_normal | [Resource; 3] | | +| va_texcoord | [Resource; 2] | | +| va_roughness | Resource | | +| va_metallic | Resource | | +| va_albedo | [Resource; 3] | | +| va_transmission | Resource | | +| va_emission | Resource | | +| tex_normal | Resource | Use color channels | +| tex_roughness | Resource | Use green channel | +| tex_metallic | Resource | Use blue channel | +| tex_albedo | Resource | Use color channels | +| tex_transmission | Resource | Use alpha channel | +| tex_emission | Resource | Use color channels | + +## LightPart + +| Key | Value Type | +| -------- | ---------- | +| radius | f32 | +| emission | Vec3 | + +## EnvironmentPart + +| Key | Value Type | | +| ------ | ---------- | ---------------- | +| skybox | Resource | | +| sun | Vec3, Vec3 | Direction, Color | + +## Texture + +WebP -- cgit v1.2.3-70-g09d2