Reference
Population settings
How the game tops up the world with generated players, and how strong they may be. Every field is optional; a field left out keeps the game's default. Several mods can supply one: they apply in load order, later fields winning (per tier for tierSizes and levels). See Population.
- Content type
population- Files
data/population.json- Shape
- One settings object (a file may hold the object itself)
- Patch target
population:<id>, for examplepopulation:core.population- In the base game
- 1 record
- Guide
- Population
Fields#
Indented fields belong to the field above them. [] marks the items of a list. A field that is not required may be left out; the default is used.
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
id | id | Yes | Namespaced id, e.g. "core.player.rory-calder" | |
tierSizes | object | Players per tier, named and generated together (default 32 / 96 / 128 / 128 / 220). | ||
tierSizes.1 | whole number, 0 to 2000 | |||
tierSizes.2 | whole number, 0 to 2000 | |||
tierSizes.3 | whole number, 0 to 2000 | |||
tierSizes.4 | whole number, 0 to 2000 | |||
tierSizes.5 | whole number, 0 to 2000 | |||
levels | object | Overall level band for generated players per tier, enforced on the final level. | ||
levels.1 | object | Overall level band for generated players: drawn from N(mean, sd), kept in [min, max] | ||
levels.1.mean | number, 20 to 99 | Yes | ||
levels.1.sd | number, 0 to 20 | Yes | ||
levels.1.min | number, 20 to 99 | Yes | The final overall level (after attribute noise) never goes below this… | |
levels.1.max | number, 20 to 99 | Yes | …or above this. | |
levels.2 | object | Overall level band for generated players: drawn from N(mean, sd), kept in [min, max] | ||
levels.2.mean | number, 20 to 99 | Yes | ||
levels.2.sd | number, 0 to 20 | Yes | ||
levels.2.min | number, 20 to 99 | Yes | The final overall level (after attribute noise) never goes below this… | |
levels.2.max | number, 20 to 99 | Yes | …or above this. | |
levels.3 | object | Overall level band for generated players: drawn from N(mean, sd), kept in [min, max] | ||
levels.3.mean | number, 20 to 99 | Yes | ||
levels.3.sd | number, 0 to 20 | Yes | ||
levels.3.min | number, 20 to 99 | Yes | The final overall level (after attribute noise) never goes below this… | |
levels.3.max | number, 20 to 99 | Yes | …or above this. | |
levels.4 | object | Overall level band for generated players: drawn from N(mean, sd), kept in [min, max] | ||
levels.4.mean | number, 20 to 99 | Yes | ||
levels.4.sd | number, 0 to 20 | Yes | ||
levels.4.min | number, 20 to 99 | Yes | The final overall level (after attribute noise) never goes below this… | |
levels.4.max | number, 20 to 99 | Yes | …or above this. | |
levels.5 | object | Overall level band for generated players: drawn from N(mean, sd), kept in [min, max] | ||
levels.5.mean | number, 20 to 99 | Yes | ||
levels.5.sd | number, 0 to 20 | Yes | ||
levels.5.min | number, 20 to 99 | Yes | The final overall level (after attribute noise) never goes below this… | |
levels.5.max | number, 20 to 99 | Yes | …or above this. | |
potentialHeadroom | number, 0 to 40 | Most potential a generated player can have above their level (default 28, for teenagers). | ||
genderLevelOffset | object | Added to generated players' level by gender, e.g. { "f": -6 }. | ||
genderLevelOffset.m | number, -30 to 30 | |||
genderLevelOffset.f | number, -30 to 30 | |||
womenShare | number, 0 to 1 | Share of generated players (and youth intake) who are women, 0–1 (default 0.10–0.15). | ||
refill | list, up to 5 items | Tiers topped back up to their tierSizes with generated players of all ages at each season rollover (e.g. [4, 5]): Q-School promotions drain the lower tiers each winter. Default none. | ||
capToNamed | object | Keep generated players below the named ones: a generated player's level is capped at this percentile of the named players' levels in the same tier (+ margin), and their potential at the cap + growth. Tiers with fewer than minNamed named players use the cap of the nearest tier above. | ||
capToNamed.percentile | number, 0 to 100 | Yes | ||
capToNamed.margin | number, -20 to 20 | 0 | ||
capToNamed.growth | number, 0 to 20 | 2 | How far past the cap a generated player can develop (default 2). | |
capToNamed.minNamed | whole number, 1 to 100 | 3 | ||
capToNamed.breakthrough | number, 0 to 1 | 0 | Share (0–1) of the starting generated players who keep the game's normal potential: they start under the cap but can grow into top players over the seasons (default 0). | |
capToNamed.youth | one of the options | "capped" | Each season's youth intake: 'capped' (potential bounded by the Tour Card tier's cap) or 'free' (the game's normal potential, so new stars can emerge and win majors). Default 'capped'. Options: capped, free. | |
archetypes | object | Styles of generated player: points added to each attribute around their level (e.g. a scorer's { "scoring": 5, "finishing": -4 }). An archetype given replaces the game's offsets for it. | ||
archetypes.scorer | map (key: value) | |||
archetypes.finisher | map (key: value) | |||
archetypes.grinder | map (key: value) | |||
archetypes.showman | map (key: value) | |||
archetypes.nervy | map (key: value) | |||
archetypes.balanced | map (key: value) | |||
followers | object | A new player's followers per tier, [fewest, most]: the better they are within the tier, the more. | ||
followers.1 | pair [whole number, 0 to 100,000,000, whole number, 0 to 100,000,000] | |||
followers.2 | pair [whole number, 0 to 100,000,000, whole number, 0 to 100,000,000] | |||
followers.3 | pair [whole number, 0 to 100,000,000, whole number, 0 to 100,000,000] | |||
followers.4 | pair [whole number, 0 to 100,000,000, whole number, 0 to 100,000,000] | |||
followers.5 | pair [whole number, 0 to 100,000,000, whole number, 0 to 100,000,000] | |||
reputation | object | A new player's reputation (0–100) per tier, [lowest, highest]. | ||
reputation.1 | pair [number, 0 to 100, number, 0 to 100] | |||
reputation.2 | pair [number, 0 to 100, number, 0 to 100] | |||
reputation.3 | pair [number, 0 to 100, number, 0 to 100] | |||
reputation.4 | pair [number, 0 to 100, number, 0 to 100] | |||
reputation.5 | pair [number, 0 to 100, number, 0 to 100] | |||
youth | object | Each season's youth intake: how many are gems, and the headroom above their level (ordinary and gem). | ||
youth.gemChance | number, 0 to 1 | |||
youth.headroom | pair [number, 0 to 60, number, 0 to 60] | |||
youth.gemHeadroom | pair [number, 0 to 60, number, 0 to 60] | |||
youth.headroomCurve | number, 0.2 to 5 | |||
youth.startingHeadroom | number, 0 to 2 | |||
youth.intakeAge | pair [whole number, 10 to 30, whole number, 10 to 30] | |||
youth.startingAge | pair [whole number, 10 to 30, whole number, 10 to 30] | |||
youth.juniorAge | whole number, 10 to 30 | |||
youth.juniorLevelDrop | number, 0 to 10 | |||
youth.club | object | |||
youth.club.count | whole number, 0 to 400 | Yes | ||
youth.club.age | pair [whole number, 6 to 17, whole number, 6 to 17] | Yes | ||
youth.club.level | pair [number, 1 to 60, number, 1 to 60] | Yes | ||
retirement | object | An AI player's chance of retiring at a season's end: young below youngAge, then 1 / (1 + e^−(age − midAge) / spread); + pub in tier 5 past pubAge; + weak below level weakLevel past weakAge; × pros in tiers 1–2. Below youngAge, a player at level primeLevel or above keeps prime of the young rate. | ||
retirement.youngAge | number, 14 to 99 | |||
retirement.young | number, 0 to 1 | |||
retirement.midAge | number, 14 to 99 | |||
retirement.spread | number, 0.1 to 30 | |||
retirement.pubAge | number, 14 to 99 | |||
retirement.pub | number, 0 to 1 | |||
retirement.weakLevel | number, 0 to 100 | |||
retirement.weakAge | number, 14 to 99 | |||
retirement.weak | number, 0 to 1 | |||
retirement.pros | number, 0 to 5 | |||
retirement.primeLevel | number, 0 to 100 | |||
retirement.prime | number, 0 to 1 | |||
traits | list, up to 40 items | |||
traits[].id | text | Yes | Pattern: ^[a-z0-9][a-z0-9-]*$ | |
traits[].named | true or false | true | ||
traits[].weights | object | Yes | ||
traits[].weights.ambition | number, -5 to 5 | |||
traits[].weights.professionalism | number, -5 to 5 | |||
traits[].weights.media | map (key: value) | |||
traits[].weights.temperament | map (key: value) | |||
traits[].weights.style | map (key: value) | |||
traits[].effects | map (key: value) |
Example#
A record from the base game’s data/population.json, shortened.
{
"id": "core.population",
"traits": [
{
"id": "loyal",
"weights": {
"ambition": -0.5,
"professionalism": 0.6,
"temperament": {
"calm": 0.35,
"steady": 0.25
},
"media": {
"humble": 0.35,
"reserved": 0.3
}
},
"effects": {
"churn": 0.4,
"upgrade": 0.5,
"loyalty": 2
}
},
{
"id": "mercenary",
"weights": {
"ambition": 1.0,
"professionalism": -0.3,
"media": {
"confident": 0.4,
"showman": 0.25
}
},
"effects": {
"churn": 1.8,
"upgrade": 2,
"loyalty": 0.5
}
},
{
"id": "tinkerer",
"weights": {
"professionalism": -0.4,
"temperament": {
"volatile": 0.35
},
"media": {
"confident": 0.2
},
"style": {
"frontrunner": 0.4,
"showman": 0.3
}
},
"effects": {
"switch": 2
}
},
/* … 5 more */
],
"archetypes": {
"scorer": {
"scoring": 5,
"finishing": -4,
"checkoutKnowledge": -2,
"crowdHandling": 2
},
"finisher": {
"scoring": -3,
"finishing": 5,
"checkoutKnowledge": 5,
"bullAccuracy": 3
},
"grinder": {
"consistency": 6,
"concentration": 5,
"stamina": 6,
"crowdHandling": -4,
"tempoControl": 3
},
"showman": {
"crowdHandling": 10,
"composure": -3,
"consistency": -3,
"bullAccuracy": 2
},
"nervy": {
"composure": -8,
"resilience": -6,
"scoring": 2,
"finishing": 1
},
"balanced": {}
},
"followers": {
"1": [
60000,
1200000
],
"2": [
5000,
90000
],
"3": [
600,
9000
],
"4": [
150,
4000
],
"5": [
20,
800
]
},
"reputation": {
"1": [
70,
98
],
"2": [
45,
75
],
"3": [
25,
50
],
"4": [
10,
35
],
"5": [
2,
20
]
},
"youth": {
"gemChance": 0.09,
"headroom": [
9,
35
],
"gemHeadroom": [
22,
31
],
"startingHeadroom": 0.4,
"intakeAge": [
10,
17
],
"startingAge": [
10,
23
],
"juniorAge": 18,
"juniorLevelDrop": 6,
"club": {
"count": 120,
"age": [
8,
13
],
"level": [
6,
26
]
}
},
"retirement": {
"youngAge": 40,
"young": 0.004,
"midAge": 62,
"spread": 4.5,
"pubAge": 56,
"pub": 0.05,
"weakLevel": 32,
"weakAge": 35,
"weak": 0.08,
"pros": 0.6,
"primeLevel": 75,
"prime": 0.1
}
}