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:
| Row | Notes |
|---|---|
| Age | |
| Team | The series or team label. For a loaned academy prospect this becomes the dev series. |
| Status | Contracted (green) · Free Agent (amber) · Under contract · On loan (amber) |
| Fame | 0-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:
| Driver | Filter |
|---|---|
| Signed (yours or an AI’s) | PFS |
| Pool driver racing in a dev series | that series (PF2 / PF3) |
| Pool driver in the PFS | PFS |
| Free agent with no engagement | no 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,
seriesswitches to the loan series, so the quick record filters to it,free_agentis 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):
| Reveal | Display | Badge |
|---|---|---|
| Hidden (< 8 % knowledge) | ? | grey, blank |
| Range | 12–17 | ~ |
| Exact (≥ 92 % for a stat) | 15 | Weak / 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:
| Knowledge | Revealed |
|---|---|
| < 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:
| Row | Detail |
|---|---|
| Salary | Per GP. Negative = pay driver, he brings sponsorship money. |
| Contract | Priority 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 season → N seasons left |
| Happiness | 1-100. Green ≥66, amber ≥40, red below. |
Pool driver / free agent:
| Row | Detail |
|---|---|
| Status | Free Agent / Under contract |
| Asking | His salary demand per GP |
| Tied until | Seasons 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:
- “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_okcovers him) - “This driver has announced he will retire at the end of the season.”
- “This driver has already agreed terms for next season.”
- “This driver is not willing to open talks with the team.” (a refusal has closed the door)
None— he is an available free agent, or he sits on a folded team’s roster with no live employer- “This driver is under contract for N more season(s) — only drivers in their final year can be approached.”
- “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)
- “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.
DriverProfileViewis captured when the page opens and is not re-resolved per frame, which is why a roster action returnsRosterChangedand 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_estimategate 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 0in the PFS-filtered quick record and aP1PF2 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.
resolvesearches 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 = 0by 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
- My Team — the app that hosts three of these pages
- Scouting — knowledge, StatReveal, and the full acceptance model
- Driver Academy — prospects, loans, and the “On loan to X” status
- Mid-season signing window — when Negotiate unlocks in season
- Driver traits — what the trait cards mean
- Country Profile — where the flag link goes
- Team Profile — the equivalent page for a team
- Development series — PF2 / PF3 standings behind the live tally