Packet 21 wire layout
The first byte is the application packet ID. The rows after it appear in decode order. Sizes exclude ENet headers, the outer wrapper prefix, LZF chunk framing, and compression effects.
| # | Field | Encoding | Bytes | Purpose |
|---|---|---|---|---|
| 0 | packet_id | u8 | 1 | Always 21 (0x15). |
| 1 | entity_id | i16 LE | 2 | Scene-local entity identifier. |
| 2 | entity_type | u8 | 1 | entity type value. |
| 3 | state | u8 | 1 | Entity or gameplay state value. |
| 4 | player_id | i8 | 1 | Owning player, using the retail sentinel where applicable. |
| 5 | position | 3 × fixed16 LE | 6 | X, Y, and Z components at 1/64-unit precision. |
| 6 | velocity | 3 × fixed16 LE | 6 | X, Y, and Z components at 1/64-unit precision. |
| 7 | yaw | sign-magnitude fixed16 LE (1/64) | 2 | yaw value. |
| 8 | color_r | sign-magnitude fixed16 LE (1/64) | 2 | color r value. |
| 9 | color_g | sign-magnitude fixed16 LE (1/64) | 2 | color g value. |
| 10 | color_b | sign-magnitude fixed16 LE (1/64) | 2 | color b value. |
| 11 | radius | sign-magnitude fixed16 LE (1/64) | 2 | radius value. |
| 12 | face | u8 | 1 | Voxel face or placement orientation index. |
| 13 | fuse | sign-magnitude fixed16 LE (1/64) | 2 | fuse value. |
| 14 | int_property_count | u8 | 1 | I: number of 4-byte integer properties. |
| 15 | float_property_count | u8 | 1 | F: number of fixed16 properties. |
| 16 | ugc_mode | u8 | 1 | ugc mode value. |
| 17 | int_properties[] | I × i32 LE | 4I | Entity-type-specific integer properties. |
| 18 | float_properties[] | F × fixed16 LE | 2F | Entity-type-specific scalar properties. |
Protocol convention
How to read this layout
LEmeans least-significant byte first.fixed16is two-byte sign-magnitude at 1/64 precision.orientation16uses the measured 1/8192 orientation mapping.- NUL strings consume their encoded byte length plus one
00terminator. - Counted arrays repeat immediately in the order shown.