Wiki under construction. Many concepts here are from alpha 0.2 and may still change. The wiki will be finalised for version 1.0 — for now it's here to help closed testers and, later, early-access players find their way around. For the most up-to-date and accurate info, join the Discord — that's where changes are announced first and where you can ask directly.

Join the Discord for the latest info

Driver Profile

A driver's full dossier — record, stats and how much of them you know, wages, demands, and every action you can take.

Work in progress. First draft is here, but content may evolve and screenshots are still being added. Spotted something wrong? Tell us on Discord.
On this page

The Driver Profile is the full-screen dossier on one driver: who he is, what he has won, what he can do (as far as you have bothered to find out), what he wants, what he costs, and every action you can take on him. It is the single page every driver name in the game points at, and it doubles as the My Team roster screen.


How to open it

Driver names are clickable almost everywhere, and all of them land here:

  • Scouting → Known Drivers — the green magnifier button on a row, or Enter / double-click on the selected row.
  • Scouting → Missions — the driver name on an observation card.
  • My Team — the app is three profile pages, one per seat.
  • Driver Academy — the prospect’s name or his portrait.
  • News — any clickable driver reference in a headline.
  • Email — driver cards in scouting, development and transfer mails.
  • Competition / standings, World Data, Debrief, Team Profile, Country Profile — driver names throughout.

Back / Escape returns to whatever called it. When the page is hosted by the Team app, a three-button tab bar (Primary — XXX …) sits under the header.

Resolution is id-first: when the caller knows the numeric driver_id, the person is found by identity across rosters, pool and academy, and only then keyed by his own code. A stale or colliding code can no longer land you on someone else’s page.


PROFILE — the identity block

Left: the portrait — his face composited with a suit. Your own drivers, AI drivers and academy prospects wear a freshly baked team suit with the real sponsor decals (an AI team’s suit uses its first driver’s suit index, so teammates match); free agents and other-series pool drivers fall back to a plain hue-shifted suit.

Right: name, flag + country (both clickable → Country Profile), then a four-row table:

RowNotes
Age
TeamThe series or team label. For a loaned academy prospect this becomes the dev series.
StatusContracted (green) · Free Agent (amber) · Under contract · On loan (amber)
Fame0-100 bar. Never gated — renown is public. Drives salary demands, role expectations and media pull.

Below, the helmet render. For a signed driver, fame is derived from his weighted rating plus his trait fame deltas (signed drivers carry no stored fame field).


QUICK RECORD — and why it filters by series

The headline totals: Pro seasons, Race starts, Wins, Pole positions, Podiums, Top-10 finishes, Championships, Best race finish, Best championship.

It shows the current engagement’s series only, and a Series record row names which one:

DriverFilter
Signed (yours or an AI’s)PFS
Pool driver racing in a dev seriesthat series (PF2 / PF3)
Pool driver in the PFSPFS
Free agent with no engagementno filter — the all-time view

The filter walks the per-season history. Legacy rows stored the team name in the series field, so anything that is not a recognised dev-series abbreviation counts as PFS.

The running-season fold-in

Career history holds closed seasons; the current one lives only in the flat counters. So the quick record adds the delta:

series_total += flat_counter − sum(all history rows)

That delta belongs to the current engagement by definition, and the season count gets +1 for the season in progress.

The live dev-season tally

A driver racing a development series today is a special case: the PF2/PF3 background sim only folds its results into the flat counters at the rollover, so a loaned prospect’s page would sit frozen all year. The profile therefore also folds in dev_season_tally — the live standings row from that series (starts, wins, podiums, poles, top-tens, best finish) — straight from save.dev_series.

”On loan to X”

For one of your academy prospects who is out on a development-series loan:

  • the subtitle becomes “On loan to {team} ({series})”,
  • status becomes On loan in amber,
  • series switches to the loan series, so the quick record filters to it,
  • free_agent is cleared and the live tally is attached.

Without that block the page showed him as a Free Agent with an all-time view and no visible racing.

If the driver is in his first season and has no series rows yet, the all-time bests are used as the series bests — a rookie’s records are this season’s.


ATTRIBUTES — gated by scouting

Six rows (Intelligence, Pace, Consistency, Adaptability, Stamina, Aggression), each a bar + value + tier badge, plus an overall rating below.

Below 100 % knowledge a SCOUTING banner sits on top of the panel with a progress bar and the percentage (red < 33 %, amber < 66 %, green above), so the fuzzy numbers explain themselves.

