Packet 13 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 13 (0x0D). |
| 1 | player_id | u8 | 1 | Compact player-slot identifier. |
| 2 | class_id | u8 | 1 | Selected character class identifier. |
| 3 | instant | boolean u8 | 1 | Boolean-like byte requesting immediate application. |
| 4 | loadout_count | u8 | 1 | L: number of one-byte tool IDs. |
| 5 | loadout[] | L × u8 | L | Ordered equipment/tool IDs. |
| 6 | prefab_count | u8 | 1 | Number of NUL-terminated prefab names. |
| 7 | prefabs[] | repeated NUL strings | ΣS | Selected prefab names; each consumes its UTF-8 length plus one terminator byte. |
| 8 | ugc_tool_count | u8 | 1 | U: optional trailing count; retail may omit it when zero.When: Present only when bytes remain. |
| 9 | ugc_tools[] | U × u8 | U | UGC tool IDs.When: Only after ugc_tool_count. |
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.