Reference
Training settings
Training and development: how hours on the practice board turn into attributes, how AI players grow and decline between seasons, and how form, confidence and fatigue drift week to week. Every field is optional; records apply in load order, later fields winning (per area for areas, per attribute for decline). See Training and development.
- Content type
training- Files
data/training.json- Shape
- One settings object (a file may hold the object itself)
- Patch target
training:<id>, for exampletraining:core.training- In the base game
- 1 record
- Guide
- Training and development
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" | |
hours | object | Training hours a week: with the day job, and full-time (default 16 and 32). | ||
hours.dayJob | number, 0 to 80 | |||
hours.fullTime | number, 0 to 80 | |||
plan | object | The plan a new career starts with, hours per area. | ||
plan.scoring | number, 0 to 80 | Yes | ||
plan.doubles | number, 0 to 80 | Yes | ||
plan.bull | number, 0 to 80 | Yes | ||
plan.fitness | number, 0 to 80 | Yes | ||
plan.mental | number, 0 to 80 | Yes | ||
plan.rest | number, 0 to 80 | Yes | ||
areas | object | What each area trains (rest trains nothing). An area given replaces the game's list for it. | ||
areas.scoring | map (key: value) | |||
areas.doubles | map (key: value) | |||
areas.bull | map (key: value) | |||
areas.fitness | map (key: value) | |||
areas.mental | map (key: value) | |||
rate | number, 0 to 1 | Attribute points per effective hour, before every multiplier (default 0.03). | ||
span | number, 1 to 100 | Gains taper once an attribute is within this many points of its ceiling (default 50)… | ||
curve | number, 0 to 4 | …as (gap / span) ^ curve (default 0.5). | ||
spread | pair [number, number] | Each week's gains are multiplied by a random factor in this range (default [0.8, 1.2]). | ||
diminishing | object | Hours in one area beyond from count at rate (default 8 and 0.5). | ||
diminishing.from | number, 0 to 80 | |||
diminishing.rate | number, 0 to 1 | |||
professionalism | object | Professionalism's effect: × (base + range × professionalism / 100) (default 0.6 and 0.8). | ||
professionalism.base | number, 0 to 2 | |||
professionalism.range | number, 0 to 2 | |||
age | object | Growth by age: the first band whose under is above the player's age applies; after beyond the last. | ||
age.bands | list, 1 to 12 items | |||
age.bands[].under | number, 14 to 99 | Yes | ||
age.bands[].factor | number, 0 to 5 | Yes | ||
age.after | number, 0 to 5 | |||
fatigue | object | Fatigue from a week's training: (hours worked − freeHours) × perHour, less rest hours × restRelief. | ||
fatigue.freeHours | number, 0 to 80 | |||
fatigue.perHour | number, 0 to 0.1 | |||
fatigue.restRelief | number, 0 to 0.1 | |||
morale | object | Morale from a week's training: +rest with at least restHours of rest, overwork past overworkHours worked. | ||
morale.restHours | number, 0 to 80 | |||
morale.rest | number, -10 to 10 | |||
morale.overworkHours | number, 0 to 80 | |||
morale.overwork | number, -10 to 10 | |||
offseason | object | The AI's off-season growth towards their ceiling: gain × age factor × professionalism × development speed × (gap / span) ^ curve, times a random factor in spread, plus N(0, noise). Past erodeFrom potential erodes by erosion a season. tierGain: five multipliers on the growth, by the player's tier (tier 1 first). tierCeiling: the overall level a player of each tier grows towards and not past (0 = none); in tiers 3 to 5 each player's own mark lies up to tierCeilingSpread under it. | ||
offseason.gain | number, 0 to 50 | |||
offseason.span | number, 1 to 100 | |||
offseason.curve | number, 0 to 4 | |||
offseason.spread | pair [number, number] | |||
offseason.noise | number, 0 to 5 | |||
offseason.declineSpread | pair [number, number] | |||
offseason.erodeFrom | number, 14 to 99 | |||
offseason.erosion | number, 0 to 10 | |||
offseason.tierGain | list | |||
offseason.tierCeiling | list | |||
offseason.tierCeilingSpread | number, 0 to 40 | |||
decline | map (key: value) | Age decline per attribute ("default" for the attributes not listed). | ||
decline.<key> | object | Yes | How much an attribute declines with age: rate points a season for every year past from. | |
decline.<key>.from | number, 14 to 99 | Yes | ||
decline.<key>.rate | number, 0 to 5 | Yes | ||
drift | object | Week-to-week drift for every player: form and confidence settle, fatigue recovers. | ||
drift.form | object | form × keep + N(0, noise). | ||
drift.form.keep | number, 0 to 1 | |||
drift.form.noise | number, 0 to 1 | |||
drift.confidence | object | Moves pull of the way to target, + N(0, noise). | ||
drift.confidence.target | number, 0 to 100 | |||
drift.confidence.pull | number, 0 to 1 | |||
drift.confidence.noise | number, 0 to 20 | |||
drift.morale | object | |||
drift.morale.target | number, 0 to 100 | |||
drift.morale.pull | number, 0 to 1 | |||
drift.fatigue | object | fatigue × keep − recover. | ||
drift.fatigue.keep | number, 0 to 1 | |||
drift.fatigue.recover | number, 0 to 1 |
Example#
A record from the base game’s data/training.json, shortened.
{
"id": "core.training",
"hours": {
"dayJob": 16,
"fullTime": 32
},
"plan": {
"scoring": 5,
"doubles": 4,
"bull": 1,
"fitness": 2,
"mental": 2,
"rest": 2
},
"areas": {
"scoring": {
"scoring": 0.6,
"consistency": 0.25,
"tempoControl": 0.15
},
"doubles": {
"finishing": 0.6,
"checkoutKnowledge": 0.4
},
"bull": {
"bullAccuracy": 0.75,
"finishing": 0.25
},
"fitness": {
"stamina": 0.5,
"fitness": 0.4,
"concentration": 0.1
},
"mental": {
"composure": 0.35,
"resilience": 0.25,
"concentration": 0.2,
"crowdHandling": 0.2
}
},
"rate": 0.03,
"span": 50,
"curve": 0.5,
"spread": [
0.8,
1.2
],
"diminishing": {
"from": 8,
"rate": 0.5
},
"professionalism": {
"base": 0.6,
"range": 0.8
},
"age": {
"bands": [
{
"under": 20,
"factor": 1.35
},
{
"under": 24,
"factor": 1.2
},
/* … 4 more */
],
"after": 0.25
},
"fatigue": {
"freeHours": 14,
"perHour": 0.008,
"restRelief": 0.02
},
"morale": {
"restHours": 2,
"rest": 1,
"overworkHours": 24,
"overwork": -1.5
},
"offseason": {
"gain": 9,
"span": 30,
"curve": 0.8,
"spread": [
0.6,
1.3
],
"noise": 0.6,
"declineSpread": [
0.6,
1.4
],
"erodeFrom": 34,
"erosion": 0.8,
"tierCeiling": [
91.5,
91.5,
/* … 3 more */
],
"tierCeilingSpread": 12
},
"decline": {
"eyesight": {
"from": 36,
"rate": 0.35
},
"stamina": {
"from": 34,
"rate": 0.3
},
"fitness": {
"from": 34,
"rate": 0.3
},
"scoring": {
"from": 40,
"rate": 0.25
},
"finishing": {
"from": 40,
"rate": 0.25
},
"bullAccuracy": {
"from": 40,
"rate": 0.25
},
"consistency": {
"from": 42,
"rate": 0.2
},
"tempoControl": {
"from": 42,
"rate": 0.2
},
"default": {
"from": 48,
"rate": 0.15
}
},
"drift": {
"form": {
"keep": 0.88,
"noise": 0.07
},
"confidence": {
"target": 60,
"pull": 0.06,
"noise": 1.2
},
"morale": {
"target": 65,
"pull": 0.05
},
"fatigue": {
"keep": 0.55,
"recover": 0.03
}
}
}