The debrief is the weekend’s closing report: where your drivers finished, what it did to the championship, what it cost, what broke, how your partners and drivers feel about it, and how the press rated the show.
It is also, deliberately, not where the world advances. Everything that changes the game state — points, money, damage, R&D deliveries, AI development, the circuit’s record book — has already happened by the time the screen opens. The Close button only decides where you land next.
How to open it
Automatically after the race finishes: race → podium scene (if there is a classified top 3) → Debrief. Headless “Simulate” and Quick Sim take the same route.
Close (green button, Enter or Esc) exits. There is no way back in — reopen the data through Competition, Circuit Profile and PFS Mail.
Race Standings
The top 10 plus every DNF, regardless of position. Each row carries the driver’s flag, helmet, team logo, position, points scored under the active points rule set, and the DNF reason where applicable.
Points come from points_for_position, which reads your career’s active points rule set — by default the classic top-6 scale, not a fixed table.
Your Drivers
One block per player driver, in classification order:
- Position badge — green for a podium, blue for points, grey otherwise; DNF in red with the retirement reason.
- Grid change —
grid_pos − finish_pos, green when positive, red when negative,=when unchanged. This is the raw delta (it includes places inherited from retirements ahead). - Points gained.
- Grid: Pxx and the driver’s best lap of the race.
Championship
Your constructor position and points after the race, your points gained this round, and the gap to the team ahead and the team behind in the constructors’ table — both read from the live team_standings, which was already updated before the screen was built.
Budget Impact
Four rows, in the order money actually moved:
| Row | What it is |
|---|---|
| Prize money | Your share of race_prize_total (career config, default $2,025,000) |
| Running costs | income_per_gp() — one number, and it can be negative |
| Net change | current_budget − budget_before, i.e. everything that happened this GP |
| Team budget | Cash on hand now |
Race prize distribution
race_prize(position, grid_size) is an exponential weighting over the whole grid:
weight_i = 20 ^ ((n − 1 − i) / (n − 1)) // i = position − 1, n = grid size
share = weight_i / Σ weights
P1’s weight is 20× the last classified car’s, and every position earns something. Positions beyond the grid size pay nothing.
What “running costs” contains
income_per_gp() is a net figure: sponsor income (fixed part + variable × happiness), supplier flows (client costs out, partnership income in), driver salaries, infrastructure upkeep — plus academy loan fees. It is applied before prize money, and the loan installment is paid separately right after it, so a team with a loan sees its effect in Net change but not in the Running costs row.
Net change is the honest number, because several one-offs land in the same pass and are not itemised on this screen: the championship prize at the final round, TV-rights money at the rollover, academy loan income, equity/loan movements. Use the Finance app for the breakdown.
Component Failures
The panel only exists when something failed. It lists each DNF caused by a component — the part name and the driver code — built from cars that retired with a non-empty failure_component.
It is a summary, not the repair report. Two mails carry the detail:
- Weekend damage report — every part that came back with a performance loss, grouped per driver, each tied to the incident that caused it. Built from
weekend_incidentsaccumulated across practice, qualifying and race, measured against the inventory as it stands after the write-back, so anything you already mended between sessions is silently absent. No surviving incident = no mail. - Mechanical retirement mail from the chief mechanic, with an honest verdict per failure: crash-induced, a reliability problem worth investing against, or plain bad luck. It reads the incident list, so it is generated before the sheet is cleared.
Damage itself was written back into the inventory before the debrief existed (write_race_damage, per driver’s car binding, not their role). In-race nose changes also consumed spare front wings at that point — the worst race-ready spare first. See Weekend Loadout.
Partners
One row per signed sponsor and supplier, with a header line giving the number everything was judged against: “Team result this race: Pxx” — your position in the per-race team classification (teams ranked by their best classified car).
Each row shows the brand’s logo and styled name, a ✓/✗, its target (Top N), a happiness bar, and this race’s delta.
The objective model
target = num_teams + 1 − stature // stature = avg of the brand's two ratings
gap = target − team_pos // positive = beat the target
base = clamp(gap × partner_hap_per_place, ±4 × partner_hap_per_place)
if base < 0: base ×= 1 − care_absorb // care WU soften the malus only
weight = 0.5 + 0.5 × (races_done / races_total)
delta = round(base × weight) (+8 for a 1-2, else +5 for a win), clamped −10..+12
Defaults: partner_hap_per_place = 2.0, so the gap term is ±8 at most before weighting; partner_care_absorb = 4% per care work unit, capped at 60%.
Two consequences worth internalising:
- Weighting is degressive. A bad round in race 1 of 20 counts at half weight (0.525); the same result in the finale counts at full. Early-season disasters are cheap; late-season ones are not.
- Care WU only cut losses. They never amplify a good weekend — but they also accrue up to a +25% negotiation head start for the contract renewal.
Supplier happiness moves on the same model, but supplier money never moves with it. Sponsor money does: the variable 30–50% share of each contract is paid out scaled by happiness. See Sponsors and Suppliers.
Driver Morale
One row per player driver: helmet, flag, name, happiness bar and delta.
Happiness is a blend toward a computed target, not an accumulator:
score = 50
+ 10 if salary ≥ avg_stat × 5000 else −5
+ team_reputation / 10 // 0..+10
+ 3 per series tier above the driver's ambition target
+ result: P1 +15 · P2-3 +10 · P4-6 +5 · P7-10 +2 · P11-15 0 · P16+ −3 · DNF −8
+ toxic-teammate drag (the team-wide malus minus the driver's own share)
new = 0.6 × old + 0.4 × clamp(score, 1, 100)
So a single result moves happiness by at most 40% of the distance to its target, and the target itself is dominated by structural factors — salary, team reputation, ambition fit, teammates — not by one race. A driver who is unhappy after a podium has a contract or a teammate problem, not a results problem.
A Toxic teammate imposes a permanent drag on everyone else’s target (a driver never poisons themselves), which is why the effect converges to a lower steady state instead of compounding race after race. See Driver traits.
Race Stats
Four counters, all derived from the sim’s full event log (not the trimmed HUD log):
| Stat | Source |
|---|---|
| Overtakes | RaceEventKind::Overtake events |
| Mistakes | RaceEventKind::Mistake events |
| DNFs | classification entries with a DNF gap (red at 3+) |
| Safety Cars | SafetyCarDeployed events |
Driver of the Day
Nominated across the whole grid, not just your team. DNFs are ineligible.
real_gained = max(0, (grid − finish) − DNFs_that_started_ahead)
score = 2 × real_gained + overtakes_made
eligible if real_gained ≥ 1 OR overtakes ≥ 3
The DNF discount is the point: raw “places gained” inflates whenever cars ahead retire, and a driver could “gain five places” by sitting still. Your Drivers still shows the raw grid delta (that is your real finishing position change); the DotD ranking uses the discounted number.
“No standout performance this race.” is a legitimate outcome on a processional afternoon.
TV Rating
Zero to five stars, drawn as vector triangles, with a verdict label: Dull · Procession · Quiet afternoon · Solid race · Cracking show · Instant classic.
closeness = clamp(1 − win_margin_s / 25, 0, 1)
racing = clamp(overtakes_per_car / 10, 0, 1)
attrition = rises to 0.35 at a 22% DNF share, falls back to 0 by 60%
drama = clamp(min(0.45, safety_cars × 0.45) + attrition + min(0.30, mistakes_per_car / 0.5 × 0.30), 0, 1)
farce = 0.15 × clamp((dnf_share − 0.40) / 0.25, 0, 1)
score = (0.42 × closeness + 0.38 × racing + 0.20 × drama − farce) / media_severity
Bands: 5★ ≥ 0.78 · 4★ ≥ 0.58 · 3★ ≥ 0.42 · 2★ ≥ 0.24 · 1★ ≥ 0.10 · else 0.
Notes that matter:
- The fight for the win is the biggest single term. A 30-second cruise caps your rating hard no matter how much overtaking happened behind.
- Attrition is drama up to a point, then a farce. Past a 40% DNF share the race is marked down. A grid that destroys itself is not a classic.
- If nobody finished on the lead lap the winning margin is treated as 60 s — a rout.
- Media Severity (Settings → Career) divides the score: above 1.0 the press gets harder to please, below 1.0 more generous. Calibrated so a competent PFS race is worth 3–4★.
The star rating is not decoration. It is stored as this race’s media rating on the circuit’s permanent record, and the circuit contract review reads it.
Season Progress
Round N of 20 complete plus a progress bar.
What already happened before you got here
process_race_results runs the moment the race finishes, before the post-race save. In order:
- Championship points awarded and season records updated.
- All-time career stats bumped on signed drivers and on the team (a 1-2 credits two team wins).
- Finances: running costs applied to you and every active AI team, loan installments paid, race prize distributed.
- Race damage written back into every team’s part inventory; spare front wings consumed for in-race nose changes.
- Weekend damage mail and mechanical-retirement mails generated, then the incident sheet is cleared.
- Trait discovery accrued at the race multiplier (0.06, no focus available) plus tyre-trait discovery.
- Scouting observations advanced one GP.
- A veteran may announce an end-of-season retirement.
- PF2 / PF3 development-series rounds simulated for the same weekend, academy loan fees credited, and a dev-series team may send a loan offer for one of your prospects.
- Bankruptcy check (
red_gp_streak: 3 consecutive GPs in the red), after AI teams have tried their financial levers. - Team performance snapshot for the World Data graphs.
- GP counter advanced, regulation/season break handled (bonus work units scaled by severity), pending offers resolved, the mid-season hire quota reset, championship prizes paid at the final round.
- Debrief built, then the result recorded into the circuit’s dossier — history row (year, winner, DNFs, crashes, safety cars, overtakes, media rating) and the all-time lap record if the fastest lap of the race beat it.
- Race results email sent.
- Happiness updated for all teams (this fills the Partners and Driver Morale panels).
- Driver stats evolved (player, AI, pool and academy), with a Driver Development Report mail per changed driver and an Academy Development Report for prospects.
- A race-result headline pushed to the News feed.
Then, still at race finish and still before the save:
- The weekend state is cleared: plans, qualifying order, exclusions,
weekend_loadout(the whole inventory is available again) andweekend_step. run_post_race_developmentruns: the annual R&D work-unit pool is refilled to50 + 10 × engineering_levelplus any break bonus plus+5per active supplier partnership; the Private Testing programme runs its week (with its own report mail); in-progress R&D projects and production orders are delivered with their emails and development news; every non-retired AI team develops its car.- The save is written and a
post_racerollback snapshot is taken.
This ordering is deliberate. The pipeline used to live in the debrief’s Close handler, and exiting the debrief sideways (View Circuit → a sidebar click) dropped it entirely — losing the work-unit refill, the repair budget and a whole round of AI development.
What Close does
Only navigation:
- Season complete (
current_gp > 20) → the Competition screen with its “Go to Next Season” button. - Just raced GP 10 → arms the mid-season signing window: the AI works the market once, supplier withdrawal announcements are made, and you get a 3-turn free-weekend negotiation phase. Then the post-race R&D screen.
- Otherwise → the R&D screen in post-race mode, listing the designs and production orders delivered this round.
Advanced
- Read Net change, not Prize money. The prize row is one line item among several that moved this GP; one-offs are invisible here.
- A partner’s ✗ early in the season is cheap. The degressive weight halves it. The same ✗ at round 20 is full price and lands right before the contract-end refusal roll.
- Care work units are a debrief lever, applied earlier. They cut the malus on this exact race — but only if the WU were already parked on the brand in Marketing → Missions before the weekend.
- The team classification, not your best driver, is what partners judge. Teams are ranked by their best classified car, so a P4 and a DNF is a P4 team result.
- A 3-star average is normal. The bands are calibrated so the median race sits in 3★. Chasing 5★ means close finishes, not carnage — the farce penalty punishes attrition past 40%.
- The fastest lap of the whole field sets the circuit record, not yours. Check the Circuit Profile to see whether it moved.
- DNF reasons are worth reading. A mechanical retirement gets a chief-mechanic mail that tells you whether it was a crash consequence, a genuine reliability problem, or noise — that verdict is the input to your next Improve decision.
- Quitting on the debrief is safe. The post-race save and its snapshot were taken at race finish; nothing on this screen is pending.
Common mistakes
- Expecting the debrief’s Close to “process” the round. It does not. All of it ran at the flag.
- Reading the grid-change arrow as merit. It includes places inherited from retirements ahead — which is exactly what the Driver of the Day score discounts.
- Blaming a race for unhappy drivers. The result term is worth at most ±15 into a target that is then blended at 40%. Salary, reputation and toxic teammates dominate.
- Ignoring the Component Failures panel because it is small. A single failed part means a fitted component is probably below race-ready and your next weekend starts with a DNS warning.
- Assuming the star rating is flavour. It is persisted as the circuit’s media rating and feeds the series contract review.
- Skipping the mail after the debrief. The damage report, mechanical verdict, driver development cards and part deliveries all arrive as email, not on this screen.
See also
- Finance — the itemised version of Budget Impact
- Competition — full championship tables
- Circuit Profile — where the race record and media rating land
- R&D — the post-race screen Close sends you to
- Sponsors and Suppliers — the partner-expectation model
- Driver traits — Toxic and the morale drag
- PFS Mail — damage, mechanical and development reports
- Mid-season signing window — armed after GP 10