# Protocol Header The header has a fixed length of 20 bytes and is present in almost all of the packets. Exceptions are the sync packets with 16 byte length, who have a smaller header. ## Definition ```ruby def Header int32 :network_source_id int32 :network_dest_id int8 :command int8 :option1 int8 :option2 int8 :option3 int32 :communication_turn int32 :individual_counter end ``` ## Description *:network_source_id*
The *:network_id* of the person who sent the packet. A *:network_id* is different for every game, but is not generated randomly for all players. When joining the lobby, every player gets assigned `last_network_id - 2` as his own *:network_id* where *last_network_id* is the ID of the person who joined before him. *:network_dest_id*
The *:network_id* of the person who should receive the packet. Is only used for sync packets and remains unused for most commands. *:command*
The command which tells the network engine how the data bytes should be interpreted. *:option{1-3}*
These are options with unknown effects. *:communication_turn*
The communication turn where the command is executed. Packets that contain a communication turn that has already passed are discarded. *:individual_counter*
The individual counter of the player who receives the packet. It increments by 1 with every 16BC41 sync command. For individual players, this counter starts with values that are 1200 units (two players) or 2000 units (three players, `0x7d0`) apart from each other. In the latter example player 1 starts with the value `0x7d0`, player 2 with `0xfa0` and player 3 with `0x1770`. If the differences between these values is not a multiple of 2000, this indicates a de-sync. ## Examples `82 b2 45 00 00 00 00 00 53 02 8f 0b 30 00 00 00 01 08 00 00` >`82 b2 45 00` — network_source_id
>`00 00 00 00` — network_dest_id
>`53` — command
>`02` — option1
>`8f` — option2
>`0b` — option3
>`30 00 00 00` — communication_turn
>`01 08 00 00` — individual_counter