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 example training: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.

FieldTypeRequiredDefaultNotes
ididYesNamespaced id, e.g. "core.player.rory-calder"
hoursobjectTraining hours a week: with the day job, and full-time (default 16 and 32).
hours.dayJobnumber, 0 to 80
hours.fullTimenumber, 0 to 80
planobjectThe plan a new career starts with, hours per area.
plan.scoringnumber, 0 to 80Yes
plan.doublesnumber, 0 to 80Yes
plan.bullnumber, 0 to 80Yes
plan.fitnessnumber, 0 to 80Yes
plan.mentalnumber, 0 to 80Yes
plan.restnumber, 0 to 80Yes
areasobjectWhat each area trains (rest trains nothing). An area given replaces the game's list for it.
areas.scoringmap (key: value)
areas.doublesmap (key: value)
areas.bullmap (key: value)
areas.fitnessmap (key: value)
areas.mentalmap (key: value)
ratenumber, 0 to 1Attribute points per effective hour, before every multiplier (default 0.03).
spannumber, 1 to 100Gains taper once an attribute is within this many points of its ceiling (default 50)…
curvenumber, 0 to 4…as (gap / span) ^ curve (default 0.5).
spreadpair [number, number]Each week's gains are multiplied by a random factor in this range (default [0.8, 1.2]).
diminishingobjectHours in one area beyond from count at rate (default 8 and 0.5).
diminishing.fromnumber, 0 to 80
diminishing.ratenumber, 0 to 1
professionalismobjectProfessionalism's effect: × (base + range × professionalism / 100) (default 0.6 and 0.8).
professionalism.basenumber, 0 to 2
professionalism.rangenumber, 0 to 2
ageobjectGrowth by age: the first band whose under is above the player's age applies; after beyond the last.
age.bandslist, 1 to 12 items
age.bands[].undernumber, 14 to 99Yes
age.bands[].factornumber, 0 to 5Yes
age.afternumber, 0 to 5
fatigueobjectFatigue from a week's training: (hours worked − freeHours) × perHour, less rest hours × restRelief.
fatigue.freeHoursnumber, 0 to 80
fatigue.perHournumber, 0 to 0.1
fatigue.restReliefnumber, 0 to 0.1
moraleobjectMorale from a week's training: +rest with at least restHours of rest, overwork past overworkHours worked.
morale.restHoursnumber, 0 to 80
morale.restnumber, -10 to 10
morale.overworkHoursnumber, 0 to 80
morale.overworknumber, -10 to 10
offseasonobjectThe 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.gainnumber, 0 to 50
offseason.spannumber, 1 to 100
offseason.curvenumber, 0 to 4
offseason.spreadpair [number, number]
offseason.noisenumber, 0 to 5
offseason.declineSpreadpair [number, number]
offseason.erodeFromnumber, 14 to 99
offseason.erosionnumber, 0 to 10
offseason.tierGainlist
offseason.tierCeilinglist
offseason.tierCeilingSpreadnumber, 0 to 40
declinemap (key: value)Age decline per attribute ("default" for the attributes not listed).
decline.<key>objectYesHow much an attribute declines with age: rate points a season for every year past from.
decline.<key>.fromnumber, 14 to 99Yes
decline.<key>.ratenumber, 0 to 5Yes
driftobjectWeek-to-week drift for every player: form and confidence settle, fatigue recovers.
drift.formobjectform × keep + N(0, noise).
drift.form.keepnumber, 0 to 1
drift.form.noisenumber, 0 to 1
drift.confidenceobjectMoves pull of the way to target, + N(0, noise).
drift.confidence.targetnumber, 0 to 100
drift.confidence.pullnumber, 0 to 1
drift.confidence.noisenumber, 0 to 20
drift.moraleobject
drift.morale.targetnumber, 0 to 100
drift.morale.pullnumber, 0 to 1
drift.fatigueobjectfatigue × keep − recover.
drift.fatigue.keepnumber, 0 to 1
drift.fatigue.recovernumber, 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
    }
  }
}

Written for Darts Player Simulator 0.50.32. Built from the game's own schemas and its base pack.