Lobby¶
The lobby uses a 196 byte data field to communicate game settings between the players. Lobbies always require a host to allow new players to connect. Only the hosting player can change the settings.
Packets are transmitted in intervals of 4s.
Values and Length¶
def LobbySettings
byte20 :header
4 bytes
array :player_network_ids,
type => :int32,
initial_length => 8
int8 :ready
69 bytes
int8 :checkboxes
byte
6bit :reveal_map
2bit :game_speed
1 byte
byte
4bit :starting_age
4bit :starting_resources
byte
4bit :map_size
4bit :difficulty
int8 :map_id
int8 :victory
1 byte
int16 :victory_limit
int8 :max_population
8 bytes
array :player_civ_ids,
type => :int8,
initial_length => 8
16 bytes
array :teams,
type => :int8,
initial_length => 8
int16 :zero
int8 :map_description_length
array :map_description,
type => :char,
initial_length => :map_description_length + 6
end
:player_network_ids
The network IDs of the players. If a slot is empty, the corresponding value in the array is 0x00
.
:ready
This byte indicates readied slots. Every bit (read from right to left) is associated with a slot in the lobby. If the bit is set to one, the slot is closed. Slots are also considered ready when they are filled with an AI or are closed.
For example, the value 0x0c
translates to a binary notation of 00001100b
. Therefore, the third and forth slot are closed.
:checkboxes
A byte which is used to determine which of the checkbox options in the lower right are checked. Every bit is associated with checkbox. A bit is set to 1, when the checkbox is not set to its standard setting.
Checkbox | On|Off | Bit representation
————–|——–|——————-
Team together | 0|1 | 01000000b
Lock teams | 1|0 | 00001000b
All tech | 1|0 | 10000000b
Lock speed | 1|0 | 00000100b
Allow cheats | 1|0 | 00000001b
:reveal_map
Determines whether the fog of war is present. Uses the 5th and 6th bit of the byte.
Mode | Value |
---|---|
Normal | 0x00 |
Explored | 00001000b |
Visible | 00000100b |
:game_speed
Sets the default game speed. Uses the 7th and 8th bit of the byte.
Speed | Value |
---|---|
Slow | 00000001b |
Normal | 00000010b |
Fast | 00000011b |
:starting_age
Sets the starting age.
Age | Value |
---|---|
Standard | 0x0 |
Dark | 0x2 |
Feudal | 0x3 |
Castle | 0x4 |
Imperial | 0x5 |
Post-Imperial | 0x6 |
:starting_resources
Sets the amount of starting resources.
Resources | Value |
---|---|
Standard | 0x0 |
Low | 0x1 |
Medium | 0x2 |
High | 0x3 |
:map_size
Sets the map size.
Size | Value |
---|---|
Very Small | 0x0 |
Small | 0x1 |
Medium | 0x2 |
Normal | 0x3 |
Large | 0x4 |
Giant | 0x5 |
:difficulty
Sets the difficulty of the AI.
Difficulty | Value |
---|---|
Very Easy | 0x4 |
Standard | 0x3 |
Medium | 0x2 |
Hard | 0x1 |
Hardest | 0x0 |
:map_id
The ID of map that will be generated.
:victory
Sets the victory condition.
Victory | Value |
---|---|
Standard | 0x00 |
Conquest | 0x01 |
Time Limit | 0x07 |
Score | 0x08 |
Last Man Standing | 0x0b |
:victory_limit
Amount of points to win in score mode or timer for the time limit game mode.
:max_population
This field is used for setting the maximum population for the game.
:player_civ_ids
The ID of the civilisations the players have chosen. Defaults to Random (0x1e
).
:teams
The teams of each individual player. For whatever reason, the value for no team is 0x01
which leaves the teams 1, 2, 3 and 4 with these values:
Team | Value |
---|---|
None | 0x01 |
1 | 0x02 |
2 | 0x03 |
3 | 0x04 |
4 | 0x05 |
Random | 0x06 |
:zero
These 2 bytes are always zero.
:map_description_length
The length of the name a custom maps. Only present when custom maps are selected.
:map_description
The name of the custom map encoded in extended ASCII. It starts with 6 bytes that are used for formatting and not displayed by the game.