Every value routes through stat_estimate (see Scouting for the exact narrowing formula):

RevealDisplayBadge
Hidden (< 8 % knowledge)?grey, blank
Range12–17~
Exact (≥ 92 % for a stat)15Weak / Average / Strong / Elite

Tier thresholds: ≥17 Elite (green), ≥14 Strong, ≥11 Average (amber), below that Weak (red).

The overall rating is the weighted blend the sim itself uses to value a driver:

(1.3·INT + 1.5·PAC + 1.4·CON + 1.0·ADA + 1.2·STA + 0.6·AGG) / 7

on the 1-20 scale, gated by the same estimate (so it only reads exact at ~92 %+).

Hovering any attribute row pops a one-line explanation of what the stat does in a race.

Your own drivers and your own academy prospects always resolve to 100 % — no bars, no bands, no Scout button.


TRAITS — and the goals block

Traits reveal one at a time as knowledge climbs (trait_reveal_state, staggered so trait i of n is confirmed at (i+1)/(n+1) of the range, suspected from 60 % of that point):

  • Discovered — a full card: polarity (+ / ), the trait name, tier colour on the left border, Permanent / Temporary, and its effect lines.
  • Suspected — a dashed grey card: ”? Suspected trait — keep scouting to confirm.”
  • Unknown — counted in a footer: “N undiscovered trait(s) — scout further.”

A driver with no traits reads “No notable traits” at 100 % but “Not enough scouting to assess traits” below it — you cannot even be sure the absence is real.

Underneath, the ambition block, gated on three further thresholds:

KnowledgeRevealed
< 40 %“Scout more to learn this driver’s goals.”
≥ 40 %SEASON GOAL + SIGNING TARGET (the tier line: “Holding out for a top team” etc.)
≥ 55 %CAREER GOAL (long-term aspiration)
≥ 70 %Ambition bar 0-100 with a label — Content / Grounded / Ambitious / Very ambitious

The signing target is not flavour: it feeds the same TeamTier::target_from_ambition that the acceptance formula uses, so the phrase and the Acceptance % on the offer dialog always agree.


CONTRACT

Two shapes, depending on whether he is employed.

Signed driver:

RowDetail
SalaryPer GP. Negative = pay driver, he brings sponsorship money.
ContractPriority order: team folded — free at the end of the season (red) → retiring at the end of the season (red) → extended — N season(s) from next year (green, a mid-season renewal not yet applied) → expires this seasonN seasons left
Happiness1-100. Green ≥66, amber ≥40, red below.

Pool driver / free agent:

RowDetail
StatusFree Agent / Under contract
AskingHis salary demand per GP
Tied untilSeasons left on his series deal (signing him early costs a buyout) — replaced by the retirement line when he has announced one

The “extended” line exists because a mid-season renewal only applies at the rollover: the roster still reads contract_years = 1, so without deferred_renewal_years a driver who just signed a three-year extension would read “expires this season”. A deferred move to a rival is deliberately not shown.


ACTIONS

A single 190px-wide column. What appears depends on who he is.

Negotiate — Make Offer

Enabled only when both hold:

negotiation_allowed  =  pre-season Drivers phase  OR  the GP-10 mid-season window
offerable            =  driver_approach_block(save, code) == None

Greyed otherwise, and clicking a greyed button opens a modal that states the real reason — the block string itself, not a generic message. driver_approach_block returns, in order:

  1. “Too young for the PFS — drivers must be at least 18. He races in the junior ladder for now.” (unless the mid-season window plus pfs_deferred_age_ok covers him)
  2. “This driver has announced he will retire at the end of the season.”
  3. “This driver has already agreed terms for next season.”
  4. “This driver is not willing to open talks with the team.” (a refusal has closed the door)
  5. None — he is an available free agent, or he sits on a folded team’s roster with no live employer
  6. “This driver is under contract for N more season(s) — only drivers in their final year can be approached.”
  7. “Contract talks with drivers under contract only open during the mid-season renewal window (the free weekend after GP 10).” (final-year driver, window closed)
  8. “This driver is not on the market.”

The button routes three different ways: an academy development driver resolves through academy_offer_result (immediate roll, +0.20 sign boost); a mid-season target is queued as a deferred (n+1) offer answered by email next turn; otherwise it is a normal pre-season pool offer. Arrow keys drive the dialog: ←/→ years (1-3), ↑/↓ role.

For an academy development driver the button is relabelled “Sign to race team”.

Scout — Assign WU

Shown whenever knowledge < 100 (your own drivers and prospects therefore never see it live — it renders greyed with “Already fully scouted”). Two blocks:

  • Phase ≤ 1“Scouting not available yet”: the Scouting department’s capacity is not locked in until Infrastructure is confirmed.
  • Free capacity + existing = 0 WU“No scouting capacity”, with a Go to Missions shortcut.

Otherwise the WU modal opens, seeded with the current observation or min(available, 10), clamped to [1, free + existing], adjustable in steps of 1 (± arrow keys too). It previews At N WU/GP: ~X GP to fully scout using ceil((100 − knowledge) / (wu × 1.0)). Confirming upserts the observation; a new one also mails you a scouting card and posts a paddock rumour that your team is running the rule over him.

☆ Add to favourites / ★ Remove from favourites

Toggles the shortlist that the ★ filter in Scouting → Known Drivers reads.

Roster actions (your own drivers only)

Injected by the profile itself, so they appear from any app that opens one of your drivers, not just My Team:

  • Switch Primary ↔ Secondary (confirmation popup)
  • Promote to Primary / Promote to Secondary (Reserve only)
  • Fire — buyout $X (confirmation popup; the label quotes the exact cost)

All four grey out while weekend_plan is set — from Loadout confirmation to chequered flag — with the hover text “Roster locked during the race weekend — finish the GP first.” See My Team for the mechanics and the buyout formula.


CAREER RECORD

A full-width table, newest season first, one row per completed season:

Season · Series · Team · Starts · Wins · Poles · Podiums · Top 10 · Best · Champ.

The Season column shows the calendar year, not the career’s season index. The Series cell is a coloured chip — PF2 amber, PF3 sage, everything else PFS gold (legacy rows that stored a team name in the series field are treated as PFS). Positions render as P4, or when there is none.

A driver with no completed seasons gets a single italic row: “No completed seasons yet.” The current season never appears here — it lives in the Quick Record’s fold-in until the rollover closes it.


Advanced

  • The page is a snapshot. DriverProfileView is captured when the page opens and is not re-resolved per frame, which is why a roster action returns RosterChanged and the Team app rebuilds the hosted page rather than mutating it in place.
  • Knowledge is asymmetric between panels. Fame is always exact; stats need 92 %; the overall rating needs 99 %; the season goal needs 40 %, the career goal 55 %, the ambition bar 70 %. A driver at 45 % tells you what he wants long before he tells you what he is.
  • The offer dialog does not leak. It reuses the same stat_estimate gate as this page — the one screen where the numbers cost money used to print the truth for free.
  • Quick Record vs Career Record can legitimately disagree. The quick record is series-filtered and includes the running season; the table is all series and closed seasons only. A PF2 champion signed into your team shows Championships 0 in the PFS-filtered quick record and a P1 PF2 row in the table.
  • A loaned prospect’s live tally is display-only. It is read from the dev-series standings, not from his counters — comparing the two mid-season will show a mismatch that resolves itself at the rollover.
  • resolve searches in a fixed order: your roster → AI rosters → the free-agent pool → your academy. A signed driver also has a greyed pool row (frozen at signing day, with zeroed career stats); rosters-first is what stops the stale row being used.
  • The country name and the flag are the same link. Both open the Country Profile.
  • A folded team’s driver is approachable now, not at the rollover — the contract-length gate deliberately skips retired teams, because there is nobody on the other side of the table.

Common mistakes

  • Reading a ~ badge as a rating. ~ means the number is the midpoint of a band. At 50 % knowledge that band is ±3 on a 1-20 scale.
  • Assuming a greyed Negotiate button is a bug. It always has a reason; click it and read the modal, or hover for the short version.
  • Trying to Scout during Phase 1. The department’s capacity is not final until Infrastructure is confirmed.
  • Thinking “expires this season” on a driver you renewed at GP 10 means the renewal failed. Look for the green “extended — N season(s) from next year” line; if it is there, the deal is recorded and applies at the rollover.
  • Judging a prospect on Fame. Academy prospects carry fame = 0 by construction — they are reserved, out of the public eye. Their rating and potential are fully visible instead.
  • Signing on the Quick Record without checking the series chip. “3 wins” in PF3 and “3 wins” in the PFS are not the same achievement.

See also