Guide
Tuning
The game's balance numbers that are not part of a larger settings file (career rules, world, population, load, medical, training) are tuning values: one number each, by key, in data/tuning.json.
{
"id": "my-mod.tuning",
"values": {
"goals.maxGoals": 4,
"overdraft.maxLimit": 50000
}
}- Give only the values you want to change. Several mods can ship a tuning file: they apply in load order, later values winning key by key.
- Values are numbers, or for a few keys a list of numbers. A whole-number value (an age, a count of days) is rounded.
- Unlike most content, tuning is read from the installed packs, not from the copy a career took when it started: a change reaches careers already under way the next time the game loads its mods.
- A key the game doesn't know is ignored.
The core pack's data/tuning.json has every value. What they mean:
Awards#
| Key | Core value | Meaning |
|---|---|---|
awards.defaultMinDarts | 1500 | Darts a player needs for an average award when the criterion doesn't say. |
season.newcomerMinMoney | 10000 | Prize money a newcomer needs in their first season to be up for Best Newcomer. |
rankings.windowDays | 730 | Days that prize money counts in the Order of Merit and the other two-year tables after it is won. Seeded money and money in older saves has no date and leaves a month at a time over its year. |
Development#
| Key | Core value | Meaning |
|---|---|---|
development.ceilingSpan | 6 | Points below a tier's ceiling over which growth fades to nothing. |
development.potentialCeiling.from | 74 | off the Pro Tour (tiers 3 to 5) a player's tier ceiling rises for each point of potential over this. |
development.potentialCeiling.perPoint | 1.1 | The rise a point of potential: a potential-90 prospect's Challenge Tour mark is 17.6 higher (79 less his spread of up to 12, plus 17.6), so the best prospects outgrow the tier and can win a Tour Card. 0 turns it off. |
Followers (how fast they grow)#
| Key | Core value | Meaning |
|---|---|---|
followers.followerSoftCap | 1000000 | Where a tier-1 star's growth has slowed right down: gains land at 1/2 here, much less beyond. |
followers.followerCeiling | 4000000 | Nobody gets past this, however much they win. |
followers.reachByTier | 1, 0.85, 0.6, 0.3, 0.2 | How much of any follower gain of yours reaches people, by your tier (tier 1 first). A pub player's story is seen by few. |
followers.youthAges | 12, 16, 18 | Ages under which a youth factor applies (the first one you are under counts). |
followers.youthFactors | 0.15, 0.35, 0.7 | The factor for each of those ages: a child's following is a family's and a club's. |
followers.lumpShare | 0.25 | One gain (a story, a result, an interview) is never more than this share of the following you have. |
followers.lumpFloor | 40 | ...but may always be this many, so a new account can grow. |
Reading equipment#
| Key | Core value | Meaning |
|---|---|---|
kit-read.feelAt | 0.45 | Where a familiar item's fit becomes a feel (feelOf). |
kit-read.trialsMax | 3 | Trial sessions per item, and how much each one teaches you. |
kit-read.trialKnow | 0.2 | How much each trial session teaches you about an item. |
kit-read.knownWidth | 0.1 | Half-width of the band once you know an item. |
kit-read.specBlur | 0.3 | How far a reader can misjudge the spec with no clarity at all. |
kit-read.avgSpread | 6 | Match averages vary about this much from night to night (before there's enough to measure). |
kit-read.compareMin | 3 | Matches with a setup before its numbers mean anything, and before they mean much. |
kit-read.compareFirm | 8 | Matches with a setup before its numbers mean much. |
The league#
| Key | Core value | Meaning |
|---|---|---|
league.leaguePointsPerWin | 2 | League points for a win. |
league.leagueWildcards | 2 | Wildcard places in the league. |
league.wildcardPoolRank | 32 | Wildcards come from inside this Order of Merit rank when enough are there. |
county.superLeagueLegs | 24 | The legs a player's Super League average (the average their level throws) counts for on the county's selection table, average:<tour>, beside the legs they play for the county this league year (singles in the league, matches at the county's own events). Every player is on the table; the more county legs they play, the more those decide their place. |
county.transferFromMonth | 7 | The first month of the county close season. A player who has played for their county this season may ask to move from this month, and the move counts from the next season; before any county game in a season a move counts at once. |
Stories#
| Key | Core value | Meaning |
|---|---|---|
narrative.groupCooldownWeeks | 52 | Weeks before another story of the same group can fire, when the story does not set groupCooldownWeeks. |
narrative.minWeeklyCooldown | 26 | Floor on how often any one weekly story can come round again. |
Negotiation#
| Key | Core value | Meaning |
|---|---|---|
negotiation.maxSeasons | 3 | The longest deal that can be negotiated, in seasons. |
negotiation.lengthCost | 0.05 | Each season longer or shorter than they want, as a share of the opening value. |
Records#
| Key | Core value | Meaning |
|---|---|---|
engine-record-book.recordMinLegs | 8 | Legs a match needs before its average can be a record, in the record book and in a player's personal bests. Real lists quote long, televised matches; a best-of-five would give 125 and more. (Before the setting existed: 5.) |
Top players' floor days#
The computer's highest earners do not play every floor day of the pro tour (the tour with the role pro; a floor day is an event of it that is not a major, televised, a qualifier, a league night or a team event). One of them sits a day out only for a reason: they play abroad a few days before or after it, or a major they are in starts soon. While they are still chasing the tour's finals (the event tagged playersFinals) they enter everything. Their places go to reserves: the best players of the feeder tour without a card.
| Key | Core value | Meaning |
|---|---|---|
floor-rest.topRank | 16 | Order of Merit rank down to which a computer player picks their floor days. 0 turns the rule off: everybody enters everything. |
floor-rest.travelDays | 8 | An event in another country that ended this many days or fewer before the floor day, or starts this many or fewer after it, is a trip: the player sits the floor day out. |
floor-rest.majorDays | 14 | A major the player is in that starts this many days or fewer after the floor day is close: they sit the floor day out. |
floor-rest.safeMargin | 1.25 | Safe for the finals: your money on the tour is this many times what the last qualifying place is heading for (its money now, at the same pace over the floor days still to come). Below that you are chasing and enter every day. |
Training#
| Key | Core value | Meaning |
|---|---|---|
training.rate | 0.03 | Training pace: the base gain per effective hour. |
training.span | 50 | Gains are at full speed this many points or more below an attribute's ceiling, then taper. |
training.curve | 0.5 | How sharply gains taper near the ceiling. |
training.balanceFree | 8 | An attribute this far above your overall level still trains at full pace… |
training.balanceSpan | 6 | …and over this many more points its pace falls to the floor. |
training.balanceFloor | 0.02 | The slowest pace of an attribute far above your overall level, as a share of full pace. |
Shot-making#
| Key | Core value | Meaning |
|---|---|---|
shot-making.goMax | 8 | The most that going for it can weigh (a certain finish by the opponent would be infinite). |
shot-making.goFlair | 0.3 | How much flair adds to going for the big finish. |
shot-making.goAggressive | 0.5 | How much an aggressive player adds to going for it. |
shot-making.goSafe | 0.5 | How much a cautious player takes off going for it. |
The throw#
| Key | Core value | Meaning |
|---|---|---|
throw.wireZone | 0.4 | Wire proximity (mm) inside which a dart can bounce out. |
throw.bounceChance | 0.003 | The chance a dart that lands within the wire zone bounces out. |
throw.clashChance | 0.014 | The chance a dart that lands within throw.clashMm of a dart already in the board (earlier in the same visit) deflects out. Most real bounce-outs are these, so the first dart of a visit rarely bounces out and the third most often. The points' bounce lever multiplies it as it does the wire chance. |
throw.clashMm | 6 | The distance (mm) from a dart in the board inside which a dart can clash with it. |
throw.pressureSpread | 1 | How much a dart's spread grows under pressure (a televised match, high stakes, a hostile crowd, a deciding leg, a dart at a double to win): spread × (1 + pressure × this × (throw.pressureComposure − Composure/100) × confidence × tempo). |
throw.pressureComposure | 0.96 | The Composure (as a fraction) at which pressure neither widens nor tightens the spread: a player below it throws wider under pressure, one above it tighter. Owner's choice of 2026-10-10 (, "gentle"): with 1 and 0.96, five points of Composure are worth about what five points of Finishing are. Before that the pair was 0.22 and 1.2, and Composure made almost no difference. |
throw.nineDartNerves | 1.75 | On for a nine-darter: spread grows by this × (1.25 − Composure/100) on the second visit while it's still perfect and on the 141 that finishes it. The arena holds its breath; without it grouped visits make nine-darters far too common. |
The match on screen#
| Key | Core value | Meaning |
|---|---|---|
camera.humanOverShoulder | 0 | Whether the TV director cuts to the shot over your own shoulder when you step up to throw (held until you press THROW). 0 keeps the board camera on the board for your visits; the opponent's visits always get the shot. 1 switches it back on. |
camera.phoneYaw | 0 | how far round to the right (degrees) the phone's board camera looks from in its standard shot. 0 looks straight on, so a dart that went in straight looks straight; the desktop camera keeps its own angle. |
board.dartPitchMin, board.dartPitchMax | 2, 6 | how far flights-high (degrees) a dart sits in the board, picked between the two for each dart. |
board.dartLeanMin, board.dartLeanMax | -2, 2 | how far a dart leans sideways in the board (degrees, + to the right), picked between the two. |
board.dartFanMax | 8 | the most a dart landing by another may sit flights-high (degrees) to keep its flight clear of the seated ones. |
walkon.holdMaxMs | 12000 | The TV walk-on waits on its "Round" opener until the 3D stage has built both players and the arena, so the tunnel opener and the walk down the walkway play; this is the longest it waits (ms) before it goes on regardless. 0 for no wait. |
shirt.cloth | 0 | Whether the darts shirts on the 3D stage are simulated cloth (the sleeves' ends and the hem free to swing and settle; the arms and the trousers' top drawn under the shirt) instead of the skinned shirt. 0 keeps today's shirt; a mod can switch it on, and the player's graphics option "Cloth shirts" (Settings, display.clothShirts, off by default;) turns it on over a 0 here. Simulated cloth runs on every character wearing it, so it costs frame time. |
shirt.compositorReleaseMs | 10000 | how long the shirt compositor (the designers' previews, the shop's shirt pictures, the stage's designed shirt) waits after its last drawing, with no shirt designer open, before it lets go of its renderer and decoded base images (about 46 MB), in milliseconds. The next drawing makes them again, so nothing looks different; a shorter time saves memory sooner and costs a re-read of the images more often. A designer closing starts the wait again. Below 0 never lets go (only the stage closing does). |
stage.juniorHeadScale | 0.12 | how much larger than modelled the head of a match stage's standard model (a computer junior, or the human without a created character) is drawn for the youngest child, as a share of its size; an older child gets its create.youthByAge share of it. The body itself stands at the age's share of the grown height (create.heightByAge), the throw's hand path shrinking with the arm so the dart still leaves the hand. |
stage.leftoversDelayMs | 20000 | How long after the last 3D stage closed the game lets go of what it cached for the stage (the players' decoded textures, the shirt designs' flat shots, the shirt compositor's renderer; some 250 MB), in milliseconds. A stage opening in that time keeps them: between an event's rounds the next match's stage comes up within seconds. 0 releases at once. |
app.backgroundSaveMs | 3000 | when the game goes to the background (a phone's home button, another app), it writes the open career at once, whatever the autosave setting, since the phone may end a game in the background without a word. This is how long it waits for that write, in milliseconds; a long job still running keeps the write queued behind it. |
stage.rasterBudgetMb | 128 | how many megabytes of float pictures the stage may hold at once while it draws its pictures (boards, screens, signs: each is drawn at 16 bytes a pixel, 64 MB for a 2048 px one). The game's memory keeps the size of its highest point for the rest of the session, so a lower figure makes the game smaller after a stage is built, at the cost of a slightly longer build; a picture larger than the whole figure is drawn alone. The pictures are the same whatever the figure. 0 or below: no limit (four pictures at once). On a device with less memory than stage.lowMemoryMb, the smaller of this and stage.rasterBudgetMbLowMemory. |
stage.lowMemoryMb | 6000 | The device memory, in megabytes, below which the stage draws its pictures with stage.rasterWorkersLowMemory workers and a budget of stage.rasterBudgetMbLowMemory (a 4 GB iPhone, where iOS stops an app at about 2 GB, was stopped while a match loaded). At or above it nothing changes. 0 or below: never. |
stage.pictureCacheMb | 96 | how many megabytes of finished stage pictures (the board's number ring and surround, the event's screens and signs) the game keeps after a stage closes, so the next match, highlights or practice board shows them without drawing them again (about 0.7 s and a 128 MB peak on a PC for a whole board). A picture is only reused when everything that draws it is the same, so it looks the same; an event's own logo or backdrop makes new ones. When a new picture would pass the figure, the ones used longest ago go. 0 or below: none are kept. On a device with less memory than stage.lowMemoryMb, stage.pictureCacheMbLowMemory instead. |
stage.pictureCacheMbLowMemory | 0 | stage.pictureCacheMb on a device under stage.lowMemoryMb. 0 or below: none are kept there. |
stage.rasterBudgetMbLowMemory | 48 | stage.rasterBudgetMb on a device under stage.lowMemoryMb (the smaller of the two applies). 0 or below: the usual budget. |
stage.rasterWorkersLowMemory | 2 | How many pictures the stage draws at once on a device under stage.lowMemoryMb (elsewhere one per processor, at most four). 0 or below: the usual number. |
stage.rasterBudgetMbPhone | 48 | stage.rasterBudgetMb in the phone game, whatever the phone's memory (the smaller of the two applies; under stage.lowMemoryMb the smallest of the three). A phone's managed heap keeps the room every burst of drawing took, and the pictures drawn in the lobby for the match ahead grew it by 400 MB on a 12 GB phone. 0 or below: the usual budget. |
stage.rasterWorkersPhone | 2 | How many pictures the phone game draws at once, whatever the phone's memory (never more than the usual number). 0 or below: the usual number. |
stage.boardTexturePxPhone | 1024 | The most pixels a side of the board's pictures (the face, the number ring, the surround, the wall) has in the phone game, whatever the quality setting. A 2048 px face is 64 MB of floats to draw and 21 MB on the graphics card; the phone shows the board at a fraction of that. 0 or below: the quality's size. |
walkon.prebuild | 0 | 1: while you are in the lobby of a televised match the game builds the match's 3D stage and both players ahead, so the walk-on starts at once when you press Play; the lobby then stops for about five seconds in all while it builds and holds about 2.4 GB more. 0 (the core pack since 2026-10-10,): the lobby builds nothing, and the walk-on waits on its opener (the round card) until the stage is ready, at most walkon.holdMaxMs. |
housing.enabled | 1 | 1: where you live is paid for by the month from the housing and loans data (rent on an agreement, bills, mortgages, loan payments), and the Finances page has its Home & loans tab. 0: a career pays the career rules' flat weekly living cost, nothing by the month, and the tab is not shown. |
calendar.duesSoonDays | 21 | The calendar says beside an event's Enter button when the month's home and loan payments fall before the event, with the bank after the entry, the travel and them. Only when those payments are due within this many days. 0: never. |
calendar.projectedWeeks | 4 | The calendar says how many players a country's event is expected to draw ("about 34 of 48 expected") when that is not its written size, for events that start within this many weeks. Each asks the game to draw the field once a day, so a wide window slows the calendar. 0: never. |
move.computer.paybackSeasons | 2 | nobody has to live where the tour is. Once a season, at the new year, a computer player holding a Tour Card works out what the season's card tour events (tours with requiresTourCard) would have cost to get to from each country they are in, against from home. They move when the saving over this many seasons covers the move and the saving is at least move.computer.minShare of the bill. 0: nobody moves. |
move.computer.settle | 1500 | What a move costs a computer player beyond its fare by the travel rules. |
move.computer.minShare | 0.6 | The least share of the season's bill a move must save. A move is a new life, made for a big saving: from the core's figures a card holder in Australia or the United States saves 78 to 85% by living in England, one in Germany 52%, one in the Netherlands or Ireland 17 to 31%, so only the far ones move. |
move.computer.chance | 0.25 | The chance a season that a computer card holder for whom a move pays makes it: not everyone who could does. |
move.letter.minSaving | 1000 | The human holding a Tour Card gets a letter at the new year when the season's card tour events would have cost at least this much less from another country. It names the country and the saving; the player decides. 0: no letter. |
move.minWeeksBetween | 52 | After a move to another country, how many weeks pass before the player may move again (the confirm of a move names the day). 0: no wait. A Tour Card won while living abroad sets the wait aside for the move it offers. |
Junior careers: where a child starts#
| Key | Core value | Meaning |
|---|---|---|
create.juniorFullAge | 16 | The age from which a career is an adult's: the creator's junior rung and texts, no facial hair below it. a career started as a child starts below the difficulty's level; the potential is not lowered (it is measured from the adult start). |
legacy.retireMinAge | 18 | The Legacy page offers a farewell season or retiring from this age; a younger player cannot announce or retire, and a news item marks the birthday. |
letters.childAge | 14 | below this age a letter is written in its text's .child form when the pack has one (a rival at the junior events, a backer looked over with the family, the doctor's word after an injury). A text with no .child form reads as it always has. |
create.juniorYoungest | 10 | The youngest age a career can start at, and the age the first entry of create.juniorLevelByAge is for. |
create.juniorLevelByAge | [13, 19, 22, 26, 36, 36] | the starting level of a career started as a child, one entry an age from the youngest (ten, eleven, twelve, thirteen, fourteen, fifteen); an age past the table's end starts at the difficulty's level, as an adult does. The core table puts a child in the lower third of the computer's players born the same year (at ten the year's median is 15 to 18, at twelve 25, at thirteen 28), and never above the difficulty's own level: from fourteen the world's juniors of a year are its future professionals and their lower third is above a new adult's start, so a child of fourteen or fifteen starts where an adult does. An entry above the difficulty's level is clamped to it. |
create.juniorLevelAt | 36 | The difficulty level the table above is written for (normal's). A career on another difficulty scales the table by its level over this one: easy (42) starts a ten-year-old at 15, hard (30) at 11. |
create.potentialHeadroom | 60 | a new career's hidden potential is its starting level plus this many points (up to age 21), with a seeded spread of up to 5 either way. The core's 60 lets most careers that start young earn a Tour Card (measured: 17 of 18 starting at 16, 3 of 18 starting at 25, within eight to ten seasons); it was 40 in the code before. Potential is set at creation, so a career already under way keeps what it had. |
create.potentialTaper | 0.8 | the headroom shrinks by this much for each year a new career starts past 21 (no cliff), so a late starter has less room to grow. |
create.developmentRange | [35, 74] | how fast a new career learns (Development, 0 to 99; 50 is normal speed) is drawn from its seed within this range, as eyesight is: the core's runs from Steady (35) to Quick (74), so no new career is Slow or Rapid. Age works on growth separately, through the training's age factor. A career made before keeps the rate it had. |
create.heightByAge.m | [0.775, 0.805, 0.84, 0.875, 0.92, 0.955, 0.98, 0.99, 1] | how tall a boy stands as a share of his grown height, one entry an age from create.juniorYoungest (ten to eighteen); past the table's end he is grown. A look's height slider is the height when grown, so the random looks and seeded looks keep their values; the figure in the creator, the summary line and the career record show the height at the age. The core rows follow UK growth charts (a boy of ten stands about 138 cm, of twelve 150, of fourteen 164, of sixteen 174). |
create.heightByAge.f | [0.84, 0.875, 0.92, 0.955, 0.975, 0.99, 1] | The same for a girl, ten to sixteen (138 cm at ten, 151 at twelve, 160 at fourteen); girls reach their grown height earlier. |
create.youthByAge.m | [1, 0.9, 0.78, 0.65, 0.5, 0.35, 0.2, 0.08, 0] | how much of a child's shape a boy still has, one entry an age from create.juniorYoungest (ten to eighteen): 1 is the youngest child's shape, 0 grown. The created character's head, face and build move from the look's grown values towards the child offsets in the character catalogue (growth: a larger head and eyes, a shorter neck, a smaller nose, chin and jaw, fuller cheeks, narrower shoulders, a lighter build) by this share; the match stage's standard models get a head larger by this share of stage.juniorHeadScale. The look itself keeps its grown values. |
create.youthByAge.f | [1, 0.85, 0.68, 0.5, 0.32, 0.15, 0] | The same for a girl, ten to sixteen. |
create.youthLegs | 0.08 | how much shorter the youngest child's thigh bones are drawn, as a share of their length (an older child gets its create.youthByAge share of it). The created character's legs are scaled on the skeleton after every DNA pass, and the whole figure is lifted back to the height the age table gives, so the torso and head come out larger for the body, as a child's are. |
create.youthArmOut | 5 | how many degrees further out from the body the youngest child's arms hang in the creator's idle (an older child its create.youthByAge share), a child's looser stance. |
create.youthHeadScale | 0.1 | how much larger the youngest child's head bone is drawn (an older child its create.youthByAge share), on top of the catalogue's growth DNA offsets; the hair and face follow the bone. |
create.youthBustAge | 14 | a girl younger than this is drawn with no bust (the breast DNA at zero), whatever the look's chest slider says; from this age the catalogue's growth offset fades in with create.youthByAge. |
create.youthLegShare | 0.47 | The legs' share of standing height, used for that lift: the figure is scaled by 1 / (1 − share × shortening). |
Currencies#
How money can be shown (Settings > Language > Currency). The game keeps its books in pounds; these are display only and reach careers under way. Read from the core pack's file at start-up (a mod's tuning record does not change them). Each currency's name is the text settings.currency.name.<code in lower case>.
| Key | Core value | Meaning |
|---|---|---|
money.currencies | ["GBP", "EUR", …, "ZAR"] | the currencies on offer, in the settings' order. Pounds are always first. A code without a rate is left out. |
money.rate.<CODE> | money.rate.EUR 1.15 | Units of the currency per £1, a fixed rough mid-market rate; converted amounts are rounded the way a tour prints them. |
money.display.<CODE> | "narrowSymbol" | "symbol" (A$, HK$, CN¥: a sign that can't be mistaken for another country's) or "narrowSymbol" (€, kr, zł). |
money.sign.<CODE> | money.sign.PLN ["PLN", "zł"] | The symbol and narrow sign for a currency the language's own tables don't have. A language that has one keeps its own. |
Nations#
| Key | Core value | Meaning |
|---|---|---|
nations.defaultMarket | 0.9 | A sponsor market for a nation that doesn't set one. |
nations.depth.levelPerPoint | 0.06 | A made player's level shift a point of his nation's depth from nations.depth.mid (60): +2.4 at depth 100, −2.4 at 20 (Nations). |
scenes.homeCountryEntry | 1 | 1: a country's residents-only events (its Host Nation Qualifiers, local and national tours) also take players whose nationality it is, wherever they live; 0: only those who live there. A player a scene made (its locals, young players and club juniors, until it brings them through) goes by where they live either way. |
studio.newCountry.backgroundYouth | 0 | The Mod Studio's "New country": the population.backgroundYouth it writes on the scene it makes… |
studio.readOnlyTypes | ["quickResults"] | Content types the Mod Studio shows and does not edit, because a tool makes their records. |
studio.eventRun.max | 52 | The most copies the Mod Studio's "Copy to dates" makes from one event in one go. |
studio.newCountry.clubVenues, studio.newCountry.clubNights | pubs and clubs; club nights, pub takeovers, charity nights | The Mod Studio's "New country": which of the made venues become exhibition places for club nights (venue kind:place kind pairs) and which kinds of night they host… |
studio.newCountry.bigVenues, studio.newCountry.bigNights | halls; the five big nights | …and the same for the nights a well-known player is offered. |
studio.newCountry.backgroundLocals | 16 | …its population.backgroundLocals: the local adults who fill the events the country stages while it is in the background… |
studio.newCountry.backgroundJuniors | 10 | …and its population.backgroundJuniors. A scene that names neither tops its young players up every year in the background (see Scenes). |
The generated world#
| Key | Core value | Meaning |
|---|---|---|
population.juniorLevelFloor | 6 | No generated junior starts below this level (a ten-year-old who has just picked the darts up). |
scenes.broughtThrough.ages | [16, 23] | the ages (on 1 January) of the young players a scene with population.pros brings through, or makes when it has none. |
scenes.broughtThrough.headroom | [6, 18] | a player brought through has a potential of the scene's ceiling (or their level if higher) plus a draw from this range, no higher than 98. |
population.maxHeadroom | 22 | Most headroom potentialFor gives (teenagers); potentialHeadroom scales against it. Kept modest so the starting world's youngsters grow into it without inflating every tier. |
Mod scripts#
| Key | Core value | Meaning |
|---|---|---|
scripts.maxStepsPerCall | 20000000 | Statements one script call (a hook, or the load) may run before it is stopped as stuck and the script switched off for the career (Scripts). Steps, not time: the same on every machine. |
Exhibition bookings#
| Key | Core value | Meaning |
|---|---|---|
bookings.leadMin | 10 | Offers are for nights this many days ahead, at least… |
bookings.hoursLostBase | 3 | Practice hours an exhibition night costs before travel. |
bookings.hoursLostPerTravelDay | 4 | Practice hours each travel day of a night costs. |
bookings.journeyDays.home | 0 | Travel days added to a night at home. |
bookings.journeyDays.area | 0 | …in a neighbouring country. |
bookings.journeyDays.continent | 1 | …elsewhere on the continent. |
bookings.journeyDays.longHaul | 3 | …on another continent. |
bookings.leadMax | 45 | …and at most. |
bookings.offerDays | 21 | Offers stay open this long (and never past a few days before the night). |
bookings.pairsShareMax | 0.1 | Pairs nights are at most this share of the exhibition offers; a pairs night drawn over it gives its slot to another night. |
bookings.pairsGapDays | 28 | No pairs night is offered within this many days of a pairs night already booked, either side. |
bookings.pairsWindowOffers | 20 | The hard count: among any this many exhibition offers in a row, pairs nights are at most bookings.pairsShareMax of them, rounded down (2 in 20); 0 turns the count off. |
bookings.placeShare.country | 80 | With an agent: the share of a night's offers held in the country you live in… |
bookings.placeShare.circuit | 15 | …in another country of its circuit… |
bookings.placeShare.elsewhere | 5 | …and anywhere else. Counted among those the night has a place in; on your own only the home circuit rings. |
bookings.minAge | 16 | private refreshOffers(force = false): void. rng('bookings', today). the age from which exhibition nights are offered. |
Sponsors and stories#
| Key | Core value | Meaning |
|---|---|---|
depth.rivalChance | 0.12 | chance a second brand in the same category bids too. |
depth.brandMinFollowers | 10000 | A following this big gives you standing: sponsors that are not grassroots start to approach you. |
depth.brandMaxRank | 128 | ...or an Order of Merit place this high. |
depth.brandMinRating, depth.brandMinMatches, depth.brandMinWinRate | 50, 12, 0.4 | ...or results: this rating, with this share of at least this many matches won this season. |
depth.grassrootsChance | 0.5 | Without standing, the monthly chance of an approach is multiplied by this, and only grassroots sponsors call (whatever their tier range). |
depth.grassrootsMinMatches | 5 | Without standing, nobody calls before you have played this many matches in the season. |
depth.happeningDays | 28 | how long a negotiation happening stays news for stories. |
depth.storyWindowDays | 14 | how long a story waits for your answer. |
depth.juniorSponsorValue | 0.3 | the share of an adult's sponsor money a deal is worth while you are at school. |
depth.storyStake | 500 | The money in a choice from which a story counts as a real decision. |
Reputation and followers#
| Key | Core value | Meaning |
|---|---|---|
fame.settle | 0.02 | A week takes this share of the reputation above your level. |
fame.gainFade | 15 | Results add less the further above your level you are: nothing extra is lost within 0, a fifth is all that lands this far over. |
fame.gainFloor | 0.15 | The least of a result's reputation that lands, however far above your level you are. |
fame.peakShare | 0.5 | Your level is never below this share of the best you've held. |
fame.followerDrift | 0.004 | A week takes this share of the followers above your tier's level (tiers 2–5). |
fame.idleWeeks | 8 | After this many weeks without playing, a week takes this share of all your followers. |
fame.idleDrift | 0.002 | The share of all your followers a week takes once you have been idle that long. |
fame.cardRanks | 128 | The last card holder's ranking (tier 2's range runs from the top 32 down to here). |
Junior careers: the family's backing#
| Key | Core value | Meaning |
|---|---|---|
family-backing.adultAge | 18 | The backing ends on this birthday. |
family-backing.schoolLeavingAge | 16 | Until this birthday you are at school. |
family-backing.budgetEasy | 3600 | A season's budget at school, by difficulty; half of it from sixteen. |
family-backing.budgetNormal | 2600 | A season's family budget at school on Normal. |
family-backing.budgetHard | 1800 | A season's family budget at school on Hard. |
family-backing.pocketMoney | 10 | Pocket money a week at school. |
family-backing.boardShare | 0.5 | The share of living costs paid as board at home from sixteen. |
Season goals#
| Key | Core value | Meaning |
|---|---|---|
goals.maxGoals | 3 | At most this many goals a season. |
goals.reward | 2 | Morale and confidence gained for each goal met at the season's end. |
goals.juniorRank | 16 | The Junior Series rank the junior season goal asks for. |
goals.veteransRank | 16 | the rank on the veterans tour (the tour with role "veterans") a veteran's season goal asks for, while they hold no Tour Card. |
goals.metMotivation | 4 | motivation gained for each goal met at the season's end. |
goals.missedMotivation | 6 | Motivation lost for each goal missed. |
goals.missedMorale | 1.5 | Morale lost for each goal missed. |
goals.missedImage | 2 | Image (how sponsors and the public see you) lost for each goal missed. |
goals.missedStaffMorale | 4 | Your coach's morale lost for each goal missed. |
goals.metStaffMorale | 2 | Your coach's morale gained for each goal met. |
Morale#
Morale (the human's, 5–99) changes play along two linear ramps, so every point counts a little: the low ramp runs from morale.lowAt down to morale.lowAt − morale.lowSpan (0 to full effect), the high ramp from morale.highAt up to morale.highAt + morale.highSpan. Computer players are not affected. The Training page and the hub say what the week's morale does.
| Key | Core value | Meaning |
|---|---|---|
morale.lowAt | 40 | Morale under which the low ramp starts. |
morale.lowSpan | 25 | Points below lowAt over which it reaches full effect (15). |
morale.highAt | 70 | Morale over which the high ramp starts. |
morale.highSpan | 25 | Points above highAt over which it reaches full effect (95). |
morale.trainingLow | −0.15 | Training gains × (1 + this) at the low ramp's end: −15%. |
morale.trainingHigh | 0.05 | Training gains × (1 + this) at the high ramp's end: +5% (halved 3 Nov, owner's balance ruling on). |
morale.injuryLow | 0.3 | The everyday injury causes (wear, training hours; not the workload's) × (1 + this) at the low ramp's end. |
morale.injuryHigh | 0.1 | Those causes × (1 − this) at the high ramp's end. |
morale.composureLowAt | 25 | Morale under which composure on the oche starts to suffer (through the kit's composure shift, like the workload bands). |
morale.composureLow | −3 | Composure points at the bottom of that ramp. |
morale.composureHighAt | 85 | Morale over which composure gains. |
morale.composureHigh | 2 | Composure points at the top of that ramp. |
morale.composureSpan | 12 | Points over which each composure ramp reaches full effect. |
morale.baseline | 62 | The morale the human settles back to each week at motivation 50 (computer players use the training settings' drift.morale.target). |
morale.baselinePerMotivation | 0.15 | Added to the baseline per point of motivation over 50 (taken away under). |
morale.volatilePull | 1.6 | A "volatile" temperament's weekly pull towards the baseline, as a multiple of drift.morale.pull. |
Motivation#
The human's motivation (5–99) is seeded from the save's seed and the player (motivation.start ± motivation.startSpread, no random draw) and each week moves motivation.pull of the way towards a target built from their situation. It scales the professionalism factor of every training week by 1 + motivation.trainingRange × (motivation − 50) / 50, and sets the morale baseline above. The Training page and the hub give the reasons.
| Key | Core value | Meaning |
|---|---|---|
motivation.start | 58 | A new career's motivation, before the seeded spread. |
motivation.startSpread | 12 | The seeded spread either side of start. |
motivation.pull | 0.05 | The share of the gap to the target closed each week. |
motivation.base | 50 | The target with nothing else going on. |
motivation.young | 8 | Added while younger than motivation.youngUntil. |
motivation.youngUntil | 24 | |
motivation.veteranFrom | 36 | From this age motivation.veteranPerYear a year comes off the target, up to motivation.veteranMax. |
motivation.veteranPerYear | 1.5 | |
motivation.veteranMax | 12 | |
motivation.rival | 6 | Added with a rival of at least rivalry.rivalAt intensity. |
motivation.newTour | 8 | Added through the season after your tier rose or a Tour Card was won. |
motivation.droughtFrom | 1 | Seasons without a title before the drought counts. |
motivation.droughtPerSeason | 4 | Taken off per season of drought past droughtFrom, up to motivation.droughtMax. |
motivation.droughtMax | 14 | |
motivation.richFrom | 250000 | Cash from which money in the bank dulls the hunger... |
motivation.richSpan | 750000 | ...over this much more cash, up to motivation.richMax off the target. |
motivation.richMax | 12 | |
motivation.streakFrom | 3 | A run of this many wins (losses) in a row adds (takes) motivation.streak. |
motivation.streak | 4 | |
motivation.title | 5 | Added at once for each title won. |
motivation.tourCard | 8 | Added at once at the season review for a Tour Card won for next season. |
motivation.lostCard | 6 | Taken at once at the season review for a Tour Card lost. |
motivation.trainingRange | 0.15 | Training effort at motivation 0 is 1 − this (the penalty, below 50). |
motivation.trainingRangeHigh | 0.075 | Training effort at motivation 100 is 1 + this (the boost, above 50; half the penalty's range since). |
motivation.lowAt | 40 | The texts call motivation "flat" under this... |
motivation.highAt | 72 | ...and "driven" over this. |
Equipment#
| Key | Core value | Meaning |
|---|---|---|
kit.ownEye | 0.2 | How clearly you read kit yourself, with no one to help. |
kit.trialShare | 0.04 | A trial session on the shop's oche costs this share of the price. |
kit.verdictFit | 0.5 | Slots whose fit gets a verdict message once you know it (the big ones). |
kit.sparesMax | 20 | the most spares of one item the case holds. |
Workload#
| Key | Core value | Meaning |
|---|---|---|
load.holidayDays | 4 | Days of a week a holiday must cover for the week to count as a week off. |
lobby.orderOfMeritTiers | 2 | before a match, the event lobby shows each player's rank on a table. A ranked event of a tour of this tier or above (1 is the top; the core pack's Elite Series, Continental Series and Pro Circuit) shows the Order of Merit; any other event shows its own tour's table (the Contender Tour's, the Women's Tour's), named by the tour's short name, when the tour keeps one. |
Sponsors#
| Key | Core value | Meaning |
|---|---|---|
sponsors.averageBands | [50, 60, 70, 75, 80] | Three-dart averages from which a sponsor deal is worth at least… |
sponsors.averageValues | [100, 200, 300, 400, 500] | …this much a season (the same place in the list). |
sponsors.averageMinMatches | 5 | Matches this season before its average counts; fewer, last season's. |
sponsors.proFloor | 1000 | The least a deal is worth a season with a Tour Card. |
sponsors.rankBands | [64, 32, 16, 8] | Order of Merit places inside which a deal is worth at least… |
sponsors.rankValues | [2500, 5000, 10000, 20000] | …this much a season. |
sponsors.premiumRankMax | 8 | A player this high on the Order of Merit… |
sponsors.premiumTvEvents | 4 | …who has played this many televised events this season… |
sponsors.premiumChance | 0.3 | …has this chance, for each offer, of a premium deal… |
sponsors.premiumMin | 1.5 | …worth between this… |
sponsors.premiumMax | 3 | …and this many times the floor (its own random stream). |
The floors are before a deal's own spread of 15% either way; deals already signed keep their value.
Media#
| Key | Core value | Meaning |
|---|---|---|
media.minAge | 16 | Youngest age for interviews and press conferences, and so for the regulator's media duty. |
media.dutyLetterAfterMisses | 2 | Televised interviews missed in a row (an interview given starts the count again) that bring the regulator's warning letter on the media duty. Misses up to and including that one are not fined; a miss after the warning is. At least 1. |
Medical#
| Key | Core value | Meaning |
|---|---|---|
medical.decisionDays | 14 | How long an injury decision waits before what's in place stands (like a story). |
The overdraft#
| Key | Core value | Meaning |
|---|---|---|
overdraft.incomeShare | 0.25 | The limit is this share of the last year's income… |
overdraft.minLimit | 1000 | …and never below or above these. |
overdraft.maxLimit | 25000 | The overdraft limit is never above this. |
overdraft.letterAt | 0.6 | The bank writes once you have used this share of the limit. |
The press#
| Key | Core value | Meaning |
|---|---|---|
press.callbackDays | 150 | a settled claim stays fresh enough to be thrown back this long. |
press.beatClaimDays | 365 | a "next time we meet" claim lapses after a year. |
press.upsetRatingGap | 3 | An upset (news, posts, the "not many gave you a chance" interview) also needs the beaten player rated at least this much above the winner. |
Ageing#
| Key | Core value | Meaning |
|---|---|---|
session.potentialFadesFrom | 37 | The age from which your potential comes down each winter, and from which it comes down faster. |
session.potentialFallsFrom | 45 | The age from which potential comes down faster each winter. |
session.potentialFade | 0.5 | Points of potential lost each winter from the first age. |
session.potentialFall | 1.0 | Points of potential lost each winter from the second age. |
session.overPotentialSettle | 0.25 | The most an overall rating above your potential settles back at each weekly step, in points off each rating skill (13 a year). |
Your team#
| Key | Core value | Meaning |
|---|---|---|
team.imageCeiling | 40 | Image the team can build on its own; beyond that it's down to you. |
team.approachGapDays | 180 | No agent approaches more often than this. |
team.approachStanding | 20 | Standing at which agents start to take an interest. |
Staff who act#
Coaching philosophies (staffPhilosophies, see Staff roles) suit some players and not others; two strong characters in one corner of the team clash; unhappy staff warn you, then give notice; a slumping top player may come for your coach, and you may hire a computer player's coach.
| Key | Core value | Meaning |
|---|---|---|
staff.philosophy.fitRange | 0.25 | A coach's training hooks scale by 1 + fitRange × fit (fit −1 … 1), on top of the philosophy's areas. |
staff.philosophy.misfitMorale | 8 | The coach's morale target falls by this × how far under 0 their fit is. |
staff.philosophy.fitMorale | 2 | Your own morale baseline moves by this × fit, per coach with a philosophy. |
staff.philosophy.suitAt, clashAt | 0.25, −0.25 | The fit words: suits you at or above the first, a poor fit at or below the second, a stretch between. |
staff.philosophy.revealWeeks | 6 | Weeks on the books before the exact fit shows (an analyst's scouting hook shows it at once). |
staff.clash.egoSum | 30 | Two members of one arena clash when their egos (1–20 each, from the id) add up to this or more. |
staff.clash.morale | 8 | Both clashing members' morale targets fall by this while the clash runs (not the one you backed). |
staff.clash.hookLoss | 0.1 | Share of their effects lost while the clash runs. |
staff.clash.settleWeeks | 26 | Banging heads together settles a clash for this long. |
staff.clash.settleRelationship | −5 | What banging heads costs you with each of them. |
staff.clash.calmAt | 75 | A pair who both get on with you better than this never clash. |
staff.clash.backMorale, backRelationship | 6, −5 | Backing one: their morale lift, and the other's relationship knock. |
staff.leave.goalMissed | −4 | Each season goal missed at the last review pulls every member's morale target down by this all season. |
staff.leave.rankDropSpan, rankDrop | 24, −6 | Places lost on the Order of Merit since the season began, up to the span, pull the target down to this. |
staff.leave.warnAt | 35 | Morale under this brings a warning letter with the reasons (once per spell). |
staff.leave.noticeEffect | 0.5 | A member working their notice (the existing noticeWeeks) works at this share. |
staff.leave.ambitionAt | 14 | Ambition from which a member wants a winner. |
staff.leave.resultsChance | 0.35 | At the season's end, an ambitious member with two goals missed or the rank span lost leaves with this × ambition / 20. |
staff.poach.rankMax | 32 | A slumping computer player ranked inside this may come for your coach. |
staff.poach.qualityMin | 3 | Only a coach of at least these stars draws an approach. |
staff.poach.moraleAt | 55 | An approach needs the coach's morale under this, or ambition ≥ ambitionAt with your standing under the player's. |
staff.poach.chance | 0.5 | The approach's chance when the conditions hold (stream staff-poach). |
staff.poach.raise | 0.3 | The first offer: the coach's wage × (1 + raise). |
staff.poach.answerWeeks | 2 | Weeks you have to answer; silence lets the coach go. |
staff.poach.secondChance, secondRaise | 0.5, 0.2 | After you match, the player may raise once more (a second draw keyed by the day): wage × (1 + secondRaise). Never a third. |
staff.poach.matchedMorale, matchedRelationship | 10, 5 | What a coach you fought for feels. |
staff.poach.unsettledExits | 4 | A computer player whose last this many tier 1–2 results were early exits (or who announced retiring) has a coach on the market. |
staff.poach.marketMax | 2 | At most this many world coaches in a month's market (nearest in standing first). |
staff.poach.premium | 0.2 | A world coach asks the role's fair wage × (1 + premium). |
world.form.coachLostWeeks, coachLostComposure | 8, −2 | The modifier on a computer player whose coach you hired. |
rivalry.poachHeat | 0.1 | Heat added to a rivalry when a rival takes, or loses, a coach. |
The throw model and the generated players#
| Key | Core value | Meaning |
|---|---|---|
throw.visitCorrelationMin | 0.2 | How much the three darts of a visit share one error, for a player with Tempo Control of 50 or less. Higher means grouped visits (and 180s) are more common. |
throw.visitCorrelationMax | 0.5 | The same for a player with Tempo Control of 100; in between it rises evenly. |
strategy.scoringZone | 200 | Above this score the computer players just score on their preferred treble. Read when a player's strategy tables are built, so a change shows after a restart. |
strategy.routes.doubleCost | 1, 0.45, 0.7, 0.3, 0.6, 0.4, 0.6, 0.1, 0.55, 0.2, 0.55, 0.25, 0.55, 0.35, 0.55, 0, 0.5, 0.2, 0.5, 0 | How little players like finishing on each double, D1 to D20 (0: the doubles they practise most). A dart pays the cost of the double it plays for: the one it finishes on, or the best double of the shortest finish it leaves. |
strategy.routes.bullCost | 0.45 | The same for finishing on the bull. |
strategy.routes.favouriteDouble | 0.4 | What a player's favourite double takes off its cost: a nudge, not a rule. |
strategy.routes.finishShare | 0.5 | The share of the cost paid for a double in front of the player (34 is the double 17, not a single 2 and the double 16). |
strategy.routes.nextVisit | 0.5 | The share paid for the double a dart leaves for next visit, when this visit cannot finish. |
strategy.routes.weight | 0.01, 0.04 | Visits per unit of cost, for Checkout Knowledge 0 and 100 (evenly between). The strategy table still decides routes that are not close; this settles the close ones. Read once per player per match. |
population.gameTier5Level | 46, 9, 24, 66 | The level range of the lowest tier's generated players (the pub level): mean, spread, lowest, highest. |
population.favouriteDoubles | 16, 16, 20, 20, 8, 10, 12, 18, 4, 14 | The doubles a generated player's favourite is drawn from (a number listed twice is twice as likely). |
season.newcomerFavouriteDoubles | 16, 20, 8, 10, 12, 18 | The same for each winter's newcomers. |
Invitations#
| Key | Default | What it does |
|---|---|---|
invitations.sendDays | 14 | How many days before an invited event (on a tour with replyToInvitations) the player's invitation comes |
invitations.replyDays | 7 | How many days the player has to reply; never past the day before the event |
Your rivalries#
Only your hottest few rivalries count, only a meaningful meeting feeds one, and after a few meetings only a balanced head-to-head keeps it growing. Rivalries between computer players are not changed by these.
| Key | Default | What it does |
|---|---|---|
rivalry.cap | 5 | How many of your rivalries count at once: the hottest. The rest keep their heat but are not listed, and a newcomer must overtake the coolest |
rivalry.listAt | 0.2 | The heat (0 to 1) at which a rivalry is listed |
rivalry.rivalAt | 0.3 | The heat at which the opponent is your rival on both profiles and the inbox tells you |
rivalry.closeMargin | 1 | A match won by this many legs (or sets) or fewer is close |
rivalry.lateRounds | 4 | A knockout round this many or fewer from the final (4: the last 16) is big; so is a major or a match on television |
rivalry.gainClose | 0.12 | Heat a close meeting adds |
rivalry.gainBig | 0.06 | Heat a big meeting that was not close adds (a one-sided meeting that is neither close nor big adds nothing) |
rivalry.tvFactor | 1.5 | Times the heat of a meeting on television |
rivalry.closeLossExtra | 0.05 | More heat when you lose a close meeting |
rivalry.balanceAfter | 3 | From this many meetings the head-to-head must be balanced for the rivalry to grow |
rivalry.balanceShare | 0.25 | Balanced: each of you has won at least this share of your meetings |
Rivalries with memory#
The game keeps a record of every meeting with each opponent (meetings, wins, the last result, what was said). A rival (heat at rivalry.rivalAt or more) who beats you and leads the record taunts you on the feed; one who loses to you and trails digs in. The record gives each player a pressure term of their own for the next meeting, on top of the shared stakes (which carry the rivalry's heat as before); the human's media pressure is the human's own term and no longer presses the opponent. The opponent's profile shows the record with the reasons.
| Key | Default | What it does |
|---|---|---|
rivalry.edgeLead | 1 | Wins ahead in the record at which the edge is yours (or theirs): the rivalEdge story condition, a rival's taunt and dig-in |
rivalry.pressure.media | 0.5 | Your own pressure term: times your media pressure (0 to 0.3) |
rivalry.pressure.revenge | 0.05 | Pressure on whichever of you lost the last meeting of a rivalry (heat at rivalry.listAt or more) |
rivalry.pressure.taunted | 0.04 | Pressure on you while a rival's taunt is live |
rivalry.pressure.claim | 0.05 | Pressure on you while you have an open "I'll beat them" interview claim against the opponent |
rivalry.pressure.digIn | 0.05 | Pressure taken off a rival while their dig-in is live (they trail you and lost the last meeting) |
rivalry.talkDays | 365 | Days a taunt or a dig-in stays live (the next meeting always settles it) |
rivalry.talkLines | 3 | How many wordings the pack has for a taunt and for a dig-in (depth.rival-talk.taunt.N, depth.rival-talk.dig-in.N) |
The next generation#
Waves on the intake, national programmes, your academy's graduates, hype and the changing of the guard; what each does is in Population.
| Key | Core value | Meaning |
|---|---|---|
nextgen.generations.period, gemAmp, headroomAmp | 8, 0.5, 0.15 | The wave's period in seasons and its amplitudes on the gem chance and the ordinary headroom (0: off). |
nextgen.generations.guardTop, guardShift | 32, 2 | How many of the top are measured, and the median birth-year shift in one season that makes news. |
nextgen.programmes.bandMin, seasonsToOpen, seasonsToClose | 3, 2, 3 | The nation band a programme needs, the seasons at it before one opens, the seasons below it before one closes. |
nextgen.programmes.share, headroom, professionalism, growth, untilAge | 0.5, 4, 6, 0.12, 23 | What a programme claims of its nation's newcomers and gives them. |
nextgen.academy.minAge | 15 | The youngest an academy graduate leaves at (within the intake's ages). |
nextgen.academy.headroom, campusHeadroom | 3, 5 | A graduate's extra potential (the campus's with two or more graduates a winter). |
nextgen.academy.imagePerGraduate, followersPerMilestone | 1, 300 | Image a season for each graduate on tour; followers for each credit. |
nextgen.hype.maxAge, cardAge | 23, 20 | Under which age hype lives, and the card age that gains it. |
nextgen.hype.card, upset, bigUpset, title, majorFinal, rising | 25, 12, 20, 30, 40, 15 | The gains. |
nextgen.hype.upsetRank, bigUpsetRank | 16, 8 | The beaten player's rank for an upset and a big one. |
nextgen.hype.decay, decayPlayed, cap, bands | 3, 1, 100, [25, 50, 75] | The weekly decay (a playing week's), the cap, the band thresholds. |
nextgen.hype.quietBelow | 25 | Under this hype a playing week decays at the full decay: only a new result keeps low talk alive. |
nextgen.hype.pressure, crowd, sponsor, news, rivalry | 0.06, 0.05, 1, 0.5, 0.5 | The effects, each × hype/100 (the rivalry's a flat multiplier). |
nextgen.hype.bustFrom, bustTo, bustWeeks, bustProfessional, showboatGain | 50, 25, 20, 0.5, 1.3 | The bust rule and the trait multipliers (1 without's traits). |
AI players' careers#
What a computer player's season was scales their winter development (training.offseason.facts.*, a multiplier on the growth term, clamped to [min, max]; a player with no facts gets 1), the reasons beyond age that make a veteran stop (population.retirement.*), the timed form modifiers that hot streaks, slumps, dartitis, a new coach and new darts put on a player (world.form.*, world.darts.familiarity*), and how each AI player's style on the oche is picked (ai.style.*).
| Key | Core value | Meaning |
|---|---|---|
training.offseason.facts.playedFull | [40, 30, 20, 12, 8] | Matches in a season that count as a full one, tier 1 first. |
training.offseason.facts.playedGain | 0.35 | Share of the growth an idle season loses (a full one loses nothing). |
training.offseason.facts.minMatches | 8 | Matches needed before the win rate says anything. |
training.offseason.facts.expectedWinRate | [0.55, 0.5, 0.5, 0.5, 0.5] | The win rate that is neither good nor bad, tier 1 first. |
training.offseason.facts.resultsSpan | 0.25 | How far from the expected rate counts as the whole of resultsGain. |
training.offseason.facts.resultsGain | 0.25 | The most results add to (or take from) the growth. |
training.offseason.facts.titleMax | 3 | Titles counted at most. |
training.offseason.facts.titleGain | 0.05 | Growth added per title. |
training.offseason.facts.coachGain | 0.2 | Growth added the winter after a new coach came. |
training.offseason.facts.injuryLossPerWeek | 0.02 | Growth lost per week out injured (dartitis counts). |
training.offseason.facts.injuryLossMax | 0.4 | The most injuries can take. |
training.offseason.facts.injuryDeclinePerWeek | 0.01 | Extra age decline per week out. |
training.offseason.facts.ambitionGain | 0.15 | Growth added at ambition 100, taken at 0. |
training.offseason.facts.min / max | 0.4 / 1.6 | The clamp on the whole factor. |
population.retirement.cardLost | 0.08 | Chance added when the Tour Card is lost, from ten years past cardLostAge; a quarter of it below it. |
population.retirement.cardLostAge | 28 | See above. |
population.retirement.cardLostRank | 64 | At the autumn announcement, a card holder ranked past this counts as losing it. |
population.retirement.injuryPerWeek | 0.004 | Chance added per week out this season, from injuryAge. |
population.retirement.injuryAge | 33 | See above. |
population.retirement.droughtSeasons | 4 | Seasons since the last tier 1-2 title that count as a drought. |
population.retirement.droughtAge | 35 | The age from which a drought counts. |
population.retirement.drought | 0.06 | Chance added by a drought. |
world.form.hotWeeks / hotForm / hotComposure | 4 / 0.1 / 3 | A hot streak: weeks, form added each week, composure on the oche. |
world.form.slumpWeeks / slumpForm / slumpComposure | 6 / -0.08 / -4 | A slump. |
world.form.dartitisWeeks / dartitisExtraWeeks | 12 / 8 | Dartitis lasts the first plus up to the second (drawn on the world-form stream). |
world.form.dartitisForm / dartitisComposure | -0.05 / -10 | Dartitis each week. |
world.form.coachWeeks / coachComposure / coachConfidence | 8 / 2 / 6 | A new coach: weeks of settling, composure, and the one-off confidence. |
world.darts.familiarityWeeks | 6 | Weeks to get used to new darts. |
world.darts.familiarityForm / familiarityComposure | -0.06 / -2 | The cost at the start, fading to nothing over the weeks (the flat darts.dip of world.json is no longer applied). |
ai.style.personalityWeight | 0.5 | How much a showman or fiery media manner (or a calm temperament) leans the style. |
ai.style.noise | 0.3 | Seeded noise per style, so like players differ. |
ai.style.steadyBase | 0.15 | The Steady style's own score (the middle; wins ties). |
ai.style.span | 8 | Attribute points above the player's own level that count as one whole style lean (showman: crowd handling; grinder: consistency and concentration; front-runner: scoring over finishing). |
ai.style.chaseLegs | 2 | Legs behind in the set from which a chasing style attacks the finish. |
AI personalities and kit#
Conduct traits (traits in data/population.json, see population) scale the chances the world draws against; every followed computer player throws a real set of darts; feuds run between two computer players. The multipliers themselves sit on each trait's effects in the population data.
| Key | Core value | Meaning |
|---|---|---|
ai.traits.perPlayer | 2 | Traits a player can carry at most. |
ai.traits.minScore | 0.75 | The score a trait needs to count (about 88% of players carry one, half carry two). |
ai.traits.noise | 0.3 | Seeded noise added to each score, so like players differ. |
ai.kit.scale | 0.5 | How much of the human's kit effect a computer player's set carries: every lever is 1 + (lever − 1) × scale (0 is neutral for everyone; the population's mean stays at 1 either way, a few percent between players at 0.5). |
ai.kit.loyaltyStart | 40 | Brand loyalty (0 to 100) when a player takes a brand. |
ai.kit.loyaltyPerSeason | 8 | Loyalty added per full year with the brand (× the trait's loyalty effect; a signature range is 100). |
ai.kit.loyaltyHold | 0.6 | A brand switch's chance is × 1 − loyalty / 100 × hold. |
world.feud.heat | 0.6 | The rivalry heat a feud needs. |
world.feud.chance | 0.3 | The chance a meeting at the heat starts one, × the two players' feud effects (two hotheads: certain; one and a professional: 0.3); stream world-feud. |
world.feud.pressure | 0.05 | Pressure on the player trailing the pair's record (the hothead when level), on both at the grudge stage. |
world.feud.boost | 1.3 | The grudge match story's weight boost. |
world.feud.fine | 2000 | The fine named on the hothead's timeline after the bust-up (a line, no money moves). |
world.feud.coolWeeks | 40 | Weeks without a meeting after which a feud cools. |
world.feud.maxPerPlayer | 2 | The most live feuds one player carries; a pair with a player at the cap starts no new one. |
world.feud.coolHeat | 0.35 | The rivalry heat under which a feud cools. |