Reference
Hub panels
A panel declared in data (data/ui/panels/*.json). Text may use the same {placeholders} as stories plus the panel ones (UI panels); number fields may be a placeholder like "{confidence}".
- Content type
panels- Files
data/ui/panels.json,data/ui/panels/- Shape
- A list of records, each with its own
id - Patch target
panel:<id>, for examplepanel:core.example- In the base game
- 0 records
- Guide
- UI panels
Fields#
Indented fields belong to the field above them. [] marks the items of a list. A field that is not required may be left out; the default is used.
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
id | id | Yes | Namespaced id, e.g. "core.player.rory-calder" | |
section | one of the options | Yes | Options: home, calendar, bookings, training, staff, player, cards, rankings, analytics, media, sponsors, equipment, world, finances, legacy. | |
placement | one of the options | "end" | Options: start, end. | |
size | one of the options | "normal" | Options: normal, wide. | |
order | whole number, -100 to 100 | 0 | ||
title | text, up to 60 characters | Yes | ||
subtitle | text, up to 120 characters | |||
widgets | list, 1 to 8 items | Yes | ||
widgets[] | one of several shapes | Yes | ||
When type is "text" | ||||
widgets[].type | exactly "text" | Yes | ||
widgets[].text | text, up to 600 characters | Yes | ||
widgets[].tone | one of the options | Colour hint, drawn with the game's own palette. Options: good, bad, accent, muted. | ||
When type is "stats" | ||||
widgets[].type | exactly "stats" | Yes | ||
widgets[].items | list, 1 to 6 items | Yes | ||
widgets[].items[].label | text, up to 40 characters | Yes | ||
widgets[].items[].value | one of several shapes | Yes | ||
| Shape 1: text, up to 24 characters | ||||
| Shape 2: number | ||||
widgets[].items[].sub | text, up to 80 characters | A short line under the value. | ||
widgets[].items[].tone | one of the options | Colour hint, drawn with the game's own palette. Options: good, bad, accent, muted. | ||
widgets[].items[].trend | one of the options | An arrow next to the value. Options: up, down, flat. | ||
When type is "meter" | ||||
widgets[].type | exactly "meter" | Yes | ||
widgets[].label | text, up to 40 characters | Yes | ||
widgets[].value | one of several shapes | Yes | A number, or in a data panel a {placeholder} that holds one. | |
| Shape 1: number | ||||
| Shape 2: text | ||||
widgets[].max | one of several shapes | Default 100. | ||
| Shape 1: number | ||||
| Shape 2: text | ||||
widgets[].display | text, up to 16 characters | Shown instead of the value, e.g. "72%". | ||
widgets[].tone | one of the options | Colour hint, drawn with the game's own palette. Options: good, bad, accent, muted. | ||
When type is "keyValue" | ||||
widgets[].type | exactly "keyValue" | Yes | ||
widgets[].items | list, 1 to 12 items | Yes | ||
widgets[].items[].label | text, up to 40 characters | Yes | ||
widgets[].items[].value | one of several shapes | Yes | ||
| Shape 1: text, up to 80 characters | ||||
| Shape 2: number | ||||
widgets[].items[].tone | one of the options | Colour hint, drawn with the game's own palette. Options: good, bad, accent, muted. | ||
widgets[].items[].link | one of several shapes | Opens the game's own page for a real player or event. player is a player id (or "me"); event is an event id from dtj.query.calendar() or an event template id (this season's running of it). A link to something that doesn't exist is dropped when the panel is shown; the text stays. | ||
Shape 1 (with player) | ||||
widgets[].items[].link.player | text, up to 80 characters | Yes | Names a player record. | |
Shape 2 (with event) | ||||
widgets[].items[].link.event | text, up to 120 characters | Yes | Names a event record. | |
When type is "table" | ||||
widgets[].type | exactly "table" | Yes | ||
widgets[].columns | list, 1 to 6 items | Yes | ||
widgets[].columns[].label | text, up to 24 characters | Yes | ||
widgets[].columns[].align | one of the options | "end" for numbers. Options: start, end. | ||
widgets[].rows | list, up to 20 items | Yes | ||
widgets[].rows[] | list, up to 6 items | Yes | ||
widgets[].rows[][] | one of several shapes | Yes | A table cell: text, a number, or text with a tone and a link. | |
| Shape 1: text, up to 80 characters | ||||
| Shape 2: number | ||||
Shape 3 (with text) | ||||
widgets[].rows[][].text | text, up to 80 characters | Yes | ||
widgets[].rows[][].tone | one of the options | Colour hint, drawn with the game's own palette. Options: good, bad, accent, muted. | ||
widgets[].rows[][].link | one of several shapes | Opens the game's own page for a real player or event. player is a player id (or "me"); event is an event id from dtj.query.calendar() or an event template id (this season's running of it). A link to something that doesn't exist is dropped when the panel is shown; the text stays. | ||
widgets[].empty | text, up to 120 characters | Shown when there are no rows. | ||
When type is "list" | ||||
widgets[].type | exactly "list" | Yes | ||
widgets[].items | list, up to 12 items | Yes | ||
widgets[].items[].text | text, up to 160 characters | Yes | ||
widgets[].items[].sub | text, up to 120 characters | A short line under the value. | ||
widgets[].items[].meta | text, up to 24 characters | A short tag on the right, e.g. a date or a score. | ||
widgets[].items[].tone | one of the options | Colour hint, drawn with the game's own palette. Options: good, bad, accent, muted. | ||
widgets[].items[].link | one of several shapes | Opens the game's own page for a real player or event. player is a player id (or "me"); event is an event id from dtj.query.calendar() or an event template id (this season's running of it). A link to something that doesn't exist is dropped when the panel is shown; the text stays. | ||
Shape 1 (with player) | ||||
widgets[].items[].link.player | text, up to 80 characters | Yes | Names a player record. | |
Shape 2 (with event) | ||||
widgets[].items[].link.event | text, up to 120 characters | Yes | Names a event record. | |
widgets[].empty | text, up to 120 characters | Shown when there are no items. | ||
When type is "chips" | ||||
widgets[].type | exactly "chips" | Yes | ||
widgets[].items | list, 1 to 12 items | Yes | ||
widgets[].items[].text | text, up to 24 characters | Yes | ||
widgets[].items[].tone | one of the options | Colour hint, drawn with the game's own palette. Options: good, bad, accent, muted. | ||
When type is "bars" | ||||
widgets[].type | exactly "bars" | Yes | ||
widgets[].items | list, 1 to 12 items | Yes | ||
widgets[].items[].label | text, up to 32 characters | Yes | ||
widgets[].items[].value | one of several shapes | Yes | A number, or in a data panel a {placeholder} that holds one. | |
| Shape 1: number | ||||
| Shape 2: text | ||||
widgets[].items[].display | text, up to 16 characters | |||
widgets[].items[].tone | one of the options | Colour hint, drawn with the game's own palette. Options: good, bad, accent, muted. | ||
widgets[].max | one of several shapes | The full-length value (default: the largest item). | ||
| Shape 1: number | ||||
| Shape 2: text | ||||
When type is "sparkline" | ||||
widgets[].type | exactly "sparkline" | Yes | ||
widgets[].values | list, 2 to 60 items | Yes | ||
widgets[].label | text, up to 40 characters | |||
condition | object | Only shown while these hold (the story conditions; chance is ignored). | ||
condition.tierMin | whole number, 1 to 5 | Best tier (1 = World Series) the player may be in | ||
condition.tierMax | whole number, 1 to 5 | Lowest tier the player may be in | ||
condition.followersMin | whole number, at least 0 | |||
condition.followersMax | whole number, at least 0 | |||
condition.confidenceMin | number, 0 to 100 | |||
condition.confidenceMax | number, 0 to 100 | |||
condition.formMin | number, -1 to 1 | |||
condition.formMax | number, -1 to 1 | |||
condition.moraleMin | number, 0 to 100 | |||
condition.moraleMax | number, 0 to 100 | |||
condition.fatigueMin | number, 0 to 1 | |||
condition.fatigueMax | number, 0 to 1 | |||
condition.cashMin | whole number | |||
condition.cashMax | whole number | |||
condition.ageMin | whole number, at least 8 | |||
condition.ageMax | whole number, at most 80 | |||
condition.tourCard | true or false | true = must hold a Tour Card, false = must not | ||
condition.rankMax | whole number, at least 1 | Order of Merit rank at least this good | ||
condition.months | list | Only in these months | ||
condition.dateFrom | text | Only on or after this day of the year ("MM-DD", e.g. "10-30"); with dateTo, a window of days such as the week up to Fireworks Night Pattern: ^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$ | ||
condition.dateTo | text | Only on or before this day of the year ("MM-DD", e.g. "11-05"); a dateFrom later in the year than it makes the window run over the new year Pattern: ^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$ | ||
condition.seasonPhase | one of the options | early = Jan–Apr, mid = May–Aug, late = Sep–Dec Options: early, mid, late. | ||
condition.nationality | list, at least 1 item | Only for players from these countries | ||
condition.livesIn | list, at least 1 item | Only while the player lives in one of these countries | ||
condition.notLivesIn | list, at least 1 item | Never while the player lives in one of these countries | ||
condition.scene | list, at least 1 item | Only while the player lives in one of these darts scenes (scene record ids; a country with no scene of its own is in the fallback record's) | ||
condition.gender | one of the options | Options: m, f. | ||
condition.won | true or false | matchEnd / eventEnd triggers: the result that just happened. | ||
condition.tv | true or false | |||
condition.major | true or false | |||
condition.crowdMin | number, 0 to 1 | |||
condition.againstRival | true or false | |||
condition.vsGraduate | true or false | |||
condition.positionMax | whole number, at least 0 | eventEnd: finishing position at most this (0 = winner, 1 = final, 2 = semi…). | ||
condition.positionMin | whole number, at least 0 | eventEnd: finishing position at least this (0 = winner, 1 = final, 2 = semi…); with positionMax, the players out in one round. | ||
condition.prizeMin | whole number, at least 0 | |||
condition.lastResultPositionMax | whole number, at least 0 | Your most recent completed event: finishing position at most this. | ||
condition.losingStreakMin | whole number, at least 1 | Consecutive match losses at least this many. | ||
condition.winningStreakMin | whole number, at least 1 | |||
condition.minTitles | whole number, at least 0 | Career titles (events won) at least / at most this many. | ||
condition.maxTitles | whole number, at least 0 | |||
condition.hasWalkon | true or false | |||
condition.dayJob | true or false | true: only while you keep a day job; false: only once you're full-time. | ||
condition.hasCoach | true or false | |||
condition.hasStaff | one of several shapes | You employ someone in this staff role (a role id like "core.staff.physio" or just "physio"); a list means any of them | ||
| Shape 1: text | ||||
| Shape 2: list, at least 1 item | ||||
condition.lacksStaff | one of several shapes | You employ nobody in this staff role (a role id or just "accountant"); a list means none of them | ||
| Shape 1: text | ||||
| Shape 2: list, at least 1 item | ||||
condition.staffQualityMin | whole number, 1 to 5 | A staff member rated at least this many stars (in the hasStaff role, if given; otherwise anyone) | ||
condition.staffQualityMax | whole number, 1 to 5 | A staff member rated at most this many stars (in the hasStaff role, if given; otherwise anyone) | ||
condition.negotiated | one of the options | Something that happened in a sponsor negotiation in the last 4 weeks: a sponsor walked away, two sponsors bid against each other, your agent closed a deal, or you signed one Options: walkedAway, biddingWar, agentDeal, signed. | ||
condition.hasRival | true or false | A rivalry of real intensity (≥ 0.3) with someone | ||
condition.rivalEdge | one of the options | Who has the edge in your record against the story's rival: yours (you lead by the pack's edgeLead), theirs, or level Options: yours, theirs, level. | ||
condition.rivalryMinMeetings | whole number, at least 1 | You and the story's rival have met at least this many times | ||
condition.rivalLastResult | one of the options | The last meeting with the story's rival: you won it, or lost it (never met: neither) Options: won, lost. | ||
condition.flag | one of several shapes | Every one of these story flags is set (a setFlag action set it); text variables such as {rival} are filled in the name | ||
| Shape 1: text | ||||
| Shape 2: list, at least 1 item | ||||
condition.notFlag | one of several shapes | None of these story flags is set | ||
| Shape 1: text | ||||
| Shape 2: list, at least 1 item | ||||
condition.hasSponsor | true or false | Any active sponsorship contract | ||
condition.sponsorCategory | one of the options | An active sponsor in this category Options: darts, apparel, drinks, boards, energy, travel, tech, local. | ||
condition.injured | true or false | Carrying an injury from a story | ||
condition.imageMin | number, -100 to 100 | Public image (−100 … 100) at least this | ||
condition.imageMax | number, -100 to 100 | |||
condition.hasEventWithinDays | whole number, 0 to 60 | You are entered in (or automatically in) an event starting within this many days | ||
condition.noEventWithinDays | whole number, 0 to 60 | Nothing on your calendar for this many days | ||
condition.nextTrip | list, at least 1 item | The journey to your next event is one of these travel steps (ids from the travel settings) | ||
condition.trip | list, at least 1 item | After a match or an event: the journey to it was one of these travel steps (ids from the travel settings) | ||
condition.seasonMonths | list, at least 1 item | Only in these months of the weather's year, as a northern-hemisphere year has them (shifted for a southern scene) | ||
condition.exhibitionKind | list, at least 1 item | exhibitionEnd only: the night was one of these kinds (clubNight, holidayPark, charity…) | ||
condition.hasBooking | true or false | true: you have an exhibition booked in the next 4 weeks; false: nothing booked | ||
condition.loadMin | number, 0 to 100 | Your workload (0–100, see Travel load and burnout) at least this: 60 tired, 75 overloaded, 90 burnout | ||
condition.loadMax | number, 0 to 100 | Your workload (0–100) at most this | ||
condition.hasKit | text | You have something equipped in this kit slot ("darts", "charm"…) Pattern: ^[a-z][a-z0-9-]*$ | ||
condition.kitNewMax | number, 0 to 1 | Your darts are this familiar at most (0–1): e.g. 0.5 = still new in the hand | ||
condition.developing | true or false | true: a signature item is in development in your workshop; false: none is | ||
condition.hasSignature | true or false | You have launched a signature item | ||
condition.kitProtectMax | number, 0 to 100 | Your travel case protects your kit by at most this % (0 without one) | ||
condition.chance | number, 0 to 1 | Probability of firing per check once the conditions hold | ||
condition.seasonsMin | whole number, at least 1 | Seasons of your career, counting the one in progress, at least this many | ||
condition.seasonsMax | whole number, at least 1 | Seasons of your career, counting the one in progress, at most this many | ||
condition.squad | object | Your standing in a squads league you play for (the county league, a youth league): every listed check must hold, and you must be in one of its squads | ||
condition.squad.tour | text | Yes | The tour of the league: its squads events count (core.tour.county for the county league) Pattern: ^[a-z0-9][a-z0-9-]*(\.[a-z0-9][a-z0-9-]*)+$ | |
condition.squad.capsMin | whole number, at least 0 | Days the league has picked you for, at least this many | ||
condition.squad.capsMax | whole number, at least 0 | Days the league has picked you for, at most this many (0: never picked yet) | ||
condition.squad.seasonsMin | whole number, at least 1 | League seasons you have been picked in, at least this many | ||
condition.squad.rankMax | whole number, at least 1 | Your place on your squad's own average table this season at least this good (1 = its best), last season's until you have played | ||
condition.squad.averageMin | list, at least 1 item | Your three-dart average in the league's games this season at least this; a list gives one bar a division (top division first, the last one for any lower) | ||
condition.squad.firstSide | true or false | true: your last pick was for your squad's first side (its A team); false: for another side | ||
condition.squad.picked | true or false | true: the last day your squad played picked you; false: it left you out | ||
condition.squad.dropped | true or false | true: the last day your squad played left you out after the one before picked you | ||