Understanding cfgplayerspawnpoints.xml
cfgplayerspawnpoints.xml defines where players can appear on the map and the rules the server uses to find a valid position within those areas. It covers three distinct spawn scenarios — a first-time player appearing on the coast, a player rejoining after disconnecting, and a player using the in-game travel/respawn system.
The file does not list individual spawn points. Instead, it defines bubbles — centre positions on the map — and a grid generator that creates a pool of candidate positions around each bubble at runtime. The server then filters that pool against distance constraints before placing a player.
Spawn types
The file has three top-level sections, each representing a different scenario in which a player needs to be placed.
| Section | When it applies |
|---|---|
<fresh> | A player connecting for the first time, or after clicking New Character following death |
<hop> | A player reconnecting to the server after disconnecting mid-session |
<travel> | A player using the in-game respawn/travel feature (where supported) |
Each section contains the same set of child elements: <spawn_params>, <generator_params>, <group_params>, and <generator_posbubbles>. They are configured independently, so fresh spawns can have tighter constraints than hop spawns, and use different bubble locations entirely.
<spawn_params>
These are the safety checks applied when selecting a final position for a player. Before the server places a player at a candidate point, it verifies the position passes all of these distance tests.
<spawn_params>
<min_dist_infected>30</min_dist_infected>
<max_dist_infected>70</max_dist_infected>
<min_dist_player>65</min_dist_player>
<max_dist_player>150</max_dist_player>
<min_dist_static>0</min_dist_static>
<max_dist_static>2</max_dist_static>
</spawn_params>| Parameter | What it controls |
|---|---|
min_dist_infected | The candidate point must be at least this many metres from any infected |
max_dist_infected | The candidate point must be no more than this many metres from an infected (ensures players spawn near some action) |
min_dist_player | The candidate point must be at least this many metres from any other player |
max_dist_player | The candidate point must be no more than this many metres from another player |
min_dist_static | The candidate point must be at least this many metres from a static object (buildings, trees) |
max_dist_static | The candidate point must be no more than this many metres from a static object |
The max_dist values act as a soft attractor — the server tries to place players somewhere near infected and near cover, not in the middle of an empty field. If no candidate in the bubble passes all constraints, the server falls back to a less strict selection.
Fresh spawns use a larger player distance (min_dist_player: 65, max_dist_player: 150) compared to hop spawns (min_dist_player: 25, max_dist_player: 70). This separates new players across the coast more broadly, while allowing reconnecting players to return closer to where other players are.
<generator_params>
The generator creates a grid of candidate spawn positions around each bubble centre. These parameters control the shape and density of that grid.
<generator_params>
<grid_density>4</grid_density>
<grid_width>200</grid_width>
<grid_height>200</grid_height>
<min_dist_static>0</min_dist_static>
<max_dist_static>2</max_dist_static>
<min_steepness>-45</min_steepness>
<max_steepness>45</max_steepness>
</generator_params>| Parameter | What it controls |
|---|---|
grid_density | Spacing between grid points in metres. Lower = more candidate positions generated |
grid_width | Width of the grid (metres) centred on the bubble position |
grid_height | Height of the grid (metres) centred on the bubble position |
min_dist_static | Candidates within the grid must be at least this far from static objects |
max_dist_static | Candidates within the grid must be no more than this far from static objects |
min_steepness | Minimum terrain slope angle accepted (degrees). Negative = downhill |
max_steepness | Maximum terrain slope angle accepted (degrees). Keeps players off cliff faces |
With grid_width: 200, grid_height: 200, and grid_density: 4, the generator places a point every 4 metres across a 200×200 metre square — producing up to 2,500 candidate positions around each bubble centre before filtering.
The steepness filter (-45 to 45) eliminates positions on slopes where a player would slide or clip through geometry. This is applied per-candidate before spawn_params checks run.
<group_params>
Group params control whether players spawning in the same bubble are treated as a group — placed together in proximity rather than independently.
<group_params>
<enablegroups>true</enablegroups>
<groups_as_regular>true</groups_as_regular>
<lifetime>120</lifetime>
<counter>2</counter>
</group_params>| Parameter | What it controls |
|---|---|
enablegroups | true — players spawning in this bubble are grouped together. false — each player is placed independently |
groups_as_regular | true — group spawn points are also eligible as regular (non-group) spawn candidates |
lifetime | How long (seconds) a group spawn point stays reserved after the first player lands. Other players can join the group within this window |
counter | How many players can be placed into one group. -1 means unlimited |
Fresh spawns have groups enabled (enablegroups: true, counter: 2) — this is what causes two newly spawned players to appear near each other on the coast. The group spawn point stays active for 120 seconds, during which a second player can be routed to the same area.
Hop and travel spawns have enablegroups: false — reconnecting players are placed individually with no grouping, and counter: -1 is irrelevant.
<generator_posbubbles>
This is where you define the actual areas of the map players can spawn in. Each <group> is a named collection of positions. Each <pos> is a centre point around which the generator will build its grid.
<generator_posbubbles>
<group name="WestCherno">
<pos x="6063.018555" z="1931.907227" />
<pos x="5933.964844" z="2171.072998" />
<pos x="6199.782715" z="2241.805176" />
</group>
<group name="EastCherno">
<pos x="8040.858398" z="3332.236328" />
...
</group>
</generator_posbubbles>The name attribute on <group> is a label only — it has no functional effect on the engine. It exists for human readability.
Coordinates use the DayZ world space format: x is east-west, z is north-south. These are not GPS coordinates — they are in-world metres from the map origin.
Each <pos> generates its own independent grid. Multiple positions inside one named group are simply multiple bubbles in nearby areas. Having several positions spread across a town means the generator produces candidates across the whole settlement rather than just a single patch.
What the engine does with these
At spawn time:
- A bubble is selected (the engine picks among all eligible
<pos>entries) - The generator builds its candidate grid around that bubble using
generator_params - Terrain steepness is checked — candidates on slopes outside the
min/max_steepnessrange are discarded - The remaining candidates are filtered against
spawn_params(distance to infected, players, static objects) - The best-passing position is used. If no position passes, the server relaxes constraints and tries again
Adding and modifying spawn areas
To add a new spawn area, add a <pos> entry inside an existing <group>, or create a new <group> block with a name of your choosing.
<group name="MyNewArea">
<pos x="7500.0" z="4200.0" />
<pos x="7550.0" z="4350.0" />
</group>To remove a spawn area, delete the <group> block or remove individual <pos> entries from it.
To restrict spawning to specific areas only, remove all other <group> blocks from the relevant section. For example, removing all groups from <fresh> except one will force all fresh spawns into that single area.
Coordinates can be obtained from in-game tools, map editors, or community map sites that display world-space coordinates. The DayZ map runs roughly 0–15,360 on both axes for Chernarus. The south coast where fresh spawns occur sits between approximately z=1800 and z=4500.
If spawn_params constraints are too strict for the bubble area you've defined — for example, requiring infected within 70m in an area where none spawn — the server may fail to find valid positions and fall back to default behaviour. If players appear in unexpected locations, relax max_dist_infected and max_dist_player first.
Differences between fresh, hop, and travel
The vanilla file ships with different bubble locations for each spawn type. Fresh spawns cover the coastal strip — Cherno, Elektro, Kamyshovo, Berezino. Hop and travel spawns cover a wider set of inland areas including Balota, Pusta, and Dobroye.
fresh | hop / travel | |
|---|---|---|
| Bubble areas | Coastal only | Coastal + inland |
enablegroups | true | false |
| Group counter | 2 | — (disabled) |
min_dist_player | 65m | 25m |
| Grid size | 200×200m | 150×150m |
The intent is clear: fresh players always land on the coast near other new players, while returning players can come back anywhere on the map — and closer to other players since they already know where they are going.
Fresh, hop and travel are not used on community servers. These are only for Official Servers.