Guide
Staff roles
Your team is built from staff roles: a darts coach, a physio, an agent, a practice partner and so on. Roles are content, like players or sponsors: a mod can add new ones, rebalance the core ones or replace them.
Roles live in data/staff/roles.json (or any file in data/staff/roles/). Each file is a JSON array. The editor schema is the staff roles reference. Patches target staffRole:<id>.
The game supplies the people: every month the market fills with candidates for each role, with names, faces, skills, personalities and wage demands.
A role#
{
"id": "acme.staff.nutritionist",
"name": "Nutritionist",
"short": "NU",
"icon": "🥗",
"description": "Fuel for long days on the floor.",
"skills": ["fitness", "psychology"],
"effects": [
{ "hook": "fatigueRecovery", "skill": "fitness", "value": 0.03 },
{ "hook": "training", "skill": "fitness", "value": 0.2, "area": "fitness" },
{ "hook": "recovery", "skill": "psychology", "value": 1 }
],
"availability": { "tierMax": 4, "followersMin": 0 },
"wages": [40, 80, 150, 250, 400]
}| Field | Meaning |
|---|---|
id | Namespaced id. Stories name a role by its id or by its last part ("nutritionist"), so keep the last part unique |
name | Shown on cards and in messages |
short | 1–3 letters for badges |
icon | Optional emoji shown instead of short |
description | One line on what they do |
skills | 1–4 skills people in this role have. The first is their speciality: it counts twice towards their star rating |
effects | What they do: a list of hooks |
availability | tierMax: you must be in this tier or better (1 = top) to hire one. followersMin: followers needed. Default: anyone |
wages | Typical weekly wage for 1★ … 5★ (five numbers). Candidates ask around this, more if ambitious |
max | How many you may employ at once. Default 1; hiring into a full one-person role replaces the incumbent |
candidates | Candidates in the market each month. Default 3 |
from | "staff" (default) or "players": candidates are real players from lower tiers of the world, with their own name and face (the core practice partner uses it) |
legacy | coach, mentalCoach or fitnessCoach: saves from before roles existed convert that kind of staff to this role |
moves | Whether people in this role come with you when you move to another country. Default true; false (the core's practice partner, a player of the circuit left) means they stay behind: the contract ends with the move and the notice is paid, a line of the move's bill |
order | Display order, lower first. Default 100 |
Skills#
Each staff member has a value of 1–20 in every skill their role lists. A role can use any of these:
coaching, psychology, fitness, physio, negotiation, contacts, reach, tact, media, logistics, finance, analysis, technical, practice
Star ratings come from the skills: roughly skill ÷ 4. In the market, skills are scouted as a range until the person joins you; an agent with good contacts narrows the ranges.
Effect hooks#
An effect is { "hook", "skill", "value", "area"? }. value is the full strength at skill 20: a member with skill 10 gives half. Staff with low morale work at 85%. The whole team's total on each hook is capped, so stacking staff can't break the game.
| Hook | Value means | Team cap | What it touches |
|---|---|---|---|
training | Training gains bonus, 0.6 = +60%. With area (scoring, doubles, bull, fitness, mental) just that area, without it all | 0.8 per area | Weekly training |
practice | Practice quality: a bonus on scoring, doubles and bull training | 0.3 | Weekly training |
coachCall | Checkout know-how added to the coach's call (base 60, max 100) | 40 | The aim suggested in your matches |
confidenceFloor | Confidence never drops below this at the week's end | 35 | Confidence |
moraleFloor | Morale never drops below this at the week's end | 35 | Morale |
recovery | Points of confidence and morale regained a week while under 50 | 3 | Confidence, morale |
fatigueRecovery | Fatigue removed a week (fatigue runs 0–1) | 0.06 | Fatigue |
injuryRecovery | Injuries heal this much faster (0.4 = 40% faster) | 0.5 | Injuries |
injuryChance | Chance an injury is caught early (one step milder, a minor one never happens), and less chance playing on one makes it worse | 0.5 | Injuries |
followers | Extra follower growth: 0.4 = every 10 new followers bring 4 more | 0.5 | Followers |
image | Public image gained a week, up to +40 (beyond that it's down to you) | 1.5 | Image |
mediaSoften | Negative effects of interview and press answers shrink by this share | 0.6 | Interviews, press conferences |
travelCost | Share knocked off travel and hotel costs | 0.45 | Travel costs |
travelFatigue | Fatigue removed when you arrive at an event | 0.08 | Fatigue |
weeklyCosts | Share knocked off weekly living costs | 0.3 | Living costs |
revealFit | Any value shows your kit's hidden fit as a number (−100 … 100). Under 0.7 it's rounded | 1 | Equipment |
scouting | Scouting notes on your next opponent in the event lobby: 0.1 the numbers, 0.35 their finishing, 0.6 their habits, 0.85 their form | 1 | Event lobby |
sponsorOffers | Added to the monthly chance of a sponsor approach (0.45 by default) | 0.3 | Sponsor offers |
offerVolume | Chance that a sponsor approach brings a second offer | 1 | Sponsor offers |
offerValue | Offers open this much higher: 0.2 = +20% | 0.5 | Sponsor offers |
negotiation | 0–1: raises a sponsor's hidden ceiling and patience, and how well "let your agent handle it" does | 1 | Negotiations |
commission | Makes the role commission-based (an agent). The value is the cut an independent agent asks at skill 20 (half of it at skill 0) | 0.25 | The agent's cut |
burnout | Share faster the workload recovers each week (0.3 = 30% faster) | 0.6 | Workload |
travelLoad | Share knocked off the workload of every trip | 0.6 | Workload |
A role with a commission effect is an agent role: its people come from agencies, work mostly on commission and can be hired for no weekly wage at all.
An effect whose skill isn't in the role's skills does nothing; the loader warns about it.
The core roles#
| Role (short name) | Skills | Does | Needs |
|---|---|---|---|
Agent (agent) | negotiation, contacts, reach | More and better sponsor offers, negotiates, takes a cut | Tier 4, 500 followers |
Darts coach (coach) | coaching, analysis | Scoring, doubles and bull training; the coach's call | |
Mental performance coach (mental-coach) | psychology, tact | Mental training, confidence and morale floors, recovery; workload recovers faster | |
Fitness coach (fitness-coach) | fitness, physio | Fitness training, fatigue recovery | |
Physio (physio) | physio, fitness | Catches injuries early, faster healing and recovery | |
Social media manager (social-media) | reach, media | Follower growth, image | |
PR & media officer (press-officer) | tact, media, contacts | Softens bad press, image | Tier 4 |
Tour & travel manager (travel-manager) | logistics, finance | Cheaper, lighter travel; arrive fresher | Tier 4 |
Accountant (accountant) | finance, negotiation | Lower living costs | |
Performance analyst (analyst) | analysis, technical | Scouting notes, a little doubles training | Tier 4 |
Kit technician (kit-tech) | technical | Shows your kit's fit | |
Practice partner (practice-partner) | practice, coaching | Practice quality; a real player from the lower tiers |
Hiring, contracts and morale#
How the game uses your roles, so you can balance them:
- Standing (0–100) is how known you are: your tier, followers and ranking. Candidates want a minimum standing that rises with their stars, so the best people only listen once you're a name.
- Team size is capped: 2 places to start, more as your standing grows and with a year's prize and sponsor income over £50,000 and £250,000.
- Offers: you choose a weekly wage and a contract length. At or above their asking wage and a length they like, they sign. Close to it, they counter. Far below, they refuse. Every counter or refusal uses up their patience, and a lowball uses it faster; out of patience, they leave the market. Hiring needs four weeks' wages in the bank.
- Release costs a quarter of the wages left on the contract, at least four weeks' notice (never more than what's left).
- Morale drifts toward what their pay (against the role's
wages), your results and your standing merit. Ambitious staff fret if you're below their level. Very unhappy staff may resign. At the end of a contract, happy staff renew, the ambitious with a small raise.
Staff tuning#
The numbers behind hiring (the team caps, standing, team size, independent agents and release costs) are staff settings: data/staff/settings.json holds one object (an array of them works too). Every field except id is optional, and a field left out keeps the game's number. The editor schema is the staff settings reference, and the Mod Studio edits them under Career rules → Staff tuning.
{
"id": "acme.staff-settings",
"hookCaps": { "travelCost": 0.6, "training": 1 },
"capacity": { "base": 3, "max": 14 },
"noticeWeeks": 8
}| Field | Default | Meaning |
|---|---|---|
coachRole | core.staff.coach | The staff role that is your darts coach: the one a junior's family pays for, whose view firms up your potential estimate |
hookCaps | the "Team cap" column above | The most the whole team can add on each hook, either way. Merged per hook |
standing.tiers | 72, 55, 38, 20, 5 | Standing points for being in tiers 1 to 5 |
standing.followers | 4 | Points per tenfold followers (10 followers: 4, 100: 8…)… |
standing.followersMax | 20 | …up to this many |
standing.rank | [{ "top": 16, "points": 8 }, { "top": 64, "points": 4 }] | Points for your Order of Merit rank: the first band your rank is inside applies |
qualityStanding | 0, 12, 30, 48, 64 | The standing a 1★ … 5★ candidate wants before they'll talk |
capacity.base | 2 | Team places: base + standing ÷ standingPer (rounded down) + income slots, kept within [min, max] |
capacity.standingPer | 15 | |
capacity.income | [{ "from": 50000, "slots": 1 }, { "from": 250000, "slots": 2 }] | Extra places for a year's prize, sponsor and exhibition income: the highest band reached applies |
capacity.min, capacity.max | 2, 12 | |
agents.independentShare | 0.3 | Share of agents in the market who work for no agency |
agents.independentRetainer | 0.5 | An independent agent's weekly retainer, as a share of the role's usual wage |
noticeWeeks | 4 | A release costs at least this many weeks' wages (a quarter of what's left on the contract otherwise, never more than it) |
Standing is rounded and kept within 0–100. Several mods can supply staff settings: they apply in load order, later fields winning (per hook for hookCaps). Reusing another mod's id replaces its record; the core record is staffSettings:core.staff-settings.
Staff settings are copied into a career's save, and a career you load picks up the installed packs' settings (saves from before them play by the game's numbers).
Staff in stories#
Stories can check and change your team (see Stories):
- Conditions:
"hasStaff": "physio"(or a list, meaning any of them),"staffQualityMin": 4,"staffQualityMax": 2. "Has an agent" is"hasStaff": "agent". - Actions:
{ "type": "staffLeaves", "role": "practice-partner" }and{ "type": "staffMorale", "role": "coach", "by": 10, "relationship": 5 }. - Text:
{staff:physio}is your physio's name ("your physio" without one).{coach}still works.
{
"id": "acme.story.nutritionist-chips",
"trigger": "weekTick",
"condition": { "chance": 0.01, "hasStaff": "nutritionist" },
"title": "{staff:nutritionist} Bans the Chips",
"body": "{staff:nutritionist} has found the chip shop receipts.",
"choices": [
{
"id": "comply",
"label": "Fine. Salad it is",
"effects": { "fatigue": -0.05, "morale": -2 },
"actions": [{ "type": "staffMorale", "role": "nutritionist", "by": 5 }]
},
{ "id": "rebel", "label": "Chips are a human right", "effects": { "morale": 3 } }
]
}Philosophies#
A coaching role can carry a philosophy: a way of working that suits some players and not others. Philosophies live in data/staff/philosophies.json (or data/staff/philosophies/), one array; patches target staffPhilosophy:<id>. The core pack ships four for the darts coach (Power scorer, Finisher, Technician, Old school), two for the mental coach (Calm head, Fire in the belly) and two for the fitness coach (Endurance, Recovery first). A role with no philosophies works as before.
{
"id": "acme.philosophy.wall-of-sound",
"role": "core.staff.mental-coach",
"name": "Wall of sound",
"blurb": "Practise with the crowd turned up. Nothing on the night should be louder than the practice room.",
"areas": { "mental": 1.1 },
"suits": [{ "attr": "crowdHandling", "when": "below", "weight": 1 }],
"temperament": { "volatile": 0.3, "calm": -0.2 },
"conflicts": ["core.philosophy.calm-head"]
}| Field | Meaning |
|---|---|
role | The staff role it belongs to. Every member of the role has one: a candidate comes with it, and a member from an older save gets one from a hash of their id |
areas | Scales the role's training hooks per area (1.2 = 20% more scoring practice than the role's plain figure) |
suits | What it suits: attr (any player attribute), when above (a player strong in it) or below (one weak in it, something to build), weight. Fit = Σ weight × ±(attribute − 50) / 50 … |
temperament | … plus a term for the player's temperament (calm, steady, volatile), clamped to −1 … 1 |
conflicts | Philosophies it cannot share a corner with: two members whose philosophies name each other clash |
The fit scales that member's training hooks by 1 + staff.philosophy.fitRange × fit (then the team cap as always), sets their mood (a misfit is an unhappy coach) and nudges your own morale baseline. The Team page shows the philosophy, a word for the fit (suits you, a stretch, a poor fit) and, once they have been with you revealWeeks (or at once with an analyst's scouting), the exact figure.
Staff who act#
- Arenas. A role's
arena(performanceorbusiness) says which corner of the team it works in. Two members of one arena clash when their egos (1–20, from the id) add up tostaff.clash.egoSumor their philosophies conflict, unless both get on with you better thancalmAt. A clash costs both morale and a share of their effects, brings a letter and then a story (core.narrative.team-clash, conditionflag: staff-clash, text variables{clashA}and{clashB}) whose choices set the flagsstaff-clash-choice:back-one,bang-headsorlet-it-ride; the game reads the flag the next week. A role with no arena never clashes. - Mood with reasons. Each member's morale target now carries a misfit, a clash, the season goals missed at the last review and the rank lost since the season began (
staff.leave.*). UnderwarnAta letter says why; a resignation isnoticeWeeksof notice atnoticeEffect, and releasing someone on notice costs nothing. At the season's end an ambitious member (ambitionAt) who wanted a winner may leave (resultsChance). - Poaching. A slumping computer player inside
staff.poach.rankMaxmay come for your darts coach (quality ≥qualityMin, morale undermoraleAtor ambition with your standing under theirs): a letter, a card on the Team page, and two answers. Match, and they may raise once more; let go, or say nothing by the deadline, and the coach joins them (a world story, and heat on a rivalry). The other way, a computer player's coach can be on the market (unsettledExits,marketMax,premium): hiring them takes them from the player. Real (named) players' coaches are never involved. - Computer players' coaches are people: the Player page shows their stars and philosophy once the world has given them one.
Texts: team.fit.*, team.mood.*, team.notice.*, team.leave.*, team.clash.*, team.poach.*, team.candidate.coach-of*, world.coach-poached.*, world.coach-hired.*. Numbers: the staff.* block in Tuning.
Old saves#
Careers started before staff roles existed keep their staff: a darts coach, mental coach or fitness coach becomes the core role with the same legacy kind, keeping their name, stars and wage, and gains skills, a personality and a one-year contract. Staff roles missing from a save are added from your installed packs when it loads.