Guide
The living world
Everybody else has a career too. Computer players sign and lose sponsors, change darts, break through, slump, pick up injuries, retire (and now and then come back), fall out with each other and hit milestones. It's all deterministic from the save's seed and cheap enough to run every week.
What happens goes on the player's timeline (their profile page). The best of it makes the news: a few stories a week, weighted by how big a story it is, how big a name, and how close the player is to you (your rivals, your nation, your tier). Some stories get a social post too. The World section's Living world tab shows the rising stars, who's in and out of form, the hottest rivalries, sponsor and darts moves, and the farewells.
Three kinds of content drive it:
data/world.json: the settings (rates, thresholds, how much news). This page.- Media lines with
world.*slots: the headlines, story text and pundits' takes. See Media lines. - Social posts with
world*triggers: see Social feed.
Who the world follows#
The world follows the top tiers (tracked.tierMax, default 2: Elite Series and Pro Circuit) and the top of the Order of Merit (tracked.rank, default 64). Only they have sponsors, darts, form and rivalries in the world simulation. Retirement, youth and milestone stories reach further (see below).
Settings#
The file holds one object (an array of them also works). Every field except id is optional. A field you leave out keeps the game's default. The core pack's data/world.json lists every field with its default value.
{
"id": "acme.world",
"news": { "perWeek": 3, "weights": { "grudgeMatch": 7 } },
"retirement": { "comebackChance": 0.1 }
}Chances are per tracked player per month unless the table says otherwise.
| Field | Default | What it does |
|---|---|---|
enabled | true | false switches the living world off (retirements are reported the old way). |
tracked.tierMax | 2 | Tiers the world follows. |
tracked.rank | 64 | …plus the top this many on the Order of Merit. |
news.perWeek | 2 | Stories published in a normal week (the strongest candidates). |
news.maxPerWeek | 3 | Most in any week, must-run stories included. |
news.mustRun | 9 | A story at least this important runs even when the week is full (up to maxPerWeek). |
news.minWeight | 3 | Weaker stories never run (they still go on the timeline). A strong story that misses out waits a week or two. |
news.socialChance | 0.45 | Chance a published story also gets a social post. |
news.link.rival / nation / tier | 2 / 1.35 / 1.2 | Weight multipliers for stories about your rivals, your compatriots and players in your tier. |
news.weights | below | Importance of each story kind (0 = never news). |
sponsors.signChance | 0.03 | No main sponsor: chance to sign one. |
sponsors.dropChance | 0.12 | Their level has fallen below the sponsor's: chance they part ways. |
sponsors.upgradeChance | 0.03 | Winning, and a bigger brand fits: chance of a move (a bigger darts brand too). |
sponsors.renewChance | 0.7 | A deal that ran out and still fits: chance it's renewed. |
sponsors.newsRank | 48 | Sponsor moves by players ranked up to this make the news. |
darts.switchChance | 0.04 | Their darts brand no longer fits their level: chance they switch. |
darts.slumpChance | 0.35 | In a slump: chance they change darts (and lose dip form while they settle). |
darts.signatureRank / signatureChance | 8 / 0.08 | Ranked this high without a signature range: chance a brand launches one. |
darts.dip | 0.12 | Form lost to new darts (form runs −1 … 1). |
darts.newsRank | 48 | Darts changes by players ranked up to this make the news. |
youth.maxAge | 23 | Oldest age counted as a youngster. |
youth.features | 3 | "One to watch" features a season: the off-season's biggest risers, spread over the first half of the season. |
youth.minGain | 2 | Least off-season rating gain for a feature. |
retirement.announceMonth | 9 | Veterans say this season will be their last during this month and the next two (0 = never announce). |
retirement.newsRank | 100 | Retirements of players ranked up to this make the news (named players and tiers 1–2 always do). |
retirement.comebackChance | 0.03 | Per season, for someone who retired in the last three and can still play: chance of a comeback. |
retirement.comebackMaxAge | 50 | Too old to come back after this. |
rivalry.seedFinal | 0.06 | Rivalry heat (0–1) added when two tracked players meet in a final. |
rivalry.seedClose | 0.035 | …or in a televised knockout match (quarter-finals on) decided by a leg. |
rivalry.aiGrowth | 0.3 | Scales how fast rivalries between computer players grow at each meeting (yours grow at the normal rate). |
rivalry.bornHeat | 0.35 | Heat at which a rivalry is born (a story, and it shows on both profiles). |
rivalry.newsHeat | 0.45 | Heat at which a meeting in a final or a televised semi-final is a "grudge match" story (at most every 6 weeks). |
form.window / hotTitles | 5 / 2 | A hot streak: this many titles in their last window tier 1–2 events. |
form.slumpExits | 6 | A slump (top 32 only): this many early exits (before the last 16) in a row. |
form.cooldownWeeks | 12 | Weeks before the same player has another form story. |
form.dartitisChance | 0.12 | A slumping veteran (33+): chance of dartitis whispers. Generated players only. |
form.coachChance | 0.3 | A slumping player hires a coach (a small confidence lift). Generated players only. |
form.injuryChance | 0.0015 | Per tracked player per week: an injury (withdrawn from events). Generated players only; see below. |
agencies.signChance / switchChance | 0.015 / 0.004 | Top-32 players sign with (or move between) the agencies in data/staff/agencies.json. |
agencies.newsRank | 16 | Agency moves by players ranked up to this make the news. |
Injuries use the same injury types as yours (Injuries and treatment): the weekly chance is form.injuryChance × the same wear factor you have (poor Fitness and age raise it, 1 on average), the injury is picked from the types with "ai": true (weighted by age, and eyesight for the eyes), and they're out for as long as the type and its severity take to rest (at least two weeks: the minor ones they play through).
Nothing is ever invented about a named player's health or staff (injuries, dartitis whispers and coaching changes are for generated players only), and their "first title" and title-count milestones are left out too: the game only knows their record since the career began. Retirement tributes say "since 2026" for the same reason.
Story kinds and weights#
A story's weight is weights[kind] × how big a name (1.8 for the top 4 on the Order of Merit down to 0.5 unranked) × any link to you × a boost some stories carry (a first major, a signature range, a record).
| Kind | Weight | What |
|---|---|---|
sponsorSigned | 3 | Signs with a main (shirt) sponsor |
sponsorSplit | 3.5 | Parts ways with one (their level dropped, or the deal ran out) |
sponsorSwitch | 4.5 | Leaves one sponsor for a bigger one |
agency | 2 | Signs with (or moves to) an agency |
dartsSwitch | 4 | New darts brand |
dartsChange | 2.5 | New range or weight (usually after a slump) |
signatureRange | 5 | A brand launches their signature range |
oneToWatch | 5 | A youngster feature |
firstTitle | 5 | A generated player's first title (tiers 1–3) |
youngCard | 4 | Youngsters (21 and under) win Tour Cards |
youngMajor | 9 | A major at 23 or under: the youngest since the career began, or a first major |
retiring | 6 | "This season will be my last" (autumn) |
retired | 7 | A tribute (the three biggest names get their own, the rest a round-up) |
farewell | 6 | A retiring player's last major |
comeback | 8 | Out of retirement |
rivalryBorn | 4.5 | A rivalry between two computer players is born |
grudgeMatch | 5 | Rivals meet again in a final or on TV |
feudWords | 5 | Two computer players fall out: words after a meeting |
feudBustUp | 6.5 | The hothead loses a close one and loses the head: a fine from the governing body |
feudGrudge | 6 | The grudge match that follows the bust-up, whoever wins it |
feudCooled | 3 | The feud is over: nobody fed it for world.feud.coolWeeks, or the heat went |
hotStreak | 4 | Titles in a row |
slump | 3 | Early exits in a row |
dartitis | 3 | Whispers about the release |
coach | 2.5 | A new coach |
injury | 3 | Out injured |
titleMilestone | 5 | 10, 25, 50 or 100 titles, or a first major |
Media lines#
Each kind has a world.<kind>.headline and a world.<kind>.body slot, and each group has a pundit's take (world.take.sponsor, kit, rising, retirement, rivalry (the rivalry and feud stories), form (a hot streak), slump (a slump, dartitis, a new coach, an injury), milestone). The feud lines can use {round}, {event}, {score} and {h2hText} like the rivalry ones, and feudCooled has {since}, the year the feud began. They're ordinary media lines: add your own in data/media/lines/.
- Lines without
stylesare the neutral copy the story is written with. - Lines with
stylesare a writer's own voice: when a journalist with that style gets the story, their line can replace the headline. Takes need a style (the pundit's). - A line is skipped when one of its placeholders has nothing to fill it, and lines that use a story's particulars (
{record},{names},{majors},{oldWeight},{oldSponsor},{oldBrand},{average},{why}) are preferred when the story has them.
Every line can use {subject} {subjectFirst} {subjectLast} {subjectNick} (who the story is about) and, for stories about two players, {other} {otherLast}. The story's own words:
| Kinds | Placeholders |
|---|---|
sponsorSigned sponsorSwitch | {sponsor} {category} {seasons} ("two seasons") {deal} ("two-season"), {oldSponsor} on a switch |
sponsorSplit | {oldSponsor} {why} ("when the deal ran out") |
agency | {agency}, {oldAgency} on a move |
dartsSwitch dartsChange | {brand} {item} (the range) {weight}, maybe {oldWeight} {oldBrand} {why} |
signatureRange | {brand} {item} {weight}, maybe {oldBrand} |
oneToWatch | {age} {tour}, maybe {gain} {rank} |
firstTitle youngMajor titleMilestone | {event} {age} {titles}; {record} {since} (youngMajor), {milestone} |
youngCard | {age} {via} {names} ("Ann Bloggs (19) and …") {count} |
retiring retired | {age} {titles} {since}, maybe {titleWords} ("a title", "12 titles"; none: left out) {majors} {average} {bestYear}; a round-up has {names} {count} (its lines must use one of them) |
farewell | {event} {round} (how far they got) {result} |
comeback | {age} {titles} |
rivalryBorn grudgeMatch | {event} {round} {score} {h2h} (the winner's head to head, "5–3") |
hotStreak | {titles} {count} {event} |
slump dartitis coach | {count} {rank} {age}, {coach} |
injury | {weeks} {injury} ("tennis elbow") |
With no world lines at all (a pack that removes them), stories fall back to plain built-in copy.
Saves#
The settings are copied into a save when the career is created, and follow the installed packs when a save is loaded (like the press pack). A save from before the living world starts it the first time it's loaded: the players it follows get their sponsors and darts quietly, and nothing that happened before is reported. Stories and timelines begin from that week.
Checking the rates#
The schema is the world settings reference.