Reference

Events

Content type
events
Files
data/events.json, data/events/calendar/
Shape
A list of records, each with its own id
Patch target
event:<id>, for example event:core.event.asia-tour-event-10
In the base game
2407 records
Guide
Scenes: a country's own darts, Tours and the Tour Card, Calendar and entry rules

Fields#

Indented fields belong to the field above them. [] marks the items of a list. A field that is not required may be left out; the default is used.

FieldTypeRequiredDefaultNotes
ididYesNamespaced id, e.g. "core.player.rory-calder"
tourIdidYesNamespaced id, e.g. "core.player.rory-calder" Names a tour record.
nametextYes
shortNametext, up to 20 characters
boardone of the optionssteel or soft (soft-tip boards), over the tour's board; steel when neither says. The match itself plays as before for now. Options: steel, soft.
stagetext, up to 40 characters
trophytext, up to 60 characters
broadcastidNamespaced id, e.g. "core.player.rory-calder"
organisationidThe organisation (by id) that runs this event, when it is not its tour's.
venueIdidYesNamespaced id, e.g. "core.player.rory-calder" Names a venue record.
monthwhole number, 1 to 12Yes
weekwhole number, 1 to 5YesWeek of the month the event starts (the n-th such weekday; 5 may roll into next month)
dayswhole number, 1 to 281
scheduleobject
schedule.roundDayslist, 1 to 16 items
schedule.restDayslist, up to 31 items
fieldSizewhole number, 2 to 256Yes
entryone of the optionsYesOptions: open, tourCard, invitation, ranking.
seedswhole number, at least 00For 'ranking' entry: how many from the Order of Merit get in.
roundslistYesRound formats, first round → final. Length must be log2(field after groups).
rounds[]one of several shapesYes
Shape 1 (with bestOfLegs)
rounds[].bestOfLegswhole number, 1 to 41Yes
rounds[].tieBreakobject
rounds[].tieBreak.winBywhole number, 2 to 3Yes
rounds[].tieBreak.suddenDeathAtwhole number, 1 to 30
Shape 2 (with bestOfSets)
rounds[].bestOfSetswhole number, 1 to 13Yes
rounds[].legsPerSetwhole number, 3 to 95
rounds[].decidingSetobject
rounds[].decidingSet.winBywhole number, 2 to 3Yes
rounds[].decidingSet.suddenDeathAtwhole number, 1 to 30
groupsobject
groups.countwhole number, at least 1Yes
groups.sizewhole number, 3 to 8Yes
groups.advancewhole number, 1 to 4Yes
groups.formatone of several shapesYes
Shape 1 (with bestOfLegs)
groups.format.bestOfLegswhole number, 1 to 41Yes
groups.format.tieBreakobject
groups.format.tieBreak.winBywhole number, 2 to 3Yes
groups.format.tieBreak.suddenDeathAtwhole number, 1 to 30
Shape 2 (with bestOfSets)
groups.format.bestOfSetswhole number, 1 to 13Yes
groups.format.legsPerSetwhole number, 3 to 95
groups.format.decidingSetobject
groups.format.decidingSet.winBywhole number, 2 to 3Yes
groups.format.decidingSet.suddenDeathAtwhole number, 1 to 30
groups.byeswhole number, 0 to 32The top byes seeds skip the group stage and go straight into the knockout (field = count × size + byes; knockout = count × advance + byes).
groups.tableone of the optionsOptions: combined.
cascadeobject
cascade.formatone of several shapesYes
Shape 1 (with bestOfLegs)
cascade.format.bestOfLegswhole number, 1 to 41Yes
cascade.format.tieBreakobject
cascade.format.tieBreak.winBywhole number, 2 to 3Yes
cascade.format.tieBreak.suddenDeathAtwhole number, 1 to 30
Shape 2 (with bestOfSets)
cascade.format.bestOfSetswhole number, 1 to 13Yes
cascade.format.legsPerSetwhole number, 3 to 95
cascade.format.decidingSetobject
cascade.format.decidingSet.winBywhole number, 2 to 3Yes
cascade.format.decidingSet.suddenDeathAtwhole number, 1 to 30
cascade.orderone of the options"field"Options: field, seriesAverage.
cascade.stageslist, at least 1 itemYes
cascade.stages[].idtextYes
cascade.stages[].groupswhole number, 1 to 81
cascade.stages[].sizewhole number, 2 to 8Yes
cascade.stages[].advancewhole number, 1 to 4
cascade.stages[].newwhole number, 0 to 64
cascade.stages[].fromlist
cascade.stages[].from[].stagetextYes
cascade.stages[].from[].placeslist, at least 1 itemYes
cascade.stages[].nametext
cascade.stages[].dayFromwhole number, 1 to 7
cascade.stages[].dayTowhole number, 1 to 7
cascade.stages[].meetingswhole number, 1 to 41
cascade.knockoutDayslist, at least 1 item
startScorewhole number501
doubleIntrue or falsefalse
finishone of the options"double"Options: double, single.
formatBandslist, at least 1 item
formatBands[].maxLevelwhole number, 0 to 100Yes
formatBands[].startScorewhole numberYes
formatBands[].finishone of the options"double"Options: double, single.
prizeslist, at least 1 itemYesPrize money by finishing position: [winner, runner-up, semi-finalist, quarter-finalist, …].
entryFeewhole number, at least 00
rankedtrue or falsetrueCounts towards the Order of Merit.
tvtrue or falsefalse
majortrue or falsefalse
crowdnumber, 0 to 10.30..1 crowd size/energy for presentation and pressure.
tagslist[]Special meanings for the career engine: "qschool", "worldChampionship", "playersFinals", "youth" (under-25s only), "county", "leagueNight" (a night of a league: winning it is not a title).
onlinetrue or false
teamsobjectTeam event: the field is fieldSize teams. "nations" = each nation's top size players on the Order of Merit, playing pairs matches.
teams.kindone of the optionsYesOptions: nations, squads, pairs.
teams.sizewhole number, 2 to 4Yes
teams.squadslist, 2 to 64 items
teams.rankingtextThe ranking that picks each nation's players and orders the nations. Default "oom". Pattern: ^(oom|tour:.+|season:.+|last:.+|phase:.+|stage:.+|average:.+|rolling:.+)$
teams.nationRankingslist, 1 to 16 itemsNations events only: for the nations listed, pick players from another ranking first (an affiliate tour's list). Each nation listed takes its players in the top keepTop of the event's ranking first, then its best on this ranking, then its best as any other nation. The nations are still ordered and seeded on the event's own ranking.
teams.nationRankings[].rankingtextYesA ranking a route can read: "oom" (the two-year Order of Merit), "tour:<tourId>" (that tour's own table: two years when its rules say rolling2y, else this season) or "season:<tourId>" (this season's money on that tour). Pattern: ^(oom|tour:.+|season:.+|last:.+|phase:.+|stage:.+|average:.+|rolling:.+)$
teams.nationRankings[].nationslist, 1 to 64 itemsYes
teams.nationRankings[].keepTopwhole number, 1 to 1000How far down the event's own ranking a listed nation's players are still picked first. Omitted: none are.
teams.pickone of the optionsOptions: best, turns.
teams.turnsFromAgewhole number, 1 to 99
teams.sideswhole number, 2 to 8
teams.regionsmap (key: value)
teams.homesmap (key: value)
teams.areasmap (key: value)
teams.countytrue or false
teams.minPlayerswhole number, 1 to 4Fewest players a nation needs to enter (default size). Below size the team is short-handed and missingPartner decides how it plays.
teams.minAgewhole number, 1 to 99Nations events only: the youngest age, on the event's first day, a player must be to play for a nation. A nation with too few players old enough plays short-handed, down to minPlayers, or sits out.
teams.missingPartnerone of the optionsA short-handed team in a pairs match: "solo" = its player throws every visit (start score + soloHandicap each leg); "bye" = it concedes the pairs match (a walkover). Singles against a missing player are always walkovers. Default "solo". Options: solo, bye.
teams.soloHandicapwhole number, 0 to 200Points added to a lone player's start score in each pairs leg (0 = none).
teams.hostone of several shapesHost nation: always in the field (a nation code, or "venue" = the venue's country).
Shape 1: nation code
Shape 2: exactly "venue"
teams.prizeSplitone of the optionsPrize money: "each" = every player gets the listed prize (default); "share" = it's per team, split between the players. Options: each, share.
teams.tieslistKnockout rounds played as team ties (singles and pairs rubbers). Others: one pairs match.
teams.ties[].fromwhole number, at least 1Yes
teams.ties[].towhole number, at least 1
teams.ties[].rubberslist, 1 to 9 itemsYes
teams.ties[].rubbers[]one of several shapesYesOne rubber of a team tie: a singles match between the teams' a-th and b-th players (1 = each team's best ranked), or a pairs match.
When kind is "singles"
teams.ties[].rubbers[].kindexactly "singles"Yes
teams.ties[].rubbers[].awhole number, 1 to 4Yes
teams.ties[].rubbers[].bwhole number, 1 to 4Yes
When kind is "pairs"
teams.ties[].rubbers[].kindexactly "pairs"Yes
teams.ties[].toWinwhole number, 1 to 5Yes
teams.tableobject
teams.table.seriestext, up to 80 charactersYes
teams.table.winwhole number, 0 to 10Yes
teams.table.losswhole number, 0 to 10
teams.table.orderlist, 1 to 5 itemsYes
teams.table.tierslist, 1 to 8 items
teams.table.tiers[]list, 2 to 32 itemsYes
teams.table.movewhole number, 0 to 8
teams.table.fromwhole number, 1 to 12
teams.tierwhole number, 1 to 8
teams.fixturesobject
teams.fixtures.roundwhole number, 1 to 62Yes
leagueone of several shapesLeague series (e.g. a weekly TV league). A night: every line-up player plays one fixture (fieldSize = players, one entry in rounds). The play-off night: a knockout of the table's top top (fieldSize = top).
Shape 1 (with series, night, nights)
league.seriestextYes
league.nightwhole number, at least 1Yes
league.nightswhole number, at least 1Yes
league.playerswhole number, 3 to 32Yes
league.formatone of the options'fixtures' (default): each player plays one round-robin fixture. 'knockout': the line-up plays a knockout (rounds = its rounds) and earns points[position] (0 = winner, 1 = runner-up, 2 = semi-finalist…). Options: fixtures, knockout.
league.pointslist, at least 1 item
Shape 2 (with series, playoffs, top)
league.seriestextYes
league.playoffsexactly trueYes
league.topwhole number, 2 to 16Yes
weekdaywhole number, 0 to 6Day of the week the event starts (0 = Sunday … 4 = Thursday … 6 = Saturday). Omitted = Saturday. The start is that weekday in week of month.
wholeWeektrue or falsetrue: the event keeps to the real week (Monday to Sunday) of the month's week-th Saturday, even when that week begins in the month before, so a Monday-to-Saturday series has a week of its own for every week. Never before 1 January: there week 1 moves a week later and shares its days with week 2. Omitted: a weekday event of a week whose Monday falls in the month before moves a week later.
endsInNewYearobjectFor an event that ends its season across New Year, such as a world championship: its final is on day January of the next year (with weekday, the first such weekday on or after that day), and the season ends after it. month and week then only set its place in the season's order.
endsInNewYear.daywhole number, 1 to 31YesThe day in January of the event's last day.
endsInNewYear.weekdaywhole number, 0 to 6Optional: 0 = Sunday to 6 = Saturday. The last day is the first such weekday on or after day.
opensSeasontrue or falseThe event starts the day its season opens: the day after the last season's final across New Year, or 1 January without one. With weekday, the first such weekday on or after that day (Trial Week: the first Monday on or after 4 January). month and week only set its order.
seriestext
entryRouteslist, at least 1 itemHow the field is filled, route by route (see EntryRoute). Omitted = the tour tier's built-in selection. With routes the tier's Tour Card rules don't apply; restrict still does. The human gets in through ranking, winners, qualifier and players routes (never a simulated pool).
entryRoutes[]one of several shapesYesOne way into an event's field. Routes run in order; each skips players who are already in, and none goes past the field size. See Calendar and entry rules.
When kind is "ranking"
entryRoutes[].kindexactly "ranking"Yes
entryRoutes[].rankingtextYesA ranking a route can read: "oom" (the two-year Order of Merit), "tour:<tourId>" (that tour's own table: two years when its rules say rolling2y, else this season) or "season:<tourId>" (this season's money on that tour). Pattern: ^(oom|tour:.+|season:.+|last:.+|phase:.+|stage:.+|average:.+|rolling:.+)$
entryRoutes[].topwhole number, 1 to 256YesHow many players this route adds (the best N not already in).
entryRoutes[].fromwhole number, at least 1Start at this rank (1 = top).
entryRoutes[].withintrue or falseOnly look at ranks from..from+top-1 (players already in use up their place).
entryRoutes[].cardHolderstrue or falseOnly Tour Card holders count (and are counted).
entryRoutes[].maxAgewhole number, 1 to 99
entryRoutes[].nationslist, at least 1 itemOnly players of these nationalities.
entryRoutes[].seedtrue or false
entryRoutes[].labeltext
When kind is "winners"
entryRoutes[].kindexactly "winners"Yes
entryRoutes[].eventslist, at least 1 itemYesEvent template ids whose winners get in.
entryRoutes[].withinone of the options'season' = won this season (default); '12months' = in the 12 months before the event. Options: season, 12months.
entryRoutes[].topwhole number, at least 1At most this many (most recent wins first).
entryRoutes[].finaliststrue or false
entryRoutes[].seedtrue or false
entryRoutes[].labeltext
When kind is "qualifier"
entryRoutes[].kindexactly "qualifier"Yes
entryRoutes[].eventidYesA template with qualifies pointing at this event. Names a event record.
entryRoutes[].seedtrue or false
entryRoutes[].labeltext
When kind is "pool"
entryRoutes[].kindexactly "pool"Yes
entryRoutes[].poolone of the optionsYesWho a simulated route picks from. Options: cardHolders, nonCardHolders, women, youth, any.
entryRoutes[].nationslist, at least 1 itemOnly players of these nationalities.
entryRoutes[].countwhole number, 1 to 256Yes
entryRoutes[].pickone of the optionsYesHow a simulated route picks players: best ranked, best level, or random weighted by level. Options: ranking, level, weighted.
entryRoutes[].seedtrue or false
entryRoutes[].labeltext
When kind is "players"
entryRoutes[].kindexactly "players"Yes
entryRoutes[].idslist, at least 1 itemYes
entryRoutes[].seedtrue or false
entryRoutes[].labeltext
When kind is "fill"
entryRoutes[].kindexactly "fill"Yes
entryRoutes[].poolone of the optionsYesWho a simulated route picks from. Options: cardHolders, nonCardHolders, women, youth, any.
entryRoutes[].nationslist, at least 1 itemOnly players of these nationalities.
entryRoutes[].pickone of the optionsYesHow a simulated route picks players: best ranked, best level, or random weighted by level. Options: ranking, level, weighted.
entryRoutes[].scenePlayerstrue or falseAlso take players a scene created for its own residents' events, where the event's own rules allow them: a youth championship drawn from every player of its ages in the world, not only those on the travelling circuit.
entryRoutes[].seedtrue or false
entryRoutes[].labeltext
When kind is "form"
entryRoutes[].kindexactly "form"Yes
entryRoutes[].rankingtextYesA ranking a route can read: "oom" (the two-year Order of Merit), "tour:<tourId>" (that tour's own table: two years when its rules say rolling2y, else this season) or "season:<tourId>" (this season's money on that tour). Pattern: ^(oom|tour:.+|season:.+|last:.+|phase:.+|stage:.+|average:.+|rolling:.+)$
entryRoutes[].poolwhole number, 1 to 1024Yes
entryRoutes[].topwhole number, 1 to 256YesHow many players this route adds (the best N not already in).
entryRoutes[].seedtrue or false
entryRoutes[].labeltext
qualifiesobjectThis event is a qualifier: play stops when count players remain, and they are in the event template's field this season (via its { kind: 'qualifier' } route). The draw is count sections of 2^rounds slots, each section's winner qualifying, so rounds = ceil(log2(fieldSize / count)): e.g. 128 for 32 → 2 rounds, 128 for 24 → 3.
qualifies.eventidNamespaced id, e.g. "core.player.rory-calder" Names a event record.
qualifies.eventslist, 1 to 16 items
qualifies.countwhole number, 1 to 128Yes
qualifies.earlyRoundstrue or falseMarks a staged event: these are the early rounds, and the event named in event is its final. The final's winner takes the title; the early rounds give none. An edition played in a season with no final counts as the whole event.
entryStageslist, at least 1 itemStaggered entry: the best top of the field (seeds first, then Order of Merit) start in round round (1 = first round), the next stage's players in its round, and so on; everyone else starts in round 1.
entryStages[].topwhole number, at least 1Yes
entryStages[].roundwhole number, at least 2Yes
restrictobjectWho may play. Replaces the tour tier's entry rules (Tour Card / Challenge status) with these checks; omitted fields don't restrict.
restrict.genderone of the optionsOptions: m, f.
restrict.maxAgewhole number, 10 to 99Oldest age allowed on the start date (23 = under-24s).
restrict.minAgewhole number, 10 to 99
restrict.pathwayAgewhole number, 10 to 99
restrict.maxPerYearwhole number, 1 to 99
restrict.maxPerSerieswhole number, 1 to 99
restrict.nationslist, at least 1 item
restrict.tourCardtrue or falsetrue = Tour Card holders only, false = non-holders only.
restrict.cardHolderOncetext
restrict.minLevelwhole number, 0 to 100
restrict.maxLevelwhole number, 0 to 100
restrict.bandwhole number, 1 to 50
restrict.residentstrue or false
restrict.unsignedtrue or false
restrict.retiredtrue or false
restrict.excludelist, 1 to 4 items
restrict.exclude[].rankingtextYesA ranking a route can read: "oom" (the two-year Order of Merit), "tour:<tourId>" (that tour's own table: two years when its rules say rolling2y, else this season) or "season:<tourId>" (this season's money on that tour). Pattern: ^(oom|tour:.+|season:.+|last:.+|phase:.+|stage:.+|average:.+|rolling:.+)$
restrict.exclude[].topwhole number, 1 to 256Yes
whenBackgroundone of the optionsOptions: played, quick.
discontinuedtrue or false
resolveone of the optionsOptions: quick.
drawShowtrue or falseThe draw is made on television: a story in the news when it is made, with a Watch the draw button that plays it as a 3D cut scene. Omitted = majors only.
followsidAnother event's id: this one starts followsDays days after that event's start, at the same venue, whatever its own month and week say. A qualifier that follows its event moves with it every year. In a season without that event, this one falls back to its own date.
followsDayswhole number, 0 to 28How many days after the followed event's start this one starts: 0 (the same day) to 28. On the same day the two do not clash.
withinidAnother event's id: this one is played on one of that event's own days, at its hall (a youth final on the Circuit Finals' Sunday). A player in both plays both; the host's matches come first.
drawone of the optionsOptions: eachRound, rumble.
redrawFromwhole number, at least 2
prizeDealobject
prizeDeal.categorytextYes
prizeDeal.seasonswhole number, 1 to 5Yes
minAgewhole number, 0 to 99The youngest age on the start date. Replaces the tour's own minimum age; 0 = no limit whatever the tour says. Unlike restrict it leaves the tier's Tour Card rules in place.

Example#

A record from the base game’s data/events/calendar/asia-pro.json, shortened.

{
  "id": "core.event.asia-tour-event-10",
  "tourId": "core.tour.asia-pro",
  "name": "Jade Tour: Event 10",
  "venueId": "core.venue.victoriaharbour-harbour-hall",
  "month": 5,
  "week": 1,
  "follows": "core.event.asia-tour-event-09",
  "followsDays": 0,
  "days": 1,
  "fieldSize": 64,
  "entry": "open",
  "rounds": [
    {
      "bestOfLegs": 7
    },
    {
      "bestOfLegs": 7
    },
    {
      "bestOfLegs": 7
    },
    /* … 3 more */
  ],
  "prizes": [
    2500,
    1250,
    750,
    /* … 4 more */
  ],
  "ranked": false,
  "tv": false,
  "major": false,
  "crowd": 0.3,
  "tags": [],
  "entryFee": 30,
  "shortName": "Jade Tour 10",
  "stage": "hall",
  "minAge": 16,
  "logo": "assets/orgs/core.org.dso-asia.webp"
}

In your pack the record’s id starts with your pack’s id instead of core, unless you mean to replace this one.

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