Skip to main content

RunScore setup

Start from a sample race, then make events and listing columns match the Race Roster segments.

Splits must match

The listing Field Header must equal the Race Roster segment name. The event distance must match that segment, including at the mat/decoder. Event names can differ. One mismatch and that checkpoint does not drive tracking.


1. Start from a sample​

Use the dedicated 5K10KHalf-LPT sample from race-templates. The standard 5K, 5K10K, 5K10KHalf, and 5K10KHalfFull samples intentionally contain normal results publishing only.

Clone one (Race Configuration), then edit. Do not score a live event inside the original sample folder.

Set %rr_5k% / %rr_10k% / %rr_half% (and any other results-race variables) in Entries.ini to the Race Roster results race IDs.


2. Events (mats) vs fields (what you upload)​

Chip reads land in events. The start mat is the noisy one: extra reads from people standing near it, then a flood when the gun goes that can miss a real start. Splits further down the course are usually clean.

Do not list the raw start event. Copy a chosen read into a database field, then upload the field.

StoreRole
Events (Start_Half, North, Finish, …)Decoder target. Dirty at start.
Fields (Start, North_Time, RUNNER STATUS, …)Corrected values the JSON listing sends

Event To Database copies an event into a field (with a Select so you only take reads after the gun, or only when the field is still empty). Database To Event goes the other way when you need the field back on an event.

Typical copy before each upload (auto-run this more often than the JSON post):

Select Category
= Half
And
Select Event Start_Half
>= GunStart
Event To Database
Event Start_Half
Database Field Start
Time Format HH:MM:SS.01

Elapsed split into a field (cumulative):

Event North
minus GunStart
Database Field North_Time
Time Format H:MM:SS.01

If a start read never arrives, copy gun into Start for that bib so tracking still has a clock start. Down-course splits can list from the event if you trust the mat; start should still go through a field.


3. Events to create​

Misc. → Edit list of events (Events.xml). The Results dropdown is that list.

EventRole
GunStartGun
One start event per distance (or ChipStart)Start mat — copy to a field, do not upload raw
One event per LPT splitCheckpoint (any name: North, Split5K, …)
FinishFinish
statusDummy. Not a mat. See Race Status

Set Distance on each split to the Race Roster segment distance. How to add events: Race Configuration and Enter/Edit Results.

The sample split names (Split1k, Split2K, and so on) are examples, not Race Roster requirements.


4. Edit the LPT listing​

Each split column can be a Field or an Event. Both are valid. What Race Roster matches is Field Header — that must equal the Race Roster segment name (or the RR field label for start/status). Event names can be anything (Split10K, North, …).

Send clock time of day or elapsed — whichever that Race Roster segment is set to. Do not mix them. Cumulative elapsed is start line → this checkpoint (minus ChipStart). Interval elapsed is previous split → this one. Clock time is the mat read with no minus.

Start still goes through a field: do not list the raw start event.

One split, two ways​

Elapsed (typical road race; RR cumulative):

Event Split10K
minus ChipStart
Time Format H:MM:SS.01
Field Header 10K
Field North_Time
Field Header North Mountain Summit
Time Format H:MM:SS.01

The first is what the sample uses (ResultsOnlineLPT*.rsm). The second is a live listing after Event To Database. Same rule: Field Header equals the RR segment name.

Clock time of day (only if Race Roster expects that):

Field North
Field Header North Mountain Summit
Time Format HH:MM:SS.01

Clock start (field)​

Field Start
Field Header Start Chip Time Local
Time Format HH:MM:SS.01

Optional fallback if there is no start-mat read:

Event GunStart
Time Format HH:MM:SS.01
Field Header Start Gun Time Local

Finish can be a field or Event Finish minus ChipStart. Do not list raw start.

Headers Race Roster sees​

JSON labels come from Field Header. After the first upload, confirm they match the Race Roster segment names, or map the column under Edit results. Default title-casing (5K → 5k) only matters if Race Roster's name is case-sensitive and you did not remap.

Leave missing times blank

Do not put List DNF on the LPT upload. Empty cell = not yet there. See List DNF.


5. Race Status (dummy event)​

Without a time on some event, RunScore does not upload that person. LPT then has nobody on the map until they hit the first split (or finish). The dummy status event is not a mat. A time of 0 on that event is the include flag: it forces the row into the Race Roster JSON even though every real split is still blank.

Put 0 on Status​

Every participant you want on tracking must already have a bib. Then seed the dummy event from the Results screen:

  1. Results → Status (the dummy event, not Finish).
  2. Simulate a race targeting Status. Any generated times are fine — you are only creating a result row per bib.
  3. On that Status screen, type @TIME 0 and press Enter. All Status times become 0:00:00.00.

Results for event: Status — every bib at 0:00:00.00

That is what forces RunScore to report them. Empty split/finish cells stay empty.

Simulate Status only

The simulate dialog asks which event to fill. Choose Status. Simulating Finish (or a split) writes fake times onto a real mat.

Run @CalcStatus (@CalcStatus.5.P.lst in the sample) before each upload. It copies mats onto fields (Events2DB.rsm), then writes RUNNER STATUS:

  • COMPLETE — Finish is not empty
  • IN_PROGRESS — ChipStart or any split, no Finish
  • STARTING — no mat read yet (set-status-starting.rsm)

That field is what Race Roster reads as Race Status. The sample has no Status field. @AutoResultsLPT already runs @CalcStatus for you.

In the JSON listing:

Event Status
Field Header Hide
Field RUNNER STATUS
Field Header Race Status

Hide is the dummy Status event (0). List it so RunScore will send the row; name the header Hide so Race Roster does not treat it as a split. Race Status is RUNNER STATUS. The DNF field (DNF / DNS / DQ) is separate — LPT listings skip rows where it is filled.

Until the first checkpoint those rows still have no elapsed split. Map Estimated on the same listing or the map is empty until 1k (or whatever the first segment is). See below.

The dedicated LPT sample includes the dummy Status event, Hide, RUNNER STATUS, and Estimated.


6. Estimated finish time​

Optional for the API, worth sending for anyone still STARTING. Status 0 + Hide gets the row to Race Roster; Estimated is the only pace Race Roster has until that person hits the first checkpoint (for example 1k). Without it the map stays empty for that gap.

Collect it as a registration question and map it to the Estimated database field on the name form. List that field with Field Header Estimated Finish Time. Format HH:MM:SS.

Field Estimated
Field Header Estimated Finish Time
Time Format HH:MM:SS

Required listing commands: External Report To RaceRoster, Records Per Page, No Page Numbers, ##id## in the header. See Publish Live Results.

Next: Decoders, then Publish.