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

Mid-Season Signing Window

The GP-10 free weekend — three negotiation turns for free agents and every driver in the final year of a contract.

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

Once a season, after GP 10, the championship takes a break and the contract renewal window opens for three negotiation turns. Free agents and every driver in the final year of a contract — yours and your rivals’ — become approachable. Nothing you agree here takes effect now: every deal is a pre-agreement applied at the season rollover. It is the only mid-season movement in the driver market, and it is where you either lock your line-up down or lose it.


How to open it

You do not open it — it opens around you.

The moment GP 10 finishes, the window arms itself. From then on:

  • the sidebar status line reads Season N — Free Weekend — Turn 1/3,
  • the Next GP advance button becomes Free Weekend, spending a negotiation turn instead of starting a race,
  • the Scouting app stops being read-only (its status bar says “Free Weekend — offers apply NEXT SEASON”),
  • the Negotiate button on driver profiles lights up for every eligible driver.

You negotiate from the Scouting app and from driver profiles — there is no dedicated market screen in this build (the old MidSeasonScreen has been dormant since 0.4.0).

The break also announces itself by mail: “Mid-Season Break — GP 10: the contract renewal window is open”, which lays out who is signable, that deals are pre-agreements, the poaching risk on your own expiring drivers, the seat arithmetic and the buyout rule.


Timeline of the window

MomentWhat runs
GP 10 finishesai_mid_season_signings — the AI works the renewal market first. Supplier withdrawal announcements land. free_weekend_turns_used = 0, offer quota reset. Bonus development Work Units credited (compute_wu_pool(engineering_level)).
Turn 1 → 2 → 3Each advance: pending offers are resolved by email, R&D projects accrue one GP-iteration (yours and the AI’s, for parity), scouting ticks, academy slots top up, AI scouting rumours post.
After turn 3ai_mid_season_poaching — rivals go after every un-renewed final-year driver, including yours. Window closes, GP 11 starts.
Season rolloverEvery pre-agreement is applied.

MID_SEASON_SIGNING_GP = 10, MID_SEASON_TURNS = 3.

Note the ordering carefully: the AI renews before you get a turn, and poaches after your last one. Your three turns sit in the middle of a market that has already moved once and will move again.


Who is eligible

mid_season_eligible is a small, strict predicate:

Excluded outright

  • anyone who already has a pre-agreement for next season,
  • anyone who has announced his retirement at season’s end (his seat is a vacancy, not a signing).

Included

  • free agents in the pool (available) who pass the deferred age rule,
  • your own drivers with contract_years ≤ 1,
  • any AI team’s driver with contract_years ≤ 1.

A driver with two or more years left is untouchable: “This driver is under contract for N more season(s) — only drivers in their final year can be approached.” Outside the window, even final-year drivers are refused with “Contract talks with drivers under contract only open during the mid-season renewal window (the free weekend after GP 10).”

The 17-year-old exception

Normally the PFS is 18+. Because this window deals in next-season contracts, pfs_deferred_age_ok relaxes it:

age >= 18                                         OR
(age + 1 >= 18  AND  series_contract_years <= 1)

A 17-year-old who is free or out of his junior-series contract next year may pre-agree — he turns 18 at exactly the rollover that applies the deal. The player and the AI both use this rule.

Other blocks

A driver who previously shut the door on you is still refused (“not willing to open talks with the team”), and a driver on a bankrupt team’s roster is treated as available immediately — a folded outfit holds nobody.


Making an offer

Same dialog as pre-season: salary in K$/GP, 1-3 years, role. Same live Acceptance % readout, same driver message, same scouting gate on his stats.

Three differences that matter:

  1. A full current roster does not block you. The offer is a next-season pre-agreement, so all three of your seats can be occupied today.
  2. Offers are queued, not resolved. submit_driver_offer pushes a PendingOffer and the driver answers by email on the next turn — exactly like a pre-season offer. An instant yes/no toast would have skipped the quota and broken the rhythm.
  3. Quota: 3 offers per GP (MID_SEASON_OFFERS_PER_GP), reset when the window opens. Over three turns that is a meaningful budget, but not the whole market.

Acceptance

The standard driver_acceptance_prob (see Scouting for every term), with one addition:

if this is a RENEWAL of your own driver:  prob = min(prob + 0.15, 0.97)

Loyalty is worth +0.15. Keeping your own man is materially easier than poaching someone else’s.

The seat check

Before rolling, the window counts next season’s seats:

staying = your drivers with contract_years > 1 and not retiring
pending = pre-agreements you have already made (excluding a re-offer to this same driver)

if staying + pending >= 3  →  refused

“No seat left for next season: N driver(s) stay under contract and M pre-agreement(s) are already signed.” Re-offering to the same driver replaces his pending entry rather than adding a second one. A renewal goes through the same arithmetic — it takes the seat its own expiring driver frees.

Refusals

Same memory model as pre-season: a near-miss usually earns a second chance, a distant offer closes the door for 1-2 seasons. Every refusal is emailed, and the wording tells you which one it was. Renewals are exempt from the hard close — your own driver testing the market has not fallen out with you; he just gets a “{Name} won’t renew” mail and a Transfer news item saying he will weigh up his options.

On acceptance you get a confirmation mail (“Contract renewed” or “Pre-agreement signed”) and a Transfer news item. Poaching a rival’s driver is worded as a transfer and names the team he is leaving.


What the AI does in the same window

Before your turns — ai_mid_season_signings

1. Renewals. For each of its final-year drivers, a genuinely two-sided decision:

Team side

keep_prob = 0.40 + rating/200                      (~0.40 to ~0.90)
keep_prob -= salary_weight × (salary / 2,000,000)   (finance posture)
keep_prob -= 0.10  if age >= 34

salary_weight is 0 under a Comfortable posture, ~1× under Tight, ~2× under Critical. A struggling team lets an expensive driver walk first.

Driver side (only if the team offered)

prob = min(driver_acceptance_prob(...) + 0.15, 0.97)   — the same loyalty bonus you get
prob -= 0.20  if happiness < 35
prob  = clamp(prob, 0.05, 0.97)

Accepted → a 1-3 year pre-agreement and a Transfer news item (“X extends with Y for next season”). Refused by either side → “X and Y are set to part ways at the end of the season” — which is your cue that a seat just opened.

2. Filling projected vacancies. Each AI team targets 2 race seats for next season. Candidates are free agents who pass the deferred age rule, are uncommitted, and whose buyout is under 10 % of the team’s budget. They are scored by fame + jitter(±10) − salary_weight × (asking / 25,000), so a Tight team hunts affordable, not famous. Acceptance gets a small +0.10 appetite bonus.

After your last turn — ai_mid_season_poaching

Rivals now hunt final-year drivers on other teams — the player’s included — plus every driver of a folded team regardless of paper term. Candidates are ranked by renown + jitter; acceptance takes a +0.05 poaching bonus, capped at 0.90. The tier/ambition fit still gates it, so a backmarker cannot lure a top driver.

When one of your drivers agrees to leave, you get a personal email: “{Name} to leave for {Team}”.

This pass is the reason renewing during your three turns matters. Anyone you leave unsigned is on the market with your rivals’ full attention and none of your loyalty bonus.


What happens at the rollover

Pre-agreements are snapshotted before the contract-expiry pass mutates the rosters (a poached rival is dropped from his old team, so his profile has to be captured first). Then, for each one:

  1. The driver is removed from whichever roster he currently sits on; his pool row is upserted, not deleted (fame max-preserved), so he stays visible in Known Drivers.
  2. The buyout is charged: gps_per_season × series_contract_years × |series_salary|. An expiring PFS driver and a genuine free agent both cost 0; a driver still under a junior-series contract costs real money.
  3. He is signed into the first free role, preferring the role you agreed, for the salary and term you agreed. A “New signing” mail confirms it.
  4. If no seat is free, the deal falls through and you get a “Pre-agreement fell through — {Name}” mail. The seat check at offer time makes this rare, but your roster can still fill between GP 10 and the rollover (an academy promotion, a post-fire hire).

Until the rollover, a renewed driver’s roster entry still says contract_years = 1. The profile compensates: deferred_renewal_years makes the contract row read “extended — N season(s) from next year” in green instead of the misleading “expires this season”. A deferred move is deliberately not shown — that driver’s current deal really does end, and the transfer is news, not a contract fact to leak on his profile.


Advanced

  • The window is a full mini-phase, not a pause. Three turns of R&D accrual (Design N and N+1), three scouting ticks, three academy top-ups, plus a one-off bonus Work Unit pool. Treat it as three free development weeks with a transfer market attached.
  • AI R&D accrues at the same rate during the window, deliberately — your three free dev turns do not let you out-develop the field.
  • Renewal is the cheapest signing in the game. +0.15 acceptance, zero buyout (his PFS deal is expiring), and no competition until the poaching pass. Renew before you shop.
  • A refused renewal is not a closed door. Renewals skip the hard-close roll, so you can approach him again — but the poaching pass runs before you get another window, and he may already be gone.
  • Watch the “part ways” news items. Every one is a seat opening on a rival team, and its former occupant is now a target you can reach in the same window.
  • The seat arithmetic counts retirements as vacancies. A driver with two years left who announced his retirement does not count as “staying” — the seat is free next year. AI planners use the same rule, so they will not enter a season a car short.
  • Buyouts are settled at the rollover, not now. Signing a 17-year-old out of a PF3 contract looks free in the window and lands as a real debit months later. Check the buyout line in the offer dialog.
  • The quota is per GP, and the window spans three turns. In practice you get 3 offers, since no GP is raced during it — plan them.
  • Anyone with a pre-agreement is locked out of further offers, from you and from the AI: “This driver has already agreed terms for next season.”

Common mistakes

  • Spending the window shopping and forgetting your own expiring drivers. The poaching pass fires the instant you close the window and it targets exactly them.
  • Expecting an instant answer. Offers resolve on the next turn, by email. Send on turn 1 so you still have turns 2 and 3 to react.
  • Assuming a signing takes effect now. Nothing moves mid-season. Every deal is next-season.
  • Over-booking the seats. Two drivers staying under contract plus two pre-agreements is refused at the second offer — and if your roster fills after the window, even an accepted pre-agreement can fall through.
  • Reading “expires this season” on a driver you just renewed. The roster does not update until the rollover; the green “extended — N season(s) from next year” line is the truth.
  • Ignoring happiness before the window. A driver below 35 happiness takes −0.20 on his renewal roll — that is worth more than most salary increases you can afford.

See also

  • Scouting — the app you negotiate from, and the full acceptance model
  • Driver Profile — the Negotiate button and its block reasons
  • My Team — the seats being contested
  • Driver Academy — an alternative source of next-season drivers
  • Email — where every answer, renewal and poach lands
  • News — the Transfer feed that reads the market for you
  • Finance — buyouts charged at the rollover
  • R&D — the bonus Work Units the break grants