Changelog
What's changed in each version. Newest first.
v2.33.1 Old seasons kept out of the way
- The commentary and statistics of matches from seasons before last are now stored separately from the fixture list the game works from every day, compressed. Match reports from those seasons read exactly as before. On a save ten seasons in the everyday fixture table is a third of its old size and the file a fifth smaller, so backups, the daily work and the server's memory all get lighter.
v2.33.0 Quicker weeks on a long save
- A Continue click on a save many seasons in is quicker: the weekly play-off check and the form reads behind team selection were reading the whole save's fixture list, and the automatic team picker was working out each player's tiredness, form and mood once for every position instead of once. The Fixtures page no longer reads every match's commentary to list a division. The same teams are picked and the same results follow.
v2.32.3 Quicker pages on a long save
- The History page took a second or two on a save many seasons in, and every page carried a third of a second of the same cost in the top bar: a handful of lookups were reading the whole save's fixture list to find one club's. They read the club's own now. Nothing shown changes.
v2.32.2 A long save's season ends without timing out
- On a save nine or ten seasons in, the click that ended the season took five or six minutes and the page timed out before it finished, so the new season never began. The summer sell-down was re-counting every club's wage bill for every possible buyer of every player it moved on (440,000 counts); the league tables were reading every match's commentary; the fixture-clash check was comparing every unplayed match with every other. Each is done once now and the season's end takes about a minute, with no change to what happens in it. The server also allows a long turn ten minutes rather than four.
v2.32.1 Loans survive international duty
- A player on loan who was called up by his country used to come back to his parent club when the duty ended, with the loan still on the books: the loan club lost him and the parent could loan him out a second time. He now returns to the loan, and every save is repaired: such players are back on their loans, and where two loans ran at once the newer one stands.
- A player who leaves a club -- sold, released, loaned out, retired or out of contract -- now comes out of that club's line-up, bench, captaincy and set-piece duties at once, and a weekly sweep catches any other departure. A captaincy left vacant this way stays vacant until you choose.
- No club plays twice in a day any more: a friendly gives way to a European tie, a league-cup tie and a league match no longer share a date, and a weekly check moves whatever still collides.
v2.32.0 League strength
- The leagues now stand where they stand. La Liga, the Bundesliga, Serie A and Ligue 1 were sitting at Championship level in the middle while Turkey, Portugal, the Netherlands and Scotland sat above them; the big five's middle is lifted toward their real standing and the fourteen smaller top flights are set from their real wage bills, each with two or three big clubs standing clear of a modest middle.
- Television money abroad is at real levels: about £50m a club in La Liga, £8m in Portugal, £1m in Croatia. The big five's second divisions sit at their real level; the fourteen smaller countries' second divisions, lifted for money's sake in the real-money release, come down to theirs a tenth of the gap a summer, and a relegated club stands at least with its new division's weakest.
- Your save was re-banded once, in order, with nothing else touched; the next budget letter re-bases every club on its new standing, and outside relegation no club's wage budget is cut by more than 15 % in a summer, so the leagues settle through contracts ending and ordinary sales rather than fire sales.
- Every league now keeps its shape: each summer a club's standing is pulled a quarter of the way toward its league's level at its current position, so no club becomes a giant by winning a small league and no Premier League club sits at 99 for ever; sustained success still climbs, a one-off title fades. The Premier League's biggest clubs now start level with Real Madrid and Bayern.
- Silverware is judged against the country's standards: a small league's title or a second-division cup win no longer hands the winner a Premier-League-sized leap in standing.
- A league title in your honours now names the league you won it in -- 'Allsvenskan title' or 'Liga Portugal 2 title' rather than 'League Title' -- and the titles already in your records are renamed.
v2.31.1 Cups handed over once
- Since the day-by-day clock, a cup winner was crowned again on every later day of the week and season after the final -- about ten times a season for every domestic cup in the world, with the prize money, a point of standing and, for you, a trophy and manager reputation each time. Fixed, and every save repaired: the extra trophies, news and prize money are gone, standing and manager reputation are wound back to a single win, and a club whose budget letter was based on the inflated standing has it brought toward the corrected one, never more than 15 % at once; the following summers finish the job.
v2.31.0 Real money
- Every sum in the game is now at real scale. Wages, values and the boards' budgets were refitted to real figures level by level: a Premier League regular on £60-100k a week and a star on £300k+, a Championship regular on £10k, a League Two player on £2k; a good top-flight player worth £40m, the very best £150m+; Premier League television money of £100-157m a season, parachutes of £49m, £40m and £17m, Champions League money in the tens of millions.
- Your save was converted once, contract by contract: each wage, bonus, clause and fee moved by the ratio of the new scale to the old at that player's level, each club's cash, ledger and owner funding by the ratio at its standing, and the budget letter was re-issued at the new scale with nobody starting the day over budget. Old news still quotes the figures of its day.
- Nothing about how the game plays changed: the engine reads no money, and every rule that is a share (wage budgets, loss limits, salary caps, the reserve, release settlements) is the same share of bigger numbers. Fees are paid over time from £1m, a seat costs £4k, a facility point £25k per level.
- The second divisions abroad had been built with squads a level stronger than their standing; their standing now matches the squads, in new worlds and in your save, so their money follows what they pay.
v2.30.0 Fees over time, sell-on clauses, ticket prices and the ground
- Transfer fees of £300k or more are paid half on completion and a quarter at each of the next two summers, for buyer and seller alike. Instalments due within a year count in the transfer budget, for and against, and the Finances page lists what is owed each way.
- Selling a player aged 24 or under to a bigger club keeps a 15 % sell-on clause on his next fee, paid out of each instalment. The clauses you hold and owe are on the Finances page.
- Ticket prices are yours to set, from 70 % to 130 % of the headline price. Cheaper tickets fill the ground for about the same money, and a full house lifts the team; a sold-out ground earns more from a higher price. AI clubs raise prices when they sell out and cut them when the crowds thin.
- You can pay to expand the stadium (a tenth, a fifth or three tenths more seats, open a year on) or to improve the youth facilities and the scouting network, from the transfer budget. Facilities a club pays for are kept up to ten points above its standing.
- Clubs that play a European group stage answer to UEFA's squad-cost rule: wages and fees over 70 % of income at the summer review draw a fine of a fifth of the excess.
v2.29.0 Owners and the rules
- Every club now has an owner: one who runs it to break even, a backer who covers the usual losses at its level, or a benefactor with deep pockets. The owner sets how much of a loss the club can run before the overdraft bites, and owners sell up now and then.
- Each level plays under a financial rule. The top flights and the Championship: a rolling three-season loss limit (owner money and investment do not count), with points deducted and a year's transfer embargo for a breach at the summer review. Leagues One and Two and every second division: a salary cap of 55-60 % of turnover: the budget letter cuts the wage budget to the cap, and a club still over it at the monthly review is embargoed until the bill is back under it (or the club is promoted out of the cap's divisions). The cap is tested from a club's first summer review, so a new world's first season takes the squad as it finds it.
- A club whose overdraft passes half a season's revenue with the owner's funding spent goes into administration: points off at once, debts written off, a new owner, an embargo, and the dearest players sold. Points deductions come straight off the league table.
- The Finances page shows the owner, the rule the club plays under, the headroom, and any embargo or deduction; the human manager's board take a dim view of each.
v2.28.0 Club finances on economic foundations
- Every club now has a cash account and a profit-and-loss. Gate receipts, television money, commercial income, prize money and transfer fees come in; player and staff wages, the academy, running costs, fees, contract settlements and overdraft interest go out, settled every week. Money you do not spend stays yours, and a club that spends beyond its means goes into overdraft.
- Budgets follow the money. Each summer the board project the season's revenue and set the wage budget as a share of it (55-65 % by level, as real salary-cost rules do); the transfer budget is the cash plus whatever the owner will still put in this season, less a four-week reserve, re-derived every week. The weekly cap and the sale-income rules of the last two updates are gone — nothing needs clipping when costs are real.
- Trophies pay prize money instead of a percentage of the pot, reaching a European group stage pays, television and parachute money are re-tuned to the game's wage scale, the owner covers losses up to an annual sum before the overdraft bites, and a club holding more than a season's revenue in cash at the summer invests the excess in its stadium and facilities rather than hoarding it.
- A Finances page under Club shows the cash, the projection, the owner's funding, the weekly settlement and the season's profit and loss against last season's. Existing saves open their accounts on this update with the transfer pot they held as the opening balance; wage budgets change only at the next summer letter.
v2.27.2 Unspent sale money carries over
- At the summer re-base a club now keeps half of what it earned from sales and has not spent (and half of that again the summer after), so a club that sells well can build for the future instead of losing the money in the first week of the new season. A club whose wage bill is over its budget keeps none of it — the board use the money to cover the overspend. You are told either way.
v2.27.1 Sale money stays in the pot; loans can be returned early
- Money from selling a player no longer disappears at the next weekly update. A cap on each club's transfer budget, there to stop matchday and trophy income piling up without limit over a long save, was also clipping away fees a club had just earned — a League Two club sitting at its cap lost every sale the week after making it. Fees received, less fees paid, now lift the cap until the summer re-base, so what you earn in a window is yours to spend.
- A borrowed player can be sent back to his club early from the Loans page (Return early), ending the loan and taking his wages off your bill. Until now only the lending club could end a loan before its date, by recalling him.
- Play-off shoot-outs now use each side's nominated penalty taker, as cup shoot-outs already did.
v2.27.0 A second division in every country
- The other fourteen countries now have a played second division beneath their top flight, with the real clubs: Liga Portugal 2, the Eerste Divisie, the Challenger Pro League and TFF 1. Lig (16 clubs each), Austria's 2. Liga (12), and the Scottish Championship, the Swiss Challenge League, Croatia's Prva NL, Serbia's Prva Liga, Poland's I liga, the Superettan, Norway's 1. Divisjon, Denmark's 1. Division and Ukraine's Persha Liha (10 each) — 166 clubs in all. Each summer the champions and the winner of a play-off between second and fifth go up, the top flight's bottom two come down, and the second division's bottom two drop into the country's non-league pool. The country's cup is drawn across both divisions.
- You can start a career in any of them from the New Save picker, and a club relegated from one of these top flights — yours included — now plays on in the division below instead of disappearing into the pool.
- Existing saves get the fourteen divisions on this update, the same way the big five's arrived: the country's non-league clubs form each tier, topped up from the real club lists; in a save still in pre-season their fixtures are laid on real matchdays so the first season starts with everyone else, otherwise they start from the next summer. Ukraine's second division carries the same war-time budget discount as its top flight, and Sweden's has no VAR either. The fourteen countries' cups, now drawn across both divisions, carry their real names — the Taca de Portugal, the KNVB Beker, the Scottish Cup and so on — in existing saves too.
v2.26.0 Second tiers in Spain, Germany, Italy and France
- La Liga, the Bundesliga, Serie A and Ligue 1 now have a played second division beneath them — the Segunda Division (22 clubs), 2. Bundesliga (18), Serie B (20) and Ligue 2 (18), with the real clubs. Two go up each summer (the champions and the winner of a play-off between third and sixth), the top flight's bottom three come down, and the second tier's bottom three drop into the country's non-league pool. Each country's cup is drawn across both tiers.
- You can start a career in any of them: they are in the New Save picker, and a club relegated from the top flight — yours included — plays on in the division below rather than disappearing.
- Existing saves get the four divisions on this update: the country's non-league clubs form each tier, topped up from the real club lists, and in a save still in pre-season their fixtures are laid on real matchdays so the first season starts with everyone else; mid-season they start from the next summer.
v2.25.1 A signing arrives, loan or no loan
- Buying a player who was out on loan ends that loan: he joins you at once instead of staying marked as away at the club that had borrowed him, and that club is told. Existing saves are tidied on this update — any signing stuck that way is back in your squad.
v2.25.0 A step down
- A player who is surplus, unwanted or winding down — transfer-listed, asking to leave, a year or less left, or 33 and over — now takes a club a level below on its terms: he accepts about 60% of his wage (never under £1k a week) and his club lets him go for a fifth of his value, a nominal fee with a year left. Until now a buyer always had to match his wage plus ten percent and bid near full value, so nothing moved down the pyramid: League Two's listed players found no buyer in the National League or below, and a club clearing its wage bill could only release players into the free-agent pool.
- Loans a level down work the same way on the wage: the borrowing club pays the lower level's rate and the parent club covers the rest while he is away — so a League Two club can place its young players in the National League, and your own wage bill shows your share of any loanee's wages.
- Clubs also go looking for a buyer below them: each week of an open window a listed player may be offered to clubs in the division beneath that have room for him and would start him, on those step-down terms. If one of your own listed players draws such an offer you see it as a normal pending offer, with the wage he would accept, and decide.
- Your Transfer List and Loan Market pages' interest filters use the same terms, so a club a level below that could not reach a listed player before may now be able to.
v2.24.0 The National League
- England now has a fifth tier. Twenty-four National League clubs play a full 46-game season below League Two with the same match engine and commentary as everyone else, enter the FA Cup, run academies and youth fixtures, and take part in the transfer and loan markets — so a League Two club finally has somewhere below it to sell and loan to, and scouts have a tier to watch.
- Two go up each summer — the champions and the play-off winner — and League Two's bottom two go down; the National League's own bottom two drop into the non-league pool and two come up from it. It is an AI-only division: you cannot start a career there, the job centre does not list its clubs, and a human club finishing in League Two's bottom two is kept up by the board as before (the National League then promotes one fewer that year).
- Existing saves get the division on this update: the non-league clubs already in the save form it, topped up with real non-league names, and in a save that is still in pre-season the fixtures are placed on League Two's match dates so the first season starts with everyone else.
v2.23.0 Faster weeks in long saves
- The two lookups behind team selection and squad morale — a player's last five match ratings and a club's last five league results — were re-written so they no longer read through a save's whole history. Nothing about the results changes (every selection, rating, morale and match was checked to be identical before and after); the time does. On a twelve-season save the weekly step that runs training, morale and the transfer market went from about 30 seconds to about 12, and a full week of game time from about 35 seconds to about 20. New saves were already quick and gain little.
- The update builds one database index when the site restarts, which takes around 20 seconds on a long save; a request landing in that window simply waits for it.
v2.22.9 The transfer list is a list again
- AI clubs now review their transfer list every week and keep at most three players on it, plus anyone who has asked to leave or holds a release clause. A club that no longer needs to sell takes its players off the market; one still over its wage budget keeps its best-paid listed. Until now a listing was only ever cleared by a sale, so in a long save nearly half of all players ended up listed — half a League Two squad each — selling at the listed-player discount and burying every genuine listing: a Championship club listing its best players found a buyer a third of the time in a new save and a twelfth of the time twelve seasons in.
- The loan list works the same way: two genuine loan candidates a club, reviewed weekly.
- Existing saves are tidied once on this update, and the Transfer List and Loan Market pages now show the 300 best (or youngest) players, with the position filter to reach the rest, as the Free Agents page already does.
v2.22.8 AI clubs replace a captain who has gone
- An AI club whose captain retires, is released or is sold between summers now names a new one within the month, instead of carrying the armband on a player who is no longer there until the next rollover. Your own club is not touched: if you leave the captaincy vacant, it stays vacant until you pick someone.
v2.22.7 Clubs keep two keepers at home
- An AI club will no longer loan out a keeper if that would leave it with fewer than two, and it never puts such a keeper on the loan market in the first place. Until now a club could lend its second keeper and carry one for up to a month, until the monthly keeper check signed or generated a third — four clubs in a long save were doing exactly that. Ask for a club's spare keeper and you will still get him; ask for the second and the answer is no.
v2.22.6 A summer sacking makes the news
- When the board lose patience at the end-of-season review and let a manager go, the club's news item is now dated to that week. It was being stamped as week 0, which the dashboard never shows, so a manager sacked in the summer never saw the announcement.
v2.22.5 Promoted clubs funded like their new league
- A club that comes up from a league's reserve pool to replace a relegated side is now given the standing of its new league, as a club promoted through the English pyramid already was. Until now a small club arriving in, say, the Eredivisie kept its old reputation and budget while being handed a squad built to the league's standard, so it sat far over its wage budget for good and could never sign anyone.
- The summer accounts are settled in the right order: the league wage floor is applied after every club's budget has been re-based for the new season, so no club starts a season below its floor and waits a week for the correction.
- Promotion and relegation news names the league properly in all eighteen foreign top flights ("promoted to the Eredivisie" was coming out as a raw code for fourteen of them) and reads "promoted to La Liga" rather than "into the La Liga".
v2.22.4 Veterans play on
- Experienced players no longer vanish from the game at 30. A free agent still unsigned at the end of the season used to retire four times in five once he turned 30; now a 30- or 31-year-old usually carries on looking for a club, a 32- or 33-year-old half the time, and from 34 most still call it a day.
- Clubs short of players will now sign a free agent up to 33 years old, not just up to 29, so those veterans find new homes.
- Over a long save squads had been getting steadily younger -- fewer than one player in seven over 30 after twelve seasons, against about one in five in real football. The balance now holds near real levels, and the free-agent list stays shorter because more of it gets signed.
v2.22.3 Relegated clubs keep their squads
- A club relegated from the Premier League no longer loses its best players wholesale. Until now the five most valuable each had a strong chance of demanding a move, three or four of them usually went, and the board cut the wage budget below what was left, so the club could not replace them: relegated sides dropped from one of the best squads in the Championship to an average one and finished mid-table. Now its best player may still leave on a release clause and one or two others might ask to go, but most of the squad stays, and the wage budget is cut to the bill rather than below it.
- Relegated clubs now challenge for an immediate return, as they do in real football with their parachute payments, and about a third of them go straight back up.
v2.22.2 Non-league clubs stop shopping
- Clubs that drop out of League Two, or out of a foreign top flight, wait in a non-league pool that plays no matches. They used to carry on buying players, taking loans and scouting as if they were still in a league, on budgets that never changed. Now they sit out: no buying, no loans, no free-agent signings, no scouting, and no board judging a manager on matches that never happen. Their academies keep running, so a club that comes back up still has a squad.
- Their players are still for sale, and English clubs now scout the non-league pool as the tier below League Two, so a good player stuck there can be picked up.
v2.22.1 More corners, and a scoreboard you can read
- Matches now have about ten corners, as in real football, instead of four. A keeper tips a shot over or round the post, a defender blocks a shot behind, or a cross is headed or cut out for a corner. Until now the only corner was a winger's run broken up near the box. Each corner is a little less likely to produce a goal than before, so corners are now about one goal in fourteen, close to real football, and goals per game hardly change.
- A corner is taken straight away by the side that won it, so a spell of pressure can turn into corner after corner.
- The scoreboard marks the home side in blue and the away side in grey, the same as the commentary, the possession bar and the match stats. It used club colours, which often clashed or were missing.
v2.22.0 Low crosses, game management, and clubs that scout the divisions below
- AI clubs now scout the divisions below them. A player clearly better than the rest of his squad gets noticed, and bigger clubs look at the best of them first when they go shopping: Premier League sides watch the Championship, Championship sides watch Leagues One and Two. Until now clubs only ever looked at a handful of players picked at random, so a 20-year-old star could spend years in League One without a single offer, scoring 35-40 a season against League Two defences. Now the best young players move up the pyramid within a season or two, as they do in real football.
- AI scouts no longer stop looking once their watch list is full: a new find replaces the name they have been sitting on longest. Nearly half the clubs in a long save had stopped scouting altogether.
- Together with the changes below, league top scorers now average around 25 in every division, close to real football, and a record-breaking season is a genuine rarity again.
- Crosses can now go in low. A winger drives it across the six-yard box or cuts it back from the byline for a runner to finish first time with his foot. He goes low more often when the defence would win it in the air, so a side without a target man still has a crossing game, and quick forwards who time their runs (Off the Ball, Anticipation, Finishing) get on the end of them. Headers are back to about one goal in six, as in real football, instead of one in five.
- A cut-back after the winger has beaten his man is one of the best chances in the game; a low ball fired in from deep at a set defence is much less likely to come off. Defenders who read the game (Positioning, Anticipation, Marking) cut them out, and a keeper who commands his area gathers them at his near post.
- A side three or more goals up now manages the game: it keeps the ball, stops committing men forward and takes fewer risks, a little more with every extra goal. The side behind keeps pushing. Thrashings still happen, but 5-0s and 6-0s are about as rare as they are in real football, instead of twice as common.
- That reins in the runaway top scorers. The strongest side in a division used to rack up big wins and hand its striker 40-goal seasons; league top scorers now average the mid-20s, as they do in real football, and the record-breaking seasons are genuine outliers again.
- It applies to your live matches too: three goals up, don't expect your side to keep pouring forward.
v2.21.0 Wingers choose: cross or cut inside
- A winger who beats his man now decides whether to cross. He crosses more when he can deliver a good ball and when his side's forwards are stronger in the air than the defenders waiting for it, and less when his crossing is poor or the defence towers over his forwards — then he cuts inside or lays it back instead. A wrong-footed winger crosses less and cuts in more.
- A cross is now a real option, not a wasted chance. A good cross to a good header is better than a shot, and a poor one is worse, so a winger who can cross and a target man who can head now earn their place, and tall, commanding defenders are worth more against crossing sides. Goals from open-play crosses have roughly doubled, to about one in eight, which is close to real football.
- Shots from out wide are harder: a winger shooting from the flank has the angle against him, both to hit the target and to beat the keeper. One who cuts inside onto his stronger foot keeps most of his shot. Until now a winger's shot was as good as a striker's.
- Goals per game, home advantage and the spread of the league tables are unchanged. Top scorers in crossing sides score a few more; the occasional runaway season is next on the list to fix.
v2.20.0 Every match wears players down
- Players now tire as every match goes on, not just in the matches you watch live. Until now a match the game resolved in one go was played for all ninety minutes at the condition its players started with, so fitness only ever mattered between games. Now a side that turns up tired, or is full of players without the legs for it, fades late on, while a fit side keeps going.
- Work Rate now costs only the players who can't sustain it. A player with good fitness (Natural Fitness and Stamina together around 14 or better) can work as hard as he likes without tiring any quicker. Below that, a hard worker tires noticeably faster the less fit he is (a work rate of 20 with poor fitness costs nearly a quarter more), and a lazy, unfit player saves a little. It used to be a small, flat charge that even the fittest players paid, and only after the final whistle.
- Condition during a live match is now worked out exactly as it is afterwards, counting Stamina as well as Natural Fitness, age, how tired a player already was, and keepers tiring at half the rate. The condition you see at the final whistle is what the player takes into the next game.
- The manager's guide has a new section on condition, fitness and work rate.
v2.19.4 Clubs live within their wage budgets
- Every club in a league now gets a share of that league's money: no wage budget falls below 60% of what a mid-table club in the same division would get. Squads are built to a league's standard, but budgets followed each club's own reputation, so the smallest clubs in the strong leagues fielded a proper squad on a tiny budget and sat over it from the first day, unable ever to get back under.
- A club so far over budget that selling its fringe players can't fix it will now let go of players outside its best eight, not just outside its best twelve. Over ten simulated seasons the number of clubs over budget used to climb past 90 and keep rising; it now holds at around 30, most of them clubs just relegated, who keep their squads while the parachute money lasts.
- Ukrainian clubs' wage budgets are no longer cut for the war. The cut still applies to what they can spend on transfer fees, but it had also halved their wage budgets while their players' wages stayed the same, leaving most of the league at two to eight times over budget.
- Because fewer clubs are forced to list their best-paid players every week, the AI transfer market is calmer: fewer permanent deals between AI clubs and more loans.
v2.19.3 Clubs sign the free agents they actually need
- When an AI club looks at the free-agent list it now judges what it needs against the formation it plays, counting depth — one centre-back in a back two is a gap. It used to look at every position on the pitch, so a club with no wing-backs went shopping for one even when it never plays wing-backs. Centre-backs, keepers and central midfielders were almost never anyone's priority and piled up unsigned; ten seasons now see roughly ten times as many free-agent centre-backs signed.
- A free agent aged 30 or over signs for a single season, as veterans usually do, so clubs get the experienced player without him taking a squad place for three years.
- The free-agent list itself stays about the size it was: a few hundred players, fullest in early summer when contracts run out, and emptying as clubs sign them.
v2.19.2 Two sides you can tell apart
- Commentary marks the home side in blue and the away side in grey, the same as the possession bar and the match stats. It used club colours, but plenty of clubs share a red and most have no colour on record at all, so in many matches both sides came out the same.
- The manager's guide describes the world as it is: 338 clubs in 22 leagues, and how the fourteen smaller top flights reach Europe through qualifying rounds.
v2.19.1 Aerial Prowess on the same scale as everything else
- Aerial Prowess is how high a player meets the ball: mostly his height, partly his jumping (six parts height to four parts jumping). A short player cannot be dominant in the air however well he jumps, and a tall one is useful even with a modest leap.
- Height was measured on a scale that treated 187cm — a centre-back's height — as average, so a normal 182cm footballer counted as short and Aerial Prowess sat a point and a half below every other attribute. Most midfielders showed amber or red for it without being poor in the air. The scale now puts the average footballer at 10, and every player's Aerial Prowess has been recalculated; height and jumping themselves have not changed.
- It makes almost no difference to results: goals per match are unchanged, and keepers claim very slightly more crosses, so a headed goal is about 3% rarer.
v2.19.0 Commentary that matches the match
- Commentary is now told from what actually happened. Every shot, save, header, cross, tackle and foul it describes really happened, to those players, with that outcome, in the order it happened — so it always agrees with the Match Stats page. It used to invent a near-miss most minutes of a live match, by a player picked at random, which is why a striker could have five shots in his stats and none in the commentary.
- Choose Key moments (goals, saves, big chances, penalties, VAR, cards, substitutions and injuries) or Extended (every shot, corner, free kick, crucial tackle and offside as well). Your choice is remembered on your account.
- VAR is used in the Premier League, every other top flight except Sweden's Allsvenskan, European competition, internationals and the FA Cup from the Round of 64. It checks goals and penalties, and now and then rules a goal out. Goals are disallowed everywhere — for offside, or a foul or handball in the build-up — by the officials where there's no VAR.
- A possession bar on the live match screen, and a Match Stats page in the style of CM01/02: possession, shots, on and off target, corners, fouls, offsides, cards and saves, side by side. The match report shows it too. Matches played before this show what they still can.
- Your live matches now have as much football in them as every other match. Since live matches went minute by minute (v1.13.0) a rounding slip gave them 90 possessions against about 130 for matches the game plays out on its own, so yours had roughly a third fewer shots and goals than the rest of the world. Expect more chances, at both ends.
- When one of your players was injured or sent off in a live match, the minute it happened in was played a second time once you had made your decision — anything scored in it counted twice. The match now carries on from the next minute. An injury or red card in the 45th minute is dealt with before the half-time break, and one in the 90th simply ends with the final whistle.
- The match engine does not play out offsides or most fouls, so those are drawn from the flow of play the way pass completion already is. They never change a result, and a disallowed goal is never one the engine actually scored.
v2.18.0 Attributes you can read at a glance
- Attributes on the player page and the comparison page are now coloured the way the Excel export colours them: red for poor, plain for ordinary, green for good, brightest for the best. The number is still there — the colour only saves you reading it.
- Tendencies and personality are left uncoloured, on purpose. Determination, leadership, work rate, bravery, injury proneness and the rest describe the man, not how good he is, and a green number would claim otherwise. Which foot he is stays uncoloured for the same reason.
- The player page groups attributes under Technical, Mental, Physical, Goalkeeping and Personality instead of listing all fifty-odd in one alphabetical run.
- A scouted player is coloured by what your scout reported, not by what is really there, so the colour never tells you more than the number does.
- Aerial Prowess joins the Physical column set on the Squad page, so you can sort your squad by who actually gets highest — useful when you are picking someone to attack a corner.
- Aerial Reach is now called Aerial Prowess. It never had anything to do with a keeper's arms — it is how high any player gets to the ball, his height plus his leap, which is why an outfielder has it too. Older entries below still call it Aerial Reach, because that is what it was called at the time.
- The Saves page's link to the manager's guide is a button you can actually see, the changelog leads with what changed rather than the version number, and the guide has a section on rival managers and one on the squad spreadsheet.
v2.17.0 Your squad as an Excel file
- The Squad page has a Download Excel button and, where the site can send mail, an Email me the Excel button. The spreadsheet always goes to the address you log in with, and no more than five a hour.
- The workbook has a Squad sheet (seniors, called-up youth and loan signings), an Academy sheet and an On loan sheet. Each player row carries role, captain, status, morale, condition, contract, wage, release clause, this season's appearances, goals, assists and average rating, then every attribute grouped Technical, Mental, Physical, Goalkeeping and Personality, colour-scaled red to green (tendencies and personality are left uncoloured).
- Hidden potential is not in the file.
v2.16.0 Managers have careers
- Managers age a year every summer and retire: from 62 the chance rises a tenth a year, and a man out of work at 60 usually calls it a day. A club whose manager retires appoints a successor the next week.
- New managers come from where they really come from: a few retiring players go straight into the dugout under their own name, with what they knew as players setting what they are as managers; assistant managers and the odd coach step up from an AI club's backroom, and the club replaces them; and unknowns fill the pool when it runs thin.
- The Managers page lists who retired this year. Your own manager profile ages too.
v2.15.0 Boards sack, clubs hire, names deceive
- A manager's standing is what boards hire on, and it can be wrong about him: it follows the season's verdict, so a name built on a strong squad flatters an ordinary man for a while, and a gem at a small club takes a season or two to be noticed. A big name gets a longer rope before the sack; an unknown gets less.
- Every manager has a preferred formation. A poor tactician plays it whatever the squad suits, and pays for it through players out of position and the wrong signings; a good one adapts to the players he has. A youth believer hands out two academy places only once he has been in post half a season.
- A vacancy at a big club may be filled by poaching an overachiever from a smaller one, if his standing now carries and his board is pleased with him. The smaller club hears it has lost him.
- AI boards now act like boards. A manager gets three months' grace, then a run of bad results or a failed season costs him his job; the club appoints the best manager out of work who would take it, or a new face. Sackings and appointments in your division make your news.
- The Managers page lists every manager in the top four divisions, the football he prefers, how long he has been in post and how his board feels, plus who is out of work. The Job Centre shows who you would be replacing; a club with a manager in post parts with him to appoint you.
- Every AI board's confidence was reset once for this change, since it had never been reset before and half the boards in an old save were at the sacking line.
v2.14.0 Every AI club has a manager now
- Each AI club is run by a named manager with his own strengths: tactical knowledge, judging ability, motivation and youth development, plus the style of football he prefers. Bigger clubs tend to hire better ones. His name, nationality, age and preference show on the club's page.
- What they change: a poor judge picks a slightly wrong eleven and buys the wrong player now and then; a poor tactician lurches between styles while a good one reads the squad; a motivator's dressing room is happier; a youth believer gives two prospects a first-team place each summer, a sceptic none.
- An average manager behaves exactly as every AI club did before, so the league as a whole plays the same — the difference is between clubs, not across them. When you take a job the club's manager goes into the pool; when you leave, the club appoints one.
v2.13.3 Releasing a player is a settlement, not a ransom
- Releasing a player now costs half the wages he is still owed, counted in the weeks actually left on his deal rather than whole years. It used to be the full contract, so a free agent signed on £1k a week for two years cost £104k to let go the same day.
- If your transfer budget cannot cover the settlement the release still goes through: the budget goes into the red, gate receipts bring it back, and you cannot pay a fee until it is back in credit. A small club can finally release someone.
v2.13.2 Locks on the door
- The key that signs your login cookie is now generated once per install and kept private, instead of a fixed default from the source when the server had none set. Everyone is signed out once by this change — log in and enter your save's PIN again.
- Ten wrong passwords for an email in fifteen minutes locks that email out for fifteen minutes; five wrong PINs on a save locks that save for the same. Every attempt still shows on Login History.
- Dispatching a scout who isn't yours now says so instead of claiming they went.
v2.13.1 Audit follow-ups
- A club with no fit senior keeper no longer hands a senior deal to a 15-year-old from the academy; it signs or brings in an adult. The sixteen boys this had already happened to go back to their academies.
- Older saves whose academies had fallen below twelve after the backlog cleared are topped up so the youth eleven exists from the first game.
- History's cache is filled at start-up for your own club, so the first visit is as quick as the rest.
v2.13.0 Dominant sides win, but not by cricket scores
- A club far stronger than its division no longer runs up 150 goals and a 50-goal striker. The edge a big skill gap gives in each duel now levels off sooner, so a side three points above League Two scores about 2.5 a game instead of 3, and one six points above about 3.2 instead of 4.3. Evenly matched games are untouched.
v2.12.4 Rearranged league games on proper days
- A league game bumped by a cup tie or European night now moves to the next Saturday, or a Tuesday or Wednesday, rather than the first free day, which had put games on Thursdays and Fridays. Cup ties bumped by Europe go midweek first. Games already sitting on odd days are moved on the next start.
v2.12.3 A faster Leaderboards page
- Leaderboards was reading every player-match row in the save to find one season's. It now starts from the season's fixtures, with a new index, and loads in a fraction of a second on an eleven-season save instead of four seconds.
v2.12.2 A faster History page
- History no longer recomputes every past season on each visit. A completed season's row is worked out once and kept; only the current season is live. Two new database indexes also speed up History, Leaderboards and the Stats page. An eleven-season save went from about eight seconds to well under one.
v2.12.1 Shortlists that mean something; players who become staff
- Shortlists no longer hold retired players, academy prospects or a club's own men, and an AI club forgets a target it has not acted on for two seasons. One older save was carrying two thousand shortlist entries on players who had long since retired.
- About one retiring player in eight takes a backroom job and appears in the staff market under his own name: most as coaches (a former keeper coaches keepers), some as scouts, a few as assistants or physios. What he knew about the game sets his skill; the great player is not always the great coach. If he was yours, you are told.
v2.12.0 A free-agent pool you can browse
- The world keeps at most 400 unattached players. Each month the weakest and oldest beyond that leave the professional game, and the summer's releases never leave more than that behind. Older saves had reached nearly four thousand.
- Fewer academy releases join the pool: most 18-year-olds not offered terms leave the game rather than sit unattached for years.
- Clubs filling a gap may sign an unattached player well above their own level if the wage fits; before, anything more than a little better was passed over.
- The Free Agents page adds an age filter, sorts by ability in position, and shows the best 300 that match with a count of the rest.
v2.11.0 Priced by position; sweepers retired
- A player's value and wage now come from how good he is in his own position, not a flat average of five scores. A full back is priced on his defending first and his finishing a little; a striker the other way round. The market and the AI's judgement of an upgrade now use the same number, so a club pays for what it thinks it is buying.
- The sweeper position is retired. In the engine it was a centre back with a penalty for playing centre back, and the real game left it behind in the 1990s. Every sweeper is now a centre back and the 5-3-2 sweeper formation is plain 5-3-2 with the same shape.
v2.10.0 Condition now costs performance
- A tired player plays like one. Condition used to take at most a tenth off a player's duels, and only at zero; a keeper on 33% could rate 7.1. Now the loss runs from about 1% at 90 condition through 13% at 60 and 25% at 40 to 60% at zero, and a full-strength side beats its own exhausted twin comfortably. Ratings follow from what happens on the pitch, so a passenger settles around 4.
- Goalkeepers gain half an outfielder's fatigue from a match, as real keepers play every week. Automatic team selection, including the AI's, now weighs tiredness more heavily.
v2.9.1 One academy graduate a summer
- AI clubs hand a first-team place to one academy prospect a summer, and only one who would rank in the club's top tenth. Two a summer still left under-21s at nearly a third of every squad; the real figure is about one in seven.
- A club living on parachute payments after relegation is no longer made to sell down to its wage budget as well; relegated sides had become too weak for the Championship.
v2.9.0 Engine calibration: home advantage, top scorers, injuries
- Home advantage trimmed. Three simulated worlds in a row had home sides winning half their games with a goal difference of +0.5 or more; real football is about 45% and +0.4. The crowd still matters, a little less.
- The defence pays a busy striker more attention, so one man takes a smaller share of a club's chances. League Two top scorers had been reaching 51 and 43 in a season against a real record of 32.
- Injuries: a player just back from a lay-off is at half risk for four weeks, and each injury beyond the third in a season halves the chance of the next. Injuries per club over a season come down from the top of the real range to the middle of it.
- Academies promote a little less freely: at most two a summer, and only a prospect who would rank in the club's top sixth. The first version put a third of all 18-year-olds into senior squads and the under-21 share of squads to twice the real figure.
- A club balancing its wage bill never sells its second goalkeeper.
- AI squads are held to 25 seniors: surplus players are sold or released, weakest first. This morning's academy promotions had pushed most squads in older saves over that, and since a buyer must have room, transfers had all but stopped.
v2.8.1 AI clubs live within their budgets
- An AI club over its wage budget now moves its most expensive fringe players on — sold to a club that can afford them, released when nobody can — up to four each summer and one a month in season, never a first-choice player and never below sixteen seniors. Before this only relegated clubs' leavers were sold, and a quarter of the world sat over budget all season.
- A club whose staff pot has shrunk releases its most expensive surplus coach, physio or scout each summer until it fits, keeping the assistant and at least one of each. And the staffing fill now hires one of everything, scout included, before adding extra coaches, so no club is left without a scout.
v2.8.0 Academies decide at 18
- Academy prospects are promoted or released the summer they turn 18, not held until 21. An AI club keeps a prospect whose potential would put him among its better players (up to three a summer, only a clear star when the squad is already full) and releases the rest; a quarter of those go into free agency, the others leave the professional game. Your own prospects: you are told the summer they turn 18, and anyone still not promoted from the Academy page by the following summer leaves. Nobody can be given professional terms before 16.
- Academy intake now fills toward 18 places and stops there, and always keeps at least 12 so the youth eleven exists. Saves already carrying older prospects are sorted out on the next start: AI academies promote or release everyone 18 and over; your own 18-plus prospects get the warning instead, with a year to decide.
- The academy warning, the release notice, the board's vote of confidence after a bottom-place finish and the late-bloomer note were being written with week 0 and never appeared on your overview. They do now.
v2.7.2 Competition and crowd on match day
- The live scoreboard and the match report now say what is being played — League Two, FA Cup — Third Round, Champions League — Group B — along with the ground and the attendance. The Match day card on the overview names the competition in bold and gives the expected crowd.
v2.7.1 A real loan market, a free-agent pool, and scouts worth sending
- The Loan Market showed one player. AI clubs were listing their weakest eligible player, which was always an academy kid the market hides. Clubs now list senior players only, and every save gets a fresh seeding of senior listings on the next start.
- Free agents were running out: the starting pool was signed up by October and nothing replaced it. There is now a standing pool of unattached lower-league professionals, topped up each summer and, when signings drain it, a few a week.
- Scouting trips bring back more: five to twelve reports depending on the scout's ability and how well he knows the region (a first trip used to return exactly three), and at least half of them are players you could actually sign — unattached, listed for transfer or loan, or in the last year of a contract, at a club no more than a rung or two above yours.
- Filter-bar checkboxes now sit next to their labels instead of a hand-span away.
v2.7.0 Player stats page
- Squad → Stats: your own players' season statistics — appearances and starts, goals, assists, shots, tackles won and attempted, key passes, pass completion, headers, dribbles, man-of-the-match awards and average rating. Every column sorts. Switch between the senior squad and the youth setup, pick a season, and choose which matches count (all competitive, league only, cups, friendlies; youth league or everything for academy players). Players who have not featured are listed underneath.
v2.6.5 Injured players are hurt, not dropped
- An injured player no longer shows 100 condition. He loses sharpness on the day he is hurt, more for a longer lay-off (a one-week knock costs a little, a broken bone most of it), keeps that loss while he is out, and recovers it at the normal rate once he is back. Players already injured get the same treatment on the next start.
- Being injured or suspended no longer counts as being left out of the matchday squad for morale. A sidelined player's morale ignores selection until he is available again; the player page says "Sidelined by injury" instead of "Not in the matchday squad".
v2.6.4 A staff budget that covers a basic backroom
- The minimum staff budget rises from £12k to £16k a week, enough for an assistant, three coaches, two physios and two scouts at lower-league rates. Before this a League Two club could be at its limit with a physio still missing and no way to fix the morale drag.
- AI clubs now staff for the size of their squad, not just a fixed number per division, so League Two sides stop running permanently short of coaches and physios.
v2.6.3 Scouts stay in their own save
- Scout reports linked to "Player not found". Another save's week-end was ticking down your scouts and filing their reports on that save's players. Scouting now runs per save; the stray reports are removed on the next start and the scouts concerned are free to be sent out again.
v2.6.2 The European season on real dates
- European group stages now run on the real nights: from the second Tuesday of September, fortnightly or so through October, November and December, into January. Knockout rounds take their real slots too — play-off in February, last 16 in March, quarter-finals in April, semi-finals at the turn of May, the final on the first Saturday of June. Qualifying stays in July and August. A group stage already under way moves its remaining matchdays onto those nights on the next start.
- No club plays on consecutive days any more. The rule that moves a lower-priority fixture off a clash now treats the day before and the day after as clashes too, so a league game the day after a European night is moved on.
v2.6.1 No European nights in international breaks
- European fixtures are no longer dated inside the FIFA international windows (late September to early October, mid-November, late March), where a squad can lose most of its players to call-ups. Qualifying legs, group matchdays and knockout rounds all move to the first Tuesday or Wednesday after a window instead. The league already avoided them.
- Existing saves: every unplayed European fixture inside a window is moved on the next start to the first free midweek after it, keeping first and second legs in order.
- The EFL Trophy keeps its dates in those windows, as it does in reality.
- Players now leave for and return from international duty on the first day of the week concerned rather than at its end, so a squad away for the September window is back for the first European night after it.
- No club is booked twice on one day any more. A cup or European tie drawn onto a date a club already plays moves that club's lower-priority fixture — usually the league game — to the next day on which neither side plays the day before or after, the way a real league round is rearranged. Europe outranks the FA Cup, then the League Cup, the league and the EFL Trophy. Existing saves are untangled on the next start.
v2.6.0 Unrest has teeth
- A transfer request you ignore now costs you. After twenty weeks the player is agitating: his morale drops hard (which shows in his play), he refuses to discuss any new contract, and the unrest unsettles his teammates a little. The news tells you when it starts and his page names it.
- After a full season of an open request, the board steps in at the summer review and sells him to a club that can afford his value. Pay him properly or play him and his morale recovers, at which point he withdraws the request and the clock stops.
- Requests already open when you load the save start their clock today.
v2.5.1 Five substitutions
- The modern limit: five substitutions a side in a match, injuries included, for you and the AI alike. A sixth cannot be queued, and the live page shows how many you have left. A player injured after the fifth goes off and his side plays on with ten.
v2.5.0 A backroom you build
- Scouts are staff you hire. The Staff page lists your scouts with their judging ability and potential and a pool of free scouts to hire from; each costs a weekly wage from the staff pot and works one assignment at a time, so more scouts cover more ground.
- No more fixed slots: hire as many coaches, physios and scouts as the staff budget allows (one assistant manager). Enough coaches and physios for the size of your squad — one coach per eight senior players, one physio per twelve — gives the full effect. More than that adds nothing. Too few, or none, slows player development and injury recovery and unsettles the players: a new morale factor, Thin backroom staff, appears on their pages.
- AI clubs staff up to their standing: a Premier League club carries five coaches, three physios and four scouts, a League Two club two, one and two, each within its own budget. Existing saves are brought up to those levels on the next start; your own club is left for you to build.
- The minimum staff pot rises from £6k to £12k a week so a lower-league club can keep an assistant, a coach, a physio and a scout; the pot is still 15% of the wage budget above that. A scout is paid on his judging ability — his eye for potential is a talent the market does not price.
v2.4.2 Hidden attributes are your choice
- A switch on the Managers page, next to the friendlies one, sets whether other clubs' attributes are hidden until known. It is on by default; switch it off and every player's attributes are visible again, on the player pages, the market lists and comparisons. Each manager in a two-player save chooses for themselves.
v2.4.1 Seen on the pitch
- Any player who has started a match against your side is now known: his playing attributes show, in any competition and however far back. The five personality traits stay unknown until a scout reports on him, since character cannot be judged from the stands — his page says so and offers to send a scout.
v2.4.0 You only know what you have seen
- Other clubs' players no longer show their attributes until one of your scouts has filed a report on them. Two exceptions: every player in your own league, and the well-known names of the top leagues (Premier League, La Liga, Bundesliga, Serie A, Ligue 1 players worth £5m or more).
- A scouted player shows the scout's estimates, with the report's confidence and potential range — a weaker scout's numbers can be several points out.
- An unknown player's page says so and offers to send a scout directly (a focused follow-up takes two weeks). The transfer list, free agents and loan market show '?' for attributes and suggested fees of players you do not know; comparisons show blanks.
v2.3.0 One season at a time, and a History page
- Fixtures & Table now shows the current season only — the table, your fixtures and the league's fixtures. A Season box at the top switches to any earlier season, which shows that season's final table for the league you were in, your results and the league's fixtures as they were played.
- New History tab under Competitions: every season under your management on one page — league, final position, played/won/drawn/lost, goals, points, how far you went in each cup, your top scorer, and the trophy cabinet, each row linking to that season's fixtures.
- Every fixture now records its season (league, youth and friendly fixtures never did, only the cups). Existing saves are filled in on the next start from the fixture dates.
v2.2.1 Tactics pitch: drag and drop, no more overlapping players
- Drop a player on another on the tactics pitch to swap the two — on a phone or with a mouse. The table below and the slot dropdowns update in place, nothing to submit.
- Players on the same line no longer overlap. The two strikers, the central midfielders and the centre-backs were drawn closer together than the tokens are wide; each line now runs edge to edge, or opens a full gap between central players.
- What you release on decides what happens: another player (it lights up) swaps the two, in any direction — straight up into the AM/C spot or back to sweeper included; empty grass above or below the player's own spot sets Attacking Freedom instead.
v2.2.0 Match day
- Continue now stops on the morning of your match, before anything that day is played. The overview shows a Match day card naming the opponent, the competition and whether you are at home or away; the Squad and Tactics pages show condition as of that morning. Pick your eleven, then press Play Match.
- The team is only demanded on the day. The old rule asked for a full eleven up to three weeks before a match, when fitness could not be judged.
v2.1.3 Academy players stay in the academy
- AI clubs no longer loan out academy players, the loan market no longer lists them, and a loan request for one is refused. The v2.1.0 loan changes had put them at the front of the AI's candidates: in a fresh save 339 of 362 loans were 15- and 16-year-olds, who then started senior matches for the borrowing club (a 15-year-old keeper for Exeter City against Sutton United) while still playing the parent club's youth games, and arrived at 0% condition. Every academy player out on loan goes home at the next start.
- A player on loan only joins the borrowing club's senior pool if he is a senior; the parent's youth eleven skips anyone away on loan.
- AI substitutions bring on the freshest player for the position rather than the first one on the bench.
v2.1.2 Two saves at once no longer trip over each other
- When two managers play two different saves at the same time, one save's Continue click (a whole matchday of headless matches, 15-25 seconds) used to make the other save's live match fail with a server error if it tried to write during that window. The database wait is now a minute rather than fifteen seconds, so the second save simply waits for the matchday to finish and carries on.
- The start-up cleanup of leftover scouting rows from deleted saves now runs in an order the database's foreign keys accept — the first cut refused to boot on the live server for a few minutes.
- A cup round whose ties somehow carry no recorded winner is left waiting rather than crashing the next draw (a guard found by the test suite, never seen in play).
- Live match: when play is paused on one of your players' injuries, an ordinary substitution naming him now counts as the injury replacement and the match resumes. Any other substitution queued while the injury waits sends you to the live match page with a note, instead of leaving the match silently paused behind the Player Stats page.
v2.1.1 Full game audit — three small fixes
- Deleting a save now removes its scouts, scout reports and shortlists too. Those tables are keyed by club rather than by save, so earlier deletes left them behind — one live database was carrying over ten thousand shortlist rows for clubs that no longer existed. Leftovers from old deletes are swept out automatically on the next start.
- The match report for a youth fixture or an assistant-run friendly says that no commentary was recorded instead of showing an empty panel.
- Starting a new game from a login session that predates the current login code no longer fails with a server error — the manager's name is looked up from the account instead.
- Audited without change: every page at desktop, tablet and phone widths; every manager action through the real routes on a copy of a live save (tactics, squad, contracts, transfers, loans, scouting, staff, academy, friendlies switch, live match from kick-off to report, new game and delete); a Continue click in pre-season (6 s) and in a January window (20 s); both live saves' data integrity; the match engine battery (identical to the last audit); and a fresh world run for three consecutive seasons.
v2.1.0 A transfer market that behaves
- Free agents no longer pile up. A club short of players signs the best-fitting free agent before the game generates anyone new; AI clubs renew more of their own expiring players (their top sixteen rather than ten) on two-to-four-year deals; new contracts run two to five years instead of one to four; more AI clubs look at the free-agent pool each week; and a player still unsigned when the season ends leaves the game (30 and over retire, younger players drop out of the professional game). On a fresh world the pool had grown from 14 to 3,495 in three seasons and the senior population by 69%.
- The AI asks a real price. A selling club now wants market value plus a premium for the players it relies on: half again for its best three, a fifth more for its next five, a tenth for the next four, and value for the rest. Listed players, players who want out and players of 34 or more go cheaper. Before this any player outside a club's top three could be had for about three quarters of his value. AI buyers offer a premium to match, so the AI-to-AI market keeps moving.
- Loans are a market. Every AI club looks for a loan during a transfer window, lower-league clubs most, up to three players borrowed at a time; loans run half a season or to the end of it, and every club loan ends at the season's rollover. Club loans had been running at one per eleven clubs per season.
- Players left out ask to leave. A player outside the matchday squad with poor morale has a small weekly chance of requesting a transfer; before this, requests only ever came from relegation or rock-bottom morale.
- Bug fixed: clubs the game creates after kick-off (a foreign league's replacements each summer) had no physio or coaches at all, so their injuries ran full length and their young players barely trained.
- Staff cost wages, from their own pot. Each staff member is paid weekly by skill (about £1k for a League Two coach, £7k for an elite one) out of a staff budget of 15% of the club's wage budget (£6k a week at least), separate from the player wage bill so hiring never squeezes your squad; the Staff page shows the pot and what is committed. AI clubs now fill and upgrade their staff each summer from a refreshed free-agent pool, skills drift a little each year, and elite coaching is worth having again (the training cap is raised).
- Reputation follows the league finish. Each summer a club's standing moves with where it finished: champions +3, top four +2, top half +1, the third quarter unchanged, below that −1, the relegation places −2, in every league. It used to move only on promotion and trophies, so a club finishing second twice stayed where it was.
- International call-ups have their own record. They were stored as two-week loans to the national team, which inflated every loan count and listed a player as 'on loan' during international duty. Existing saves are migrated on restart; the player page now says 'on international duty with England' rather than 'on loan'.
- The manager's record counts only senior competitive matches: league, cups and Europe since the job began. Friendlies and academy games were being counted, which had one record at 399 games instead of 276. Records are computed from the fixtures, so every manager's figures corrected themselves.
- Take charge of friendlies, if you want to. On the Managers page, your own card has a switch: off, the assistant picks a rotated side and plays friendlies for you; on, friendlies are yours to pick and play live, and the Continue button and the team-picked check treat them like any other match.
- No more midfielders in goal. An AI club whose senior keepers are all injured, suspended or away on loan now gets one at the weekly housekeeping: a free-agent keeper first, else its best academy keeper promoted, else a new one. Found in a live save with a Premier League club's only keeper out for months.
- Facilities follow the club. Youth facilities and the scouting network were fixed at creation; they now move toward the club's standing each summer, up to six points a year upward and three downward, so a promoted club's set-up catches up over a few seasons and a fallen club's slowly decays. The board tell you when they invest or cut.
- The key attributes shown in squad and transfer lists are drawn from what the engine actually reads for each position: keepers show reflexes, one-on-ones, positioning, command of area and handling; centre-backs tackling, marking, positioning, anticipation and heading; strikers finishing, composure, movement, heading and pace, and so on. Natural fitness, which only affects recovery, no longer appears everywhere, and every attribute has its own abbreviation. The Youth League moved to Competitions.
v2.0.6 Good scouts find gems
- A regional scan used to return the same random handful of players whatever the scout's quality. Now a scout's judging potential sets two chances: that a scan turns up a hidden gem from the region beyond the random sample (about a quarter for a poor scout, half for a great one, more with familiarity), and that a gem who lands in the sample is read as one rather than as the ordinary player he looks like (about half for a poor scout, nine in ten for a great one). A great scout can still miss; a poor one can still get lucky. Judging ability still sets how accurate the numbers are.
v2.0.5 Less hand-holding on the player page
- The 'what drives this player in a match' section is gone. The full attribute grid stays; which attributes matter for which job is yours to work out, as it was in the old game.
v2.0.4 The player page tells the truth about the engine
- The 'what drives this player in a match' section was a hand-written table that had fallen a week of engine work behind: no composure on shots, no pace or anticipation in defending, no acceleration in dribbling, nothing on set pieces, fatigue, feet or character. It is now built from the engine's own attribute lists and role weights, so it cannot drift again. Only the explanations are written by hand.
- Groups are gated on the position's role: a striker gets finishing, runs in behind, beating a man and creating; a centre-back gets stopping the man in front and defending in the air; a keeper gets shot-stopping including penalties, claiming, sweeping, organising and distribution. Everyone gets pressing, set pieces if he is the taker, lasting the season, and a character group that says plainly which attributes are behaviour rather than quality.
v2.0.3 Divisions named everywhere
- The job centre listed foreign clubs as 'Division 5', 'Division 6' and so on. Every league is now shown by its name (La Liga, Bundesliga, Primeira Liga, Super Lig, and the rest), and the same naming is used wherever a club's division appears.
v2.0.2 Screenshot pass: desktop, tablet and phone
- Every page reviewed at three widths. Wide tables scroll inside their card rather than spilling past it, and the content area is wider on desktop so the squad table fits without scrolling. Row actions (Details, Negotiate, Call Up, Hire, Release) are quiet secondary buttons instead of a column of blue.
- The section bar always shows your club, including on the competition pages. The leaderboards page no longer repeats the section tabs. Tiles sit three across on a tablet so nothing is left over.
- Match reports and the live match keep each side's colour as a thin stripe above its name and in the commentary, rather than two solid blocks. The report's date and the Player stats button sit in the page header. Transfer-window notices are calm callouts.
v2.0.1 Phone fixes from the first look
- Quiet buttons (such as All fixtures) no longer render as filled blue; the competition badge sits with the match instead of being cropped off the edge of the overview table; the five section tabs fit a phone width without scrolling.
v2.0.0 A new interface
- The whole game has a new look, built after a look at how the current generation of management games and dashboards are designed: a neutral dark surface scale with one accent colour for anything you can act on, Inter for text and tabular figures for numbers, and elevation shown by lighter surfaces rather than club colours. No more yellow underlined links: names are quiet text that lights up when you hover, actions are buttons, and lists are rows you can click anywhere on.
- Navigation is a top bar with five sections, Home, Squad, Recruitment, Competitions and Club, and a second row of tabs for the pages inside the section you are in. The date and the Play Match / Continue button live in the top bar on every page, and your account menu (saves, guide, what's new, login history, log out) sits behind your initial at the right. The old sidebar, the club-coloured header, the duplicated tab strips and the twenty-two 'back to club' links are gone.
- The overview is tiles and two panels: budgets with the parachute and wage position, board confidence and expectation, reputation and facilities, then upcoming fixtures and club news side by side. The saves screen, league table (with your club highlighted and rows that open the club) and fixture lists follow the same rules.
- Versioning starts again at v2 now that the engine programme is closed.
v1.69.4 Audit five: in sync, retirement eased a touch
- A full audit after the day's twelve releases. The seeded match battery is identical to the previous audit's, set pieces, penalties and ratings read the same, every one of the 22 leagues now plays every season, and a fresh world passes the three-season gate apart from the known one-in-six relegated club that runs away with the Championship.
- One nudge: the retirement curve from the last release was slightly steep, with the share of players aged 30 or over sliding to 18% by the third season. Eased (2% at 31, 10% at 33, 30% at 35, 65% at 37, 85% from 38): the same world now reads 21%, 21%, 19%.
v1.69.3 Squads stop growing old
- The fourth audit found squads ageing: the share of senior players aged 30 or over went from 21% at creation to 32% after three seasons (a real squad is about 20%). Everyone ages a year, but retirements were rare, a squad short of bodies was topped up with players as old as any, and the AI had no preference for youth when it bought.
- Three changes. Retirement starts at 31 and rises more steeply (3% at 31, 12% at 33, 35% at 35, 70% at 37, 85% at 38 and over; keepers two years later). Squad fill-ins are now young players, 18 to 26. And the AI walks its transfer and free-agent shortlists youth-first, so an older player only gets the nod when he is clearly better.
- Same world, three consecutive seasons: 22%, 20% and 18% aged 30 or over, 15 to 16% aged 21 or under. The calibration gate now carries the age shares.
v1.69.2 The smaller European leagues play every season
- Bug fixed, found by the fourth audit: the fourteen smaller European leagues (Portugal, the Netherlands, Belgium, Scotland, Turkey and the rest) were scheduled at creation but the season rollover only re-scheduled the five elite leagues, so from the second season their clubs played no matches at all. Every league with clubs now gets its fixtures each summer. An existing save picks this up at its next rollover.
- The guide describes the new money rules, and the dashboard shows how many parachute seasons remain after relegation.
v1.69.1 A bad game now costs a rating
- The third audit's last item. Match ratings had almost no negative terms, so a poor performance was merely the absence of good things: only one rating in a thousand fell to 5.5 or below, against about three in a hundred in real ratings, and nobody ever went under 5.3. A shot off target, a duel lost, an attack that came to nothing and a header lost now each cost a little, the whole side pays for every goal beyond the second conceded, the result counts a touch more, and the positive terms are slightly smaller. Every position's baseline was re-derived so an average day is still 6.8 in every slot.
- Measured over 31,680 ratings across all four divisions: mean 6.8, spread 0.74, 2.6% at 5.5 or below, 12% at 6.0 or below, 5.7% at 8.0 or above, lowest 2.9 (real charts: 6.8 / 0.6 / 3% / 12% / 5%). A brace still rates 8 or more; a centre-back beaten all night in a 0-5 rates in the fives.
v1.69.0 Money follows the division
- Television and prize money. Every club now receives television money each season for the division it will play in (about £40m in the Premier League, £4m in the Championship, £0.8m and £0.6m below), plus merit money for last season's finish. Until now a club's money was set once at creation and only gate receipts, sales and trophies ever added to it, so a club that climbed from League Two to the Premier League was still on a £42k-a-week wage budget.
- Parachute payments. A club relegated from the Premier League receives three seasons of parachute money (£6m, £4m, £2m), stopped the moment it goes back up.
- Budgets and standing follow the division. Promotion raises a club's reputation to at least the new division's floor and its wage budget to the new baseline; relegation lowers reputation to the new division's ceiling and cuts the wage budget, taken on the wage bill after the summer's sales, so the bill genuinely has to come down. Every club's wage budget is re-based to its reputation each season.
- Relegation costs you players. A relegated club's five most valuable players each consider their future, the ambitious more so and the loyal less: the best has a relegation release clause activated at three quarters of his value, the others may ask to leave. An AI club sells its leavers before the new season to a club that can afford them; at your club they stay listed with their clause or request, and the board tell you the wage bill must fall. Before this a relegated side averaged 92 to 103 points in the Championship whatever it did; the modern real figure is about 88 (Burnley 101, Leeds 100, Leicester 97), and 105-to-125-point, 150-goal seasons are gone.
- Wage pressure for everyone. An AI club over its wage budget lists its best-paid player each week until the books balance. Any signing still has to fit under the budget.
v1.68.2 Penalties, and fouls that go where fouls go
- Penalties exist. A foul on a forward, an attacking midfielder or a winger is sometimes inside the box; your designated penalty taker steps up if he is on the pitch, otherwise the best taker (the Penalties attribute first, then composure, big-match temperament and decisions). Two stages: hit the frame, then beat the keeper's reflexes, one-on-ones and agility. Measured with real takers against real keepers: 77% scored, 14% saved, 9% missed (real 78 / 15 / 7). Over three seasons: 0.25 a match, 6.5% of all goals (real 0.27 and 7%). Saves and misses appear in the commentary.
- Free kicks go where free kicks go. Every foul in range used to be struck straight at goal, 5 a match, so direct free kicks were 12.7% of goals against a real 2 to 3%. Now a quarter are shot and the rest are swung into the box and contested like a corner, which also lifts set-piece headers from 6% of goals to 11% (real 10 to 13). Direct free kicks fall to 2.5%. A good free-kick taker is still worth having: he delivers those too.
- Bug fixed: League Two's replacement for a club relegated out of the league was drawn from the reserve pool of every country, so a side just relegated from the Austrian or Scottish top flight, with a Championship-level squad, could be "promoted into League Two" and win it by forty points. The pool is now English only. An existing save that has already had this happen keeps that club where it is.
v1.68.1 Players age
- The third audit found that nobody declined with age: a 33-year-old was exactly as good as he had been at 28, because attributes only ever went up. At each season review a player past 30 now loses physical attributes, a little at first and more each year (pace and acceleration fastest; stamina, agility, balance, jumping and strength at half the rate), with natural fitness slowing the decline: a 20 halves it. Keepers start at 33 and lose half as much, from reflexes, agility, reach and one-on-ones. Technique is untouched, so an old head still passes and reads the game as he did.
- Measured on a fresh world over one season, mean change in the engine scores by starting age: under-21 +1.6, 21 to 24 +1.2, 25 to 29 0.0, 30 to 32 −0.6, 33 and over −1.2 (all three older bands were exactly 0.0 before). Passing unchanged at every age.
- New saves have a real age shape. Squads used to draw every age from 17 to 33 equally often, so a quarter of every squad was 30 or over and nobody was 34 or over. Ages now peak in the mid twenties: 21% aged 30 and over, about 4% aged 34 and over, a few 17-year-olds. Existing saves keep their players and will drift there through retirements and intakes.
- Retirement follows a curve instead of a flat 30% chance from 35 (which left a 38-year-old 70% likely to play on): 5% at 33, 12% at 34, 25% at 35, 40% at 36, 60% at 37, 80% at 38 and 95% beyond, with keepers read two years younger. Applies to your squad as well, so plan the succession.
v1.68.0 Injuries happen at a real rate
- The third audit found injuries several times too rare: a club recorded about five a season, carried a third of a player out at any time, and used only 17 or 18 different league starters, because nobody was ever forced to rotate. Real clubs record 30 to 40 injuries a season across all severities, carry three to six absentees at any time and use 22 to 26 starters. The per-start chance is six times what it was, and the severity mix now averages about three weeks with a few long lay-offs, matching the real average absence. Same world and seeds, three seasons: 31 injuries a club, 2.3 absentees at any time, 20.5 starters used. Goals, draws, table spreads and the home split unchanged.
- Squad depth now matters: a first-choice eleven will not get through a season alone, and the pre-season friendlies’ rotation and the academy call-ups become the point of having them. A good physio still shortens every lay-off by up to 40%.
v1.67.9 Dribbles that are dribbles
- ‘Dribbles won’ counted every duel an attacker won, so strikers led the charts with two a match and wingers sat below them. As with tackles, the rating still reads every duel won, and the visible count is now the take-ons: a slot-weighted share of an attacker’s successes, scaled by his dribbling. Measured: wide attackers 1.0–1.6 a match, wingers above strikers (0.55), midfielders 0.4, full-backs about 0.5, centre-backs almost none.
v1.67.8 Finishing decides more of a chance
- The second engine audit found the finishing attribute had too little say in whether a chance went in: the same striker converted 14% at finishing 5 and 20% at finishing 20, a 1.4-fold range where the real game shows about 7% against 19%. The shot stages — on target, the save and the one-on-one — now read the finisher at their own sensitivity, two and a half times the ordinary duel’s, with the shot bases raised a notch so the league’s mean conversion holds. The same striker now converts 11% at finishing 5, 17% at 10, 20% at 15 and 28% at 20.
- Sharper finishing concentrates goals, so defensive attention goes back up to 0.30 to hold the top-scorer band. Six seasons on one world: goals per game 2.5–2.7, draws 23–26%, top scorers 24 / 30 / 26 / 29 by division, one striker in 24 division-seasons over 40% of his club’s goals — and, as a welcome side effect, table spreads of 13–16 points, the real range, because a division’s finishers now differ the way its results do.
v1.67.7 Top scorers settle on the real average
- Defensive attention (v1.67.4) eased once more, from 0.25 to 0.20. On the same world and seeds, six seasons each: top scorers by division 22.5 / 26.7 / 22.3 / 27.2 at 0.25 and 26.0 / 26.3 / 25.7 / 27.8 at 0.20, against a real average of 26.4; the share tail stays closed (no season over 40% of a club’s goals, the highest 39%).
v1.67.6 Match ratings that treat every position the same
- A centre-back averaged 7.2 a match, a striker 6.6 and a keeper 5.9 for the same kind of game, because the rating added a fixed amount for every duel a player won and a centre-back is drawn into eleven duels a match while a keeper is drawn into none. Ratings are now judged against what a player’s slot normally produces, measured across all fifteen slots, so every slot averages about 6.7 on an ordinary day and moves up or down on what the player actually did beyond that. Keepers and the back line now gain for a clean sheet and lose for goals conceded, which nothing counted before. A two-goal striker still rates about 8.7; a keeper with a clean sheet about 7.2.
- The fatigue deduction on ratings is reduced to match the tamed fatigue model: a player at fatigue 60 loses about two thirds of a point, not two.
- Past matches keep their stored ratings; new ones use the new scale, so season averages for defenders will drift down and keepers up as a save plays on.
v1.67.5 Lower-league tables with a real bottom
- A six-season measurement showed the bottom clubs of the three 46-game divisions finishing on 42 points and their tables spreading by 10, against real figures of 30–40 and 13–15. The cause was squad generation: one compression factor for every division, applied to a top-flight reputation band 41 points wide and lower-league bands of 10 to 12, so the top flight’s elevens spanned 11 points of quality and the Championship’s 4. Compression is now chosen per division to give each a similar quality width (the top flight keeps its setting; the lower leagues run at 0.75–0.9), and the between-division gap constant is reduced so it no longer fights the width. New saves only.
- Measured over six seasons on one world against the same world before: table spread Championship 11 → 13, League One 11 → 13, League Two 10 → 15 (real 15 / 14 / 13); bottom clubs 40 / 39 / 43 → 40 / 37 / 38; champions 89–91. The weakest Premier League eleven stays 5–7 above the best Championship one; the League One and League Two bands now touch, which is the attribute floor rather than a choice.
- Defensive attention (v1.67.4) eased from 0.30 to 0.25, since top scorers were landing a couple of goals under the real average of 26.
v1.67.4 Defences pay attention to the danger man
- The division’s top scorer took more than 40% of his club’s goals in about a quarter of seasons, with peaks of 51 to 56% — the real golden-boot record runs 25 to 38% and never over 40. Nothing in the engine pulled the other way: the shooter draw, the through-ball runner (always the best mover, every time) and the header target all favoured the same man and compounded. Defences now pay attention: the more shots a player has had in a match, the more they concentrate on him and the less likely the next chance falls to him, on all three paths. The through-ball runner is drawn rather than always the best.
- Measured over six seasons on one world against the same six without it: the top scorer’s median share 35% → 31%, seasons over 40% from 29% to 4%, the highest share 53% → 42%, League Two’s top scorers from 25–44 to 20–29. Top scorers now average about 24 to 25 a season in every division against a real 26; goals per game, draws, spreads and the home split unchanged.
v1.67.3 Tackle counts you can believe
- A centre-back was credited with ten or eleven tackles a match at a 90% success rate, because every duel he was drawn into counted as one and the attacker fails to get past most of the time. Leaderboards showed 400-tackle seasons. The rating still reads every duel, so nobody’s ratings move; the tackle columns now count the challenges: a share of the stops are a tackle won, a share of the times the attacker got through are a tackle attempted and beaten. Measured: centre-backs about 2.9 attempted and 2.3 won a match, full-backs 2.3 and 1.7, central midfielders 1.8 and 1.4, strikers under one, at 73–83% won — the real game’s figures.
v1.67.2 A defensive style now stops goals as well as an attacking one scores them
- The audit’s second finding: ‘very attacking’ was worth half a goal a match for nothing, because the attacking style bias was applied at eleven stages of a chance and the defensive bias at three. Every stage now carries both — the one-on-one, the header, the shot on target, the save, the free kick — so a style trades goals for goals against. Measured with the same eleven on both sides and no home advantage: very defensive 0.59 for / 0.65 against, balanced 0.93 / 0.95, very attacking 1.36 / 1.30. The net effect of any style is now within a tenth of a goal of zero; the choice is about how open you want the game, and about your squad, not a free lunch.
- The possession shift a style brings is halved (very attacking now 52% of the ball against balanced rather than 54%), because once the biases were symmetric that shift was the whole of the remaining edge.
- The audit’s third finding — equal balanced sides scoring only 1.66 a match — turned out to be the old fatigue penalties acting on the test squads’ mid-season fatigue. With v1.67.1’s fatigue in place two equal balanced sides produce 2.5–2.7 goals a match, 7–9% 0-0s and 20–26% draws, which is the real game. The base rate is untouched.
v1.67.1 Tired players are worse, not helpless
- An engine audit (ENGINE_AUDIT_2026-09-23.md) found fatigue catastrophic: an eleven at fatigue 60 lost by two and a half goals a match to an equal side, at 85 by seven. Two terms were responsible — a cut of up to 60% to every duel score and a win-probability bias of up to 0.55 against the tired man in every duel — and both were deliberate. The league never showed it because daily recovery keeps fatigue under ten; a manager playing cups and Europe without rotating would have. Both terms are now a fraction of what they were and named constants. Measured: an eleven at fatigue 30 now costs about 0.1 goals a match, at 60 about 0.3, at 85 about 1.1 — tired players are worse, and a congested run is a real cost, but a squad no longer collapses.
v1.67.0 Flanks: players now come up against the opponents they would really meet
- Until now every possession drew an attacker and, separately, a defender, with no idea where on the pitch the duel happened: a left winger met the left-back as readily as the right-back, and a shape with no wide players was no easier to attack down the sides. The pitch now has three lanes. Every fielded slot has a presence across them — soft, because football is fluid: a wide midfielder is on his flank about two thirds of the time and inside the rest, a full-back four fifths, the left of two centre-backs leans left, a striker drifts. An attack takes a lane drawn from the attacker's presence, and the defender is drawn by who is there: a left winger now meets the right-back most of all, then the right-sided centre-back and right midfielder, and the left-back almost never. Against a 3-5-2 he meets the wing-back, with the centre-back trio covering.
- Numbers matter, statistically. Each lane's defensive coverage is compared with a 4-4-2's; an attack into a lane the defence has left thin gets a small, capped advantage, a crowded lane a small disadvantage. Quick skilful wingers are now worth about 0.25 goals a match against a 4-4-2 and about 0.4 against a narrow diamond that leaves its flanks to the full-backs.
- Counters. One attack in ten is a transition, matching the real share of shots from fast breaks; in a counter the defenders who were attacking — wing-backs, wide and attacking midfielders — are partly missing, so a wing-back shape is stronger in possession and more exposed on the break.
- Open-play crosses are now contested by whoever is in the box, centre-backs most often, rather than always the best header on the pitch. Pressing comes from whoever is near the man on the ball.
- What it does not do: no shape has a universal answer to another. Six club pairs in every combination of three shapes still show no average pairing effect; what varies is the specific squad's wingers against the specific squad's wide defenders, which is the point. Attacks split about 30 / 40 / 30 by lane against a real 34 / 37 / 30. Formation fit is unchanged at about 0.66 goals a match between a squad's best and worst shape.
v1.66.8 Formation now decides who does what
- Every role weight in the match engine — who is drawn to attack, defend, shoot, create, head and cross — was looked up by a player’s natural position, not the slot he was fielded in. A striker played at attacking midfield kept the striker’s shooting weight; a central midfielder pushed forward kept his midfield weight; a shape’s slots changed who was on the pitch but not what they did. All of it now follows the slot, as the crossing trigger already did from v1.66.7.
- Measured on sixteen squads in all ten shapes: a squad’s best shape is now worth 0.71 goals a match over its worst (was 0.64) and 0.45 over the shape it was playing (was 0.31). Shapes still differ far more by how they fit a squad than on average: the gap between the strongest and weakest shape averaged over all squads is 0.28 goals a match, against 0.71 for fit.
- Shape against shape has no effect of its own. Six club pairs played every combination of three shapes each way; once each side’s own shape is accounted for, the pairing adds nothing beyond sampling noise. A 3-5-2 does not counter a 4-4-2 with quick wingers, because the engine has no flanks: a winger’s duel is against whoever the defending pool supplies, not the wing-back on his side.
v1.66.7 A narrow shape now really does deliver fewer crosses
- Whether a player who broke through was ‘wide’ — and so likely to put the ball in the box rather than shoot — was judged on his natural position, not the slot he was fielded in. A natural winger played centrally still crossed from nowhere, and a shape with no wide slots had someone to lay the ball off to as long as a natural full-back or winger was on the pitch somewhere. It now follows the slot. Measured with one squad against one opponent: headed goals from open-play crosses 0.23 a match in a 4-4-2, 0.14 in a diamond with no wide slots; set-piece headers unchanged at 0.35–0.41. So an aerial striker in a narrow shape loses about 40% of his open-play service and none of his corners.
- Headed-goal events now record their source (open-play cross or set piece) for the diagnostics.
v1.66.6 Two open questions closed by measurement; no engine change
- Points spread: the top flight’s table spread runs about 15 against a real 17. Raising the duel’s per-point sensitivity was tested at two settings over three seasons each on one world, against a baseline on the same world. The spread moved inside its own noise while top scorers left their real-record band at both settings, so the sensitivity stays as it is (now a named constant).
- The old ‘November–December goals rise’ in the top division does not exist once tactical style is worth what it should be: monthly goals per game run 2.2 to 3.0 with no seasonal shape, and the four divisions sit flat at 2.6 a game.
v1.66.5 AI managers go all-out again
- AI clubs may pick ‘very attacking’ and ‘very defensive’ once more. They were withheld from the AI in v1.65.1 because they inflated scoring — a symptom of the oversized style effect fixed in v1.66.4, not of the choices themselves. A club whose squad and ambition both point the same way now goes all the way: over a season about 2% of AI clubs play very attacking and 9% very defensive (more clubs fear relegation than chase a title), with 28% attacking, 20% defensive and 41% balanced.
- Measured over three fresh seasons on a new world: league top scorers 29 / 28 / 30 / 27 by division, the spread of goals-for across a division 15–16 (real 16), champions scoring 82–93; everything in the calibration gate in target.
v1.66.4 Tactical style no longer outweighs the squad; top scorers land in the high 20s
- Research first: the real league top scorer, 2005/06 to 2024/25, averages 26 a season in every English division (Premier League 26.4, Championship 26.2, League One 26.4, League Two 25.6), reaches 33 or more once in twenty seasons, and 36 is the modern maximum. The game ran 31–32 in every division, and the cause was not one striker’s share but his club’s volume: champions scored 105–130 and conceded 55–60.
- The cause was the tactical style. A style added a flat amount to every stage of a chance — enough that ‘attacking’ outweighed the entire quality gap between the best and worst squad in a division, twice over when both sides attacked. One of League One’s weakest squads scored 123 by attacking; the Championship’s best scored 19 by defending. The style effect is now a third of what it was: a real tilt worth about a point of ability, for AI clubs and for a human picking ‘very attacking’ alike. Squad quality now decides results (squad average against points correlates at +0.5 to +0.9).
- The shooter pick’s ability weighting is trimmed (0.5 → 0.35) so the champion’s striker takes about a third of its goals rather than 40%.
- Measured over three fresh seasons: league top scorers 29 / 28 / 25 / 23 by division, champions scoring 79–91 and conceding 38–47, the spread of goals-for across a division 12–15 (real ~16), scoreline distribution matching the real one to the percent, goals per game 2.6–2.7. The calibration gate now judges the top scorer league-only per division against the real record.
- Applies to every save from the next match played: it is the match engine, not the squads.
v1.66.3 A new save no longer releases the only left-back
- The market seeding on a new save released one player from a slice of clubs to give the free-agent pool content, and it picked the club’s weakest outfielder by raw overall — which at one club in seven was the only natural left-back, right-back or central midfielder the balanced-squad rule had just guaranteed. Seeding now uses the same ‘surplus with cover’ rule as the weekly AI listing: a player is only listed or released from a position the club has more players at than its formation fields plus one. Measured on a fresh save: no squad short at any slot, down from 42 of 338.
v1.66.2 Faster week processing
- The best-pair selection introduced in v1.65.6 re-scored every player for every slot on each round, and the AI’s formation review runs it for ten shapes per club every week, so stepping a week had roughly doubled in cost. Scores are now computed once per slot type and player; a simulated season steps in about the time it did before.
v1.66.1 Reputation bands no longer overlap between divisions
- The new-save picker sorts clubs by reputation, and the raw figures had the Premier League running 35–93 against a Championship of 25–50 — Hull City (35) listed as a weaker club than Sheffield United (50). Reputation also sets transfer and wage budgets, how far up the market a club can shop, and the level its squad is generated at, so the number mattered beyond the list. Each division’s band is now lifted, bottom up, to sit at least two above the division below, keeping the order inside it: the Premier League runs 52–93 (Hull 52, Ipswich 53, Coventry 54, Sunderland 57 … Manchester City 93 unchanged), the Championship 38–50, League One 26–36, League Two 12–24 unchanged.
- New saves only — the picker and creation share one source. Existing saves keep the reputations they were created with.
v1.66.0 Balanced starting squads, and a real gap between divisions
- Every generated squad now has a natural player for each slot of the default 4-4-2: two keepers, two centre-backs, both full-backs, two central midfielders, both wide midfielders and two forwards, with the other eight drawn by weight as before (positions the core already covers at half weight, so sweepers, wing-backs and attacking midfielders still appear). Drawn freely, a third of squads had no natural wide midfielder, a quarter no left-back and 7% no central midfielder at all — and most of the AI’s ‘need’ signings were cover for those holes. Measured on a fresh save: 2 of 92 squads short at one slot, down from 30–40.
- The weakest club of a division is now generated clearly above the strongest club of the division below. The Premier League’s reputation range reaches under the Championship’s top, so with the within-division compression alone the bands touched (a fresh save had Ipswich’s best eleven at 51.3 and Southampton’s at 51.6). On a fresh save the weakest Premier League eleven is now 5.5 above the best Championship eleven, the Championship 2.9 above League One and League One 3.6 above League Two. A promoted squad starts below every established side; a relegated one keeps its stronger squad, as it should.
- Both apply to new saves and to players generated during a save (new clubs, the summer squad review); existing squads are not rewritten.
v1.65.6 AI clubs buy the players they set out for; every player is picked where he is worth most
- The residue of the transfer-mix work: forwards were 8% of AI deals for 14% of players, centre-backs 20% for 13%, keepers 4% for 11%. Five causes, each measured on fresh saves with a new diagnostic that follows every shopping trip from the position chosen to the offer made. (1) The AI browsed the transfer list position-blind and bought whatever cleared the lowest bar — a trip for a striker ended in a centre-back. It now browses for the position it set out for. (2) A club took the first candidate that cleared its bar and, if it could not pay for him, gave up for the week; striker targets were dropped as unaffordable twice as often as defenders. It now takes the best candidate it can pay for. (3) The bar was the average of the would-be starters; it is now the weakest of them — the man the signing would replace. (4) Clubs listed their lowest-rated player, which was the backup keeper at most clubs (keepers were 18% of the list); surplus is now judged against the position’s level and only where the club has cover. (5) A striker or attacking midfielder is hunted for at a premium over his squad share, since with three strikers in every generated squad a striker slot is almost never a need. Over two simulated seasons: forwards 12–16% of deals, keepers 8–9%, midfielders 27–28% (28% of players), attacking midfielders 9–11%, defenders 39–42% for 34% — the last is genuine need: a quarter of generated squads lack a natural left-back.
- The AI’s need rule is judged in standard deviations of each position’s typical level for that slot count, so a slot held by one player is not ‘weakest’ merely because it varies more from club to club.
- Selection places every player where he is worth most rather than filling slots in formation order: an attacking midfielder rated 95 used to be grabbed by the wing-back slot at the cross-group discount before the central-midfield slot was considered. The same assignment now sits behind auto-selection, the AI formation review, friendlies and the youth XI.
- AI clubs now make about 500 transfers a season, up from 400, because fewer trips end empty-handed.
v1.65.5 Ten formations, and a better player out of position now gets picked
- Five new shapes: 4-2-3-1, 4-3-1-2 (diamond), 4-4-1-1, 3-4-3 and a 5-3-2 with a sweeper. Every position now has a formation that fields it naturally — sweepers had none. AI clubs pick whichever shape their squad fits; over a simulated season they settled on 4-4-2 (32%), the diamond (21%), 4-5-1 (13%), 4-2-3-1 (8%) and the rest.
- Auto-selection used a strict natural-first ladder: a far better attacking or defensive midfielder never displaced an ordinary natural central midfielder. Every empty slot now goes to whoever scores best for it, a player from the same area of the pitch at 85% and one from another area at 70% — so a clearly better DM or AMC starts at MC, a marginally better one does not. Keepers fill only the keeper slot.
- The same 100/85/70 rule now sits behind the AI’s formation review (which used no discount at all), friendlies, the youth XI and transfer judgement, so all of them agree on how good a player is for a slot.
v1.65.4 Pre-season friendlies rotate the whole squad; AI clubs stop buying midfielders by reflex
- Friendlies used to field your best eleven for the full ninety with no substitutions, every time, so five friendlies in July wore the first team out before the season started. The friendly side is now picked from the whole club — first team and academy — with tired players and last match’s starters marked down, the starters come off after about an hour and a full bench of seven comes on, at least three of them academy players. Over a pre-season every club uses about 26 players, regulars start two or three of the five, and prospects get four or five run-outs each match.
- AI clubs judged their weakest position on a raw score that runs on a different scale per position — midfielders score lowest for their own slot by the shape of their attributes — so the midfield was ‘the weakest spot’ at a quarter of all clubs and midfielders were 40% of AI transfers for 28% of players. Need is now judged relative to what each position typically scores: midfielders 24% of deals, attacking midfielders 14% (were 3%, for 13% of players), forwards 12%.
- The AI’s upgrade hunt can shop for a position its current formation does not field: a 4-4-2 club had no attacking-midfield slot to be weak, played 4-4-2 because it had no attacking midfielders, and so never bought one. Real clubs buy the talent and adapt the shape.
- An exact tie between two slots (the same stand-in is the best option for both wing-back positions, say) no longer always resolves to the left one.
v1.65.3 The youth league is played through the season, not in one day
- The academy league needed eleven youth players a club to be scheduled and a new save gave each club four, so no youth season existed until the first summer — when it was created on the season just played’s dates and the calendar caught it all up in a single day, with no recovery in between. Academies are now full from the start and the youth season is scheduled on the matchdays still ahead, every second senior matchday, as intended.
- This was the real cause of the pre-season fatigue spike: friendlies were never it (measured — five days apart, negligible fatigue).
v1.65.2 AI clubs buy strikers again; four loose ends tied off
- An AI club judged each position by its natural players only, so a slot with no natural wide midfielder scored zero and became ‘the weakest spot’ at more than half of all clubs — wide players were 53% of AI transfers and strikers 1%, because a striker slot was never the weakest. A slot is now judged by whoever would actually play it, with the same out-of-position discount auto-selection uses.
- A striker no longer racks up three ‘tackles’ a match: a press that wins the ball counts as a tackle, a press that merely closes a man down does not, and forwards are drawn into defensive duels less often.
- Pre-season friendlies are never scheduled behind the calendar. A late-finishing season used to leave the whole of July dated in the past, and the day stepper then played every friendly in one day with no recovery — squads started the league at 60% fatigue.
- Punching keepers: catching now leans on Handling and punching on Bravery, and the keeper’s claim itself is decisive — a commanding keeper takes the ball, a poor one doesn’t — so the choice is a real trade of hands for nerve rather than a coin toss. Re-measured neutral across the whole tendency; the Goalkeeping and Passing ratings follow the new measurements.
- Generated squads are shaped like real ones: two keepers, seven defenders, eight midfielders (wide midfielders drawn as often as full-backs) and three forwards in twenty. Six midfielders and four strikers left every club short of midfielders from day one, which was most of why the AI never bought a striker. New saves only.
v1.65.1 AI clubs pick their tactics relative to their division
- An AI club chose attacking or defensive football by comparing its attacking scores with its defensive ones in absolute terms. Attacking scores rise with the division and half of the Stamina score does not, so measured on a fresh save three quarters of League One and League Two clubs played defensively and the top flight leaned attacking — by construction, whatever their ambition. That alone moved league scoring by half a goal a game at the top and a whole goal at the bottom, while the engine at full strength gives the same 2.7–3.1 everywhere. A club now judges itself against the other clubs in its division, the way a manager reads the table.
- The AI’s ambition also leaned its choices attacking overall, and an attacking style adds goals at both ends, so the league as a whole scored more than the engine warrants. The AI’s choice is now centred, and it stops short of the ‘very attacking’ and ‘very defensive’ extremes — those remain a human manager’s call — and adopts a style only when it has a clear reason to, so about a quarter of AI clubs each way play with one. With tactics switched off entirely a season lands exactly on target; with these rules it lands within a few hundredths of it.
v1.65.0 One role table, honest deliveries, and goals shared around
- What each position does in a match — who carries the ball, who defends, who shoots, who creates, who attacks a cross and who delivers it — now lives in one table. Until now the same ‘attacking’ weight was reused for every one of those, so a centre-back crossed as readily as a full-back. Crosses now come from wide players.
- Technique no longer counts in crossing, corners or free kicks — those skills carry themselves. It was being read in seven places and topped every position’s measured key attributes for that reason alone; it keeps its real jobs (beating a man, the shot, the long shot, finishing under pressure, playing through a press). The Passing rating and every position’s key attributes and selection weights are re-derived to match.
- Shots are shared more evenly within a side: position decides who is in the box, ability still tilts who gets the chance, but one striker no longer takes twice the shots of a team-mate half as good. A fresh save’s top scorer had reached 66.
- The season harness now carries the engine’s calibration targets as a pass/fail gate: goals a game, draw rate, points spread, top scorer, strikers’ share of goals, keepers’ share of transfers.
v1.64.3 New saves: a division’s squads are closer together
- Squads were generated straight from club reputation, and in the top flight reputations run from 35 to 93 — so the bottom Premier League side started with a League One squad and tables ran away (a season simulated headlessly gave 99 points at the top and 12 at the bottom). Squads are now centred on their division’s typical level, with about a third of the club’s own reputation gap showing through: the gap between divisions is untouched, the gap inside one is roughly halved. Applies to new saves, new clubs and new players only — an existing career’s squads are not rewritten.
v1.64.2 Every position’s key attributes and selection weights come from measurement
- The five ‘key attributes’ shown for each position, and the weights auto-selection uses to rank players for a slot, were hand-written. Both are now derived from what each position actually does in the engine: every attribute’s measured worth through every duel, times how often that position is drawn into it. Left and right roles mirror each other. Expect auto-picked line-ups to move by about a player at half of all clubs; the goalkeeper’s tables were already measured and are unchanged.
- Natural Fitness appears among a defender’s key attributes: measured over whole seasons it is worth as much as marking, because it is what keeps him on the pitch in March.
- Under the bonnet: the morale-to-performance swing is a named constant for the season harness to trial. No change to play.
v1.64.1 Goalkeepers re-rated for a game with crosses
- The Goalkeeping rating was measured before open-play crosses existed. Re-measured with four balls into the box a match, command of the area, aerial reach and handling are each worth about twice what they were, and organising the defence a little less. The rating follows the measurement; the keeper valuation ladder is re-calibrated to match, so a typical keeper is still worth what a typical outfielder of the same standing is. Every player is re-rated on first start.
v1.64.0 Strikers score the goals
- Who took a shot, who played the pass that made it, and who attacked an open-play cross were chosen by ability alone — a centre-back with a decent finish shot as often as a striker with the same numbers, and centre-backs were scoring a fifth of all goals. Position now counts in those three choices, the same way it already decided who carries the ball and who makes the tackle. Measured on identical matches: strikers’ share of goals rises from a quarter to nearly two fifths, centre-backs’ falls from a fifth to a tenth, attacking midfielders take more — the shape of real football — with the same number of goals overall. Corners are unchanged: everyone comes up for a corner, and a big centre-half still heads them in.
v1.63.7 The Pace rating is measured too — all six ratings now come from the engine
- Pace was the last rating set by opinion. Measured through the duels each attribute is actually read in, Acceleration, Agility and Balance each turn out to be worth more to a side than raw Pace, because in this engine a quick player’s value is beating a man or catching one, not top speed in open space. The rating now weights them that way: Acceleration and Agility just under a third each, Balance a quarter, Pace a fifth. Every player is re-rated on first start. With this, all six ratings are derived from measurement rather than intuition.
v1.63.6 The Stamina rating is measured over whole seasons, and work rate is a trade again
- Stamina was the last of the six ratings still set by opinion. It is now derived the only way fatigue can be measured — whole seasons played through the real calendar with an attribute forced high on half the league and low on the other half, then reversed. Natural Fitness carries three quarters of the rating, Stamina a quarter; Work Rate is out, because it is demand rather than capacity and was costing points over a season while wearing the Stamina label. Every player is re-rated on first start.
- A high work rate had become a tax: measured over a season it cost a side about twelve points, its pressing upside dwarfed by the fatigue it demanded. The demand is halved so it is a genuine trade for players with the engine for it.
- Under the bonnet, the five remaining unnamed duel lists (sprinting past a keeper, evading him, the presser’s work rate, closing down a shooter, the run onto a chance) are named constants so the measurement tools see them. No change to play.
v1.63.5 Players recover day by day, not once a week
- v1.63.3 raised weekly recovery and it changed nothing measurable — the same slide in match ratings from 6.6 in August to 5.0 by December appeared whatever the weekly figure, because recovery landed once, at the week boundary, and the Wednesday game was always played on Saturday’s legs. Recovery now happens every calendar day: a four-day gap clears a full match, a three-day gap nearly does, and a long congested run still tells through the compounding of playing tired. Match ratings and goal totals should now hold level from August to May.
v1.63.4 A chance is judged against the defence it is made against
- How good a chance was — the pass that made it, the run onto it, the cross into the box, and whether a header or free kick found the target — was judged against a fixed average, so a top-flight creator made better chances however good the defence, and a fourth-tier one worse however poor. The divisions scored 2.6 goals a game at the top and 2.0 at the bottom for that reason alone. Each of those is now judged against the level of the defence actually on the pitch: elite against elite is a level contest, and a mismatch still shows in full. Divisions one to four now sit between 2.4 and 2.7.
v1.63.3 Players recover from a two-match week
- A full season run headlessly showed the top flight scoring 2.9 goals a game in August and 4.3 by May, with average match ratings sliding from 6.6 to 5.0 by Christmas. The cause was fatigue: recovery was set for the old one-fixture-a-week calendar, so any club playing twice a week — cup runs, Europe, and every goalkeeper, who never rotates — was exhausted inside two months. Weekly recovery was raised. (v1.63.5 found this was only half the story: the real fix is recovering day by day — see that entry.) Rotation, work rate and fitness still cost and pay exactly as before, relative to each other.
v1.63.2 Headers are shared around, and AI clubs stop stockpiling keepers
- Whoever attacked a cross or corner was always the side’s single best header, so with crosses now frequent one centre-back could head 80 goals in a season. The best header still gets most of them, but not all — found by running a whole season headlessly.
- AI clubs judged their ‘weakest position’ by averaging everyone they had there. A goalkeeper group is one starter and a deliberately modest backup, so the keeper position looked weakest at almost every club and a third of all AI transfers were keepers. Strength is now judged on the players who would actually start, for the positions the club’s formation actually uses.
v1.63.1 Punching keepers rebalanced for a game with real crosses
- With four balls into the box a match instead of one, a keeper who punches was giving away a measurable extra goal every fifty games through second balls — the trade-off had been balanced for the old cross volume. A punch now clears further and is a little more reliable when he commits to it; measured neutral again across the whole range of the tendency, on identical fixtures and seeds.
v1.63.0 Crosses are now a real part of the game — and defending them matters
- Until now a ball only reached the box from open play when a winger had already beaten his man, and then only one time in seven — about one cross a match. Three routes now: a wide player who breaks through usually crosses; a central player who breaks through sometimes lays it off wide; and a wide player may cross early, from deep, before anyone is beaten — against a set defence, so easier to claim and harder to win.
- The aerial duel is decisive. A big gap in heading between the attacker and the defender used to move the outcome by a few percent; it now decides most of them. Measured across a whole side, a defender’s Heading is worth five times what it was defensively, and Crossing four times what it was going forward. A good ball is also easier to head at the target.
- Goal totals move by under 5%: some shots from bad angles became crosses. Everything was measured on the same frozen save, same fixtures and seeds, before and after.
v1.62.2 AI clubs stop treating their goalkeeper as the worst player in the squad
- Every AI judgement of ‘how good is this player’ — who is surplus, who to renew, who to loan out, which position needs strengthening, whether a signing is a statement, how fast a player can improve — averaged five outfield scores and ignored Goalkeeping. So every keeper counted as a poor outfielder and was, at almost every AI club, the first man listed and the last renewed, and the position AI scouts always tried to fix. Keepers are now judged on goalkeeping, on the same ladder that already prices them.
- That ladder itself had drifted: it was calibrated before the Goalkeeping rating was rebuilt, and a typical keeper had come to be valued about 13% below a typical outfielder of the same standing. Re-calibrated — keeper valuations and wage demands rise accordingly; existing contracts are untouched. A test now guards the calibration.
- Auto-selection meant to weigh a player’s full attribute profile half-and-half with his six headline scores. A scale mix-up made the profile worth about a fifth. Fixed — expect an automatically-picked XI to move a little where the two disagree.
- Accepting a counter-offer now re-checks that the buying club can still afford the fee and the wage; a transfer budget can no longer go negative that way.
- A player who moves club arrives on a clean contract: no longer transfer- or loan-listed, no longer asking to leave, and without his old club’s release clause or bonus terms.
- AI substitutions now take off the player who is actually tiring, judged on his condition at that point of the match, never the keeper — rather than whoever had the lowest Stamina score, which used to pull fresh substitutes straight back off.
- The goalkeeper is no longer occasionally drawn as an outfield tackler, the man closing down a shooter, or a defensive header at a corner — he was winning about one ‘tackle’ a match on the leaderboards. He meets attackers only through his own duels.
v1.62.1 Tidy-up under the bonnet: stats add up, and one cross is one cross
- A corner taker could head in his own corner and be credited with the assist. He is now out of the pool of players attacking the ball, as he obviously always was in reality.
- Match stats no longer count a shot the keeper swept up before it was struck, or a ‘key pass’ for a cross the keeper claimed. A pressing turnover now counts as an attempted tackle as well as a won one, so a tackle success rate can no longer read over 100%.
- A tired defender now tells against him in the air from an open-play cross as it already did at a corner — the two paths were separate copies and had drifted. They are one routine now, which is also what makes crosses tunable in the next stage.
- A retired player is fully off the books rather than still carrying a club and a wage on a row nothing shows. Under the bonnet: every remaining hard-coded duel rate is named, the recent-form lookup no longer reads a player’s whole career to use five games of it, and two internal formulas that existed in several copies exist once.
v1.62.0 Wingers cross the ball, and a tackle is mostly tackling
- Balls are now put into the box from open play. Until now the ONLY way a cross reached the area was from a corner, which meant a winger's Crossing barely mattered and a centre-half was almost never asked to defend a ball in the air. A wide player who breaks through now often crosses instead of shooting from an impossible angle, and it plays out like a corner: the keeper may claim it, or the best header in the box wins it.
- Defending is no longer six attributes counting the same. The tackle duel weighed Tackling, Marking, Positioning, Anticipation, Pace and Aggression equally, so a defender's Tackling mattered no more than his pace. It is now weighted like a real challenge, and the Tackling rating has been rebuilt from measurement to match. Every player is re-rated on first start.
v1.61.0 The Passing rating now reflects what actually keeps the ball
- Passing is, by a distance, the most valuable attribute in the game: it decides how much of the ball your side sees, and that is worth roughly three times what any other single attribute is worth. It carried a third of the Passing rating. It now carries just over half, which is what the measurements say it deserves.
- Vision drops from a quarter of the rating to a twentieth. Not because it stopped mattering — it shapes how good a chance is when it is created — but because that is worth a tenth of what simply keeping the ball is. Until very recently Vision did nothing at all while carrying 24% of the score.
- Crossing and Corners now count toward it too. They never did, despite being exactly how a wide player creates. Technique and Dribbling rise, since carrying the ball forward is most of how a side progresses it. Every player is re-rated on first start.
v1.60.0 A shot is mostly finishing again
- Every duel in the match engine weighted its attributes equally. A shot counted a striker's Finishing, Technique, Decisions and Composure a quarter each — so his Finishing was worth no more to scoring a goal than his Technique was. Measured, all four came out within a whisker of each other. A shot is now weighted like a shot: mostly Finishing, then Composure, then Technique and Decisions behind them.
- The Finishing rating has been rebuilt on that basis, from measurement rather than opinion, and from the scoring situations only — what a player does carrying the ball belongs to Passing, not to Finishing. Finishing is now comfortably the biggest part of a striker's Finishing score, which sounds obvious and previously was not true. Every player is re-rated on first start.
v1.59.0 The pass and the run now matter, and a high work rate only suits players with the engine for it
- Vision, Flair and Off The Ball did nothing whatsoever. All three only decided WHO got credited with the assist or who pulled the trigger — never whether the ball went in. Flair could not change a single outcome. Between them they carried 29% of a player's Passing rating and 8% of his Finishing. Now the quality of the pass and the quality of the run make the chance itself better or worse, which is what they were always for.
- A high work rate now only costs what you can afford. Work rate is how much running a player does; Stamina and Natural Fitness are whether he can. Those were separate before, so a tireless presser paid the same surcharge whether he was an athlete or not. A genuine athlete on maximum work rate now tires barely faster than anyone else, while the same effort from someone without the lungs has him spent in three matches.
- Passing is, by a distance, the most valuable attribute in the game — it decides how much of the ball your side sees. That was always true and is now measured.
v1.58.0 50/50s are won by whoever wants it, and nerve decides every chance
- Aggression now decides tackles. A 50/50 read Tackling, Marking, Positioning, Anticipation and Pace — and not the attribute for whether a defender actually wants the ball. A snarling enforcer and a passive defender contested one identically, so Aggression was pure cost: it got you booked and won you nothing. It is now worth a little over half what Tackling itself is. It still gets you booked, which is the trade.
- Composure now decides ordinary chances, not just one-on-ones. Missing a presentable chance is rarely a failure of technique; it is a failure of nerve. A striker who keeps his head converts the routine ones too, and Composure is now the second most valuable attribute a forward has.
- Both ratings re-derived from measurement. Every player is re-rated on first start.
v1.57.0 Bravery finally means something for outfielders, and Composure counts toward what a player is worth
- Bravery did nothing for anyone but a goalkeeper. It was read when a keeper punched a cross or dived at a striker's feet, and nowhere else — an outfielder's Bravery was generated, trained, displayed and completely ignored. It now decides aerial duels, because contesting a high ball means going in with boots and elbows flying. It also costs: a brave player puts his head where others put a foot and picks up around 20% more injuries for it.
- Composure now counts toward a player's rating, value and wage. It decided one-on-ones, empty nets and whether a defender played through a press — real, measurable effects — while contributing nothing to what he was judged to be worth. A composed striker was doing the work and not getting paid for it.
- Both weights come from measurement rather than opinion: across a whole side, Composure is worth about a third of what Finishing is, and Bravery about a sixth. Every player is re-rated on first start.
v1.56.0 Sweeper keepers: coming out is now a real gamble, and it depends on the keeper
- A keeper who rushes off his line now genuinely lives or dies by whether he is equipped for it. A quick, brave, decisive goalkeeper reaches the ball 65% of the time and clears it 76% of the time — half his sweeps come off. A slow, rash one reaches 39% and clears 56%, so barely a fifth do, and the rest leave him stranded with the goal gaping. Before this the two were almost indistinguishable: Rushing Out changed how often he came, and nothing about whether it worked.
- One-on-ones and sweeping now test different goalkeepers. Staying on your line is shot-stopping — one-on-ones, reflexes, positioning, and the bravery to dive at a striker's feet. Coming out is pace, anticipation and the defending to clear it once you are there. A keeper can be excellent at one and poor at the other, which is the difference between a sweeper and a shot-stopper.
- Rushing Out remains a habit rather than an upgrade: across a whole league it is worth nothing either way. It is only worth something to the keeper who can back it up.
v1.55.0 Goalkeepers who can see a pass, and penalties decided by nerve
- A keeper's Vision now matters. Kicking and Throwing are how far and how accurately he can deliver it; Vision is whether he spots the ball over the top in the first place. A keeper who sees it starts counter-attacks his side would not otherwise have had — worth about as much as commanding his area, measured over 10,000 matches.
- Composure now decides penalty shootouts. Picking who steps up weighed Penalties, Decisions and Big Matches, and somehow not the attribute for holding your nerve from twelve yards — which is most of what a penalty is. Composure is now second only to Penalties itself, and Decisions drops back: there is not much to decide once you have picked your corner.
- Goalkeeper ratings re-derived once more to take Vision in. Keepers are re-rated on first start.
v1.54.0 Pressing: work rate finally means something, and so does keeping your head on the ball
- Teams now press. The side without the ball closes down the man on it — how hard depends on Work Rate, backed by Aggression and Stamina — and the man on the ball either keeps his head or gives it away, which depends on Composure, Decisions and Technique. Win the ball high enough and cleanly enough and the keeper is suddenly exposed. Most of the time pressing just wins possession back, which already matters: it ends the attack.
- Work Rate was the most expensive dead attribute in the game. It is a fifth of a player's Stamina score — so it raised his rating, his price and his wage — while being read by nothing at all: a player on 20 covered no more ground and tired no differently than one on 1. It now drives the press, and it costs: he covers more ground and tires up to 12% faster for it. A relentless presser wins you the ball back and needs resting more often.
- Composure now matters for defenders and midfielders, not just strikers. A calm defender plays through a press; a nervous one panics and hands over a chance in a dangerous area.
v1.53.0 Goalkeepers come for the ball — and can be caught out of their goal
- A keeper can now leave his box. Play a ball in behind, or force an error out of a defender, and he has a decision to make: come for it, or stay on his line. If he comes he has to get there first (anticipation, decisions, acceleration, pace) and then deal with it (heading, tackling, bravery, strength). Clear it and the attack is over. Get it wrong and he is beaten with the goal gaping. Seven attributes that did nothing for a goalkeeper now decide these moments.
- Rushing Out is finally the trade it always claimed to be. It decides how OFTEN he comes, nothing else — how WELL he does it is his anticipation and decisions. Coming out and staying put are worth the same to an average keeper, so a sweeper is a different kind of goalkeeper rather than a better or worse one, and a keeper with the temperament but not the ability will get himself caught out.
- New attribute: Composure, for every player. It decides the moments that decide matches — through on goal, or an empty net in front of you. A striker can still blaze it over. A nervous defender is also the one who panics on the ball and gifts the chance in the first place. Existing players get a value derived from how they already handle big games, decisions and week-to-week consistency.
- Every goalkeeper rating weight re-derived again, from one consistent set of measurements over the new engine. Sixteen attributes now feed a keeper's rating, each weighted by how much it actually changes results. Keepers are re-rated on first start.
v1.52.0 Every player now has a height, and it decides who wins the ball in the air
- Players have a real height, shown on their profile. It is generated to suit the position — keepers around 190cm, centre-backs 187, wingers 177 — and it never changes. Aerial Reach is now what it always claimed to be: how high you actually get to the ball, 60% height and 40% leap. Before this the game had no height at all, so reach was really just Jumping under a second name, and a 5'9" winger challenged a 6'4" centre-back on equal terms.
- Height is not a free upgrade. A high centre of gravity is worse at turning and staying upright in a scrap, so tall players give up agility and balance for what they win in the air — measured across a live save, players 192cm and over average noticeably less agility than those under 172cm. A towering target man and a small, quick forward are now genuinely different players, and no amount of coaching turns one into the other.
- Training a goalkeeper's Jumping finally does something: it feeds his Aerial Reach, which is what the engine reads. Aerial Reach itself is no longer trainable, because it is derived — and it is no longer filed as a goalkeeper attribute either. How high you reach is a fact about every player, so outfielders can see theirs now too.
- A goalkeeper's Agility now matters. It was worth 9% of his rating and one in fifteen of his training weeks while having literally no effect on a match — measured at zero across its entire range. It is now part of shot-stopping and turns out to be the second most important thing a keeper has, behind only organising his defence. Every goalkeeper rating weight has been re-derived from measurement, and keepers are re-rated on first start.
- Fixed the Key Attributes panels, which had quietly started lying: they still told you Jumping mattered for defending corners, and left Agility out of shot-stopping.
v1.51.0 Goalkeepers are now rated, and priced, on what they actually do in a match
- A goalkeeper's rating was set by intuition and was badly wrong. Measured across 10,000 matches per attribute, organising the defence (Communication) is the single biggest thing a keeper does — worth 0.21 goals a game, a fifth of everything his side concedes — but it carried just 4% of his rating. Meanwhile 16% of that rating went to Agility, Jumping and Bravery, none of which appears in any goalkeeper duel: Agility measured at zero effect across its entire range. Every weight is now that attribute's measured share of impact, so the number next to a keeper finally predicts how many goals he saves you. Existing keepers are re-rated on first start.
- Keepers now have a transfer value and a wage. Both were built from finishing, tackling and pace — attributes a keeper is deliberately generated weak in — so every keeper was priced on noise: three keepers all rated 99 were valued at £4.5M, £14.6M and £7.1M, the median keeper was worth a third of the median outfielder, and training one never moved his price by a penny. A keeper is now priced on his goalkeeping ability, and sits on the same ladder as an outfielder of the same standard.
- Every existing goalkeeper gets the pay rise that correction implies, on first start. Without it the fix would have landed on the keepers themselves: what a player is worth feeds how fairly paid he feels, so 800-odd keepers would simply have started sulking about wages that had not changed. No wage is ever cut, and each club's wage budget rises by exactly what its own keepers' rises cost it — so no club is pushed over its budget and blocked from signing anyone. Budgets across the game carry the same 4.2% the typical wage bill grows by, so new clubs start out on the same footing.
- Rushing out is a habit again, not a free upgrade. A keeper who charges off his line should be harder to beat from close range and easier to lob — a trade, not a gain. The two halves were balanced for how often long shots are attempted, but the trade is settled when a shot is already on target, and long-range efforts are much less likely to get there. The result was a straight buff worth more than Command of Area. Now genuinely even.
v1.50.1 AI substitutions and lineups now respect which foot a player favours
- Auto-selection already marked down a wrong-footed full-back or winger, but the code that picks AI substitutes, injury replacements, formation choices and youth lineups ranked players on ability alone, so it could still put a wrong-footed player on a flank. All of them now apply the same footedness penalty.
v1.50.0 Long throw-ins are now a real weapon
- The Throw Ins attribute used to affect nothing. Now, when a team wins the ball and it goes out in the attacking half, a genuine long-throw specialist (Throw Ins 16 or more, plus the strength to get distance) can hurl it into the box, resolved like a corner: the keeper may claim it, otherwise the best header on each side duels for it. Most sides have no such thrower, so it is an occasional edge rather than a tactic, worth roughly a twentieth of a goal a game.
v1.49.0 Player personalities: determination, professionalism, ambition, loyalty and adaptability
- Every player now has five personality attributes, shown on his profile and in comparisons. They describe who he is, not how good he is, so none of them counts toward his rating, value or auto-selection. Existing players get values derived once on first start: determination follows work rate, bravery and consistency; professionalism follows consistency, fitness and (inversely) dirtiness; adaptability follows versatility, decisions and anticipation; ambition and loyalty are independent of everything else.
- They shape behaviour: a determined young player gains more from the same training (up to about a quarter more); a professional plays through low morale while an unprofessional one sulks (up to 30% either way on the morale penalty); an adaptable player copes better out of position, on top of versatility; a loyal player is less likely to ask for a transfer and more likely to sign a new deal, an ambitious one more likely to feel he has outgrown the club and less keen to re-sign.
v1.48.0 Eight new goalkeeper attributes, seven rewired outfield attributes, and footedness that follows position
- Goalkeepers now have eight extra attributes beyond the original 41: command of area, aerial reach, communication, kicking and throwing (skills), plus rushing out, tendency to punch and eccentricity (habits, not skills — a higher number is not better, so they stay out of every 'how good is this player' calculation). Communication now helps the whole defence, not just the keeper; kicking and throwing shape how he starts attacks. Every existing player is given values derived from what he already had, one time, on first start.
- Seven engine attributes now blend in more of the detailed ones (heading and movement into finishing, dribbling and flair into passing, strength and heading into tackling, agility and balance into pace, agility into goalkeeping). Match results are unchanged within noise.
- Footedness now follows position. Previously about 70% of every full-back and winger was on the wrong foot. Existing players are corrected by swapping left and right foot values (about 3,300 players), and auto-picked lineups now slightly prefer the natural foot for sided slots. A player is judged on the slot he is fielded in, not his natural position.
v1.47.1 International knockout brackets now actually progress, and no club will sell its last goalkeeper
- The World Cup and Euros knockout bracket was structurally broken. Each new round was dated from the START of the week the previous round fell in, plus four days — which always landed on the same date, inside the same week, every single time. So the bracket never advanced through the calendar: found live with 23 ties across four different rounds all sitting on 13 June 2030. Worse, because the progression logic matched on the week, it pooled every one of those rounds into a single pseudo-round, froze the round counter, and forked the draw into parallel Round of 18/16/12 batches — and pooling their winners meant a nation could be drawn AGAINST ITSELF (seen live: 5549 v 5549). Rounds are now dated from when the previous round was actually played, the progression check only ever looks at the latest round in a week, and the draw is deduped. Verified end to end: a full tournament now runs 32 to 16 to 8 to 4 to 2 to 1, four days apart, and crowns a champion.
- No club will sell its last goalkeeper any more. There was no squad-depth guard anywhere in the AI transfer logic — the only place in the entire game that counted a club's keepers was the repair routine that runs at club creation and season end, so in between a club could sell both of its keepers and have nobody to put in goal. Found on a three-week-old save with two clubs already on zero and 31 down to one. An AI club now refuses any offer for its last senior keeper regardless of fee, while still selling outfielders and backup keepers exactly as before.
v1.47.0 Seasons can no longer be frozen open by a future tournament, no more Christmas Day football, and a sending-off now pauses the match
- Fixed the season that wouldn't end, properly this time. The rollover waited for every single unplayed fixture in the save, anywhere on the calendar — but when international qualifying finishes mid-season, the finals are scheduled at the next real summer tournament window, which can be the summer after NEXT. Confirmed exactly that on the live save: four World Cup ties dated 13 June 2030 were the only thing standing between a fully-played 2028-29 season and its rollover, holding it open for 26 weeks of game time. The rollover now only waits on fixtures belonging to the current season — anything dated past the next preseason can't hold it open. A summer tournament in this season's own close season still does, correctly, since that genuinely should be played out first.
- No more Christmas Day football. English football hasn't played on 25 December since 1957, but the fixture generator treated it as an ordinary Saturday — and in the years it fell on one, the damage doubled: taking the 25th pushed Boxing Day out via the rest-day rule, so the game played the one day football never does and skipped the one day it always does. Found live: 84 fixtures on 25 December 2027 and none on the 26th. Christmas Day is now excluded outright; checked across 20 seasons, with Boxing Day restored in every year that had lost it and every season still getting its exact round count.
- A red card now actually means something. Previously a sending-off recorded the suspension and printed the commentary line, but the player stayed on the pitch for the rest of the match — the team never went down to ten. Now he comes off, and if he's yours the match pauses and hands you the decision, the same way an injury does: reorganise by withdrawing someone for a substitute, or play on with ten. Losing your goalkeeper is called out separately, since that one really does need a keeper bringing on. AI sides reorganise themselves — bench keeper on if their own keeper walks, otherwise they see it out a man down — and never pause your match to do it.
v1.46.4 Fixed the intermittent 'Internal Server Error' on ordinary actions like changing formation or picking a squad
- Found the actual driver of live 'database is locked' 500s (a known risk already documented in code, but still happening): the presence tracker that stamps 'last seen' for the Saves screen's online badge was writing to the database on every single page view from every logged-in user, not just meaningful actions — competing for SQLite's one write-lock-at-a-time against real actions like setting a formation or assigning a squad slot, which could lose that race and fail outright. Throttled it to once a minute per session (still plenty fresh for an 'online now' badge), and raised how long a genuine write now waits its turn before giving up (5s to 15s) as a second line of defense. Verified directly: an immediate second page view no longer re-triggers the write at all.
v1.46.3 Flash messages (loan offers, transfer results, etc.) are now a floating toast, not a scroll-up-to-see banner
- Reported: after an action like a loan request, the result message ('Mainz 05 weren't willing to loan out Christian Hoffmann.') only appeared at the very top of the page, invisible unless you happened to scroll up. It's now a fixed toast pinned to the top of the viewport regardless of scroll position, with its own close button, so it stays put until you dismiss it rather than only living at the top of the document flow.
v1.46.2 Position filters on Free Agents, Transfer List and Loans no longer hide empty positions
- Reported: GK wasn't listed as a position to search under Free Agents. Confirmed it's not a filtering bug — that save genuinely has zero free-agent goalkeepers right now — but the filter itself was wrong to hide the option entirely just because nothing currently matches. These three pages search the whole world's pool across every club, not your own fixed roster, so you should be able to deliberately search a position and see 'no players match this filter' rather than the option vanishing without explanation. Free Agents, Transfer List and Loans now always list every position; the Squad, Academy and browse-another-club filters are unchanged, since those really are fixed rosters where an absent position is itself useful information.
v1.46.1 Captains now lead through bravery and work rate too, and a World Cup crash is fixed
- The captaincy bonus previously ran on leadership and 'big game' temperament alone. Added two more standalone factors: bravery, for leading by example in the physical moments a self-preserving player would shy away from (a calm, brave centre-back is a different, equally valid captain archetype from a fiery one); and work rate, for leading by example through effort (the hard-working honest pro vs. the gifted-but-languid one). Verified on real captains and a controlled same-player test: bravery/work rate at the max add roughly +5 more to the bonus than at the minimum, holding everything else fixed.
- Fixed a crash that could freeze an in-progress World Cup or Euros save on 'Ready': a handful of qualifying-group fixtures that never got picked up in their own week (now self-healed by the day-stepper's 'or before' sweep once the tournament had already moved on to its knockout stage) were being mistaken for knockout ties with no round to advance from. The bracket-progression check now only ever looks at genuine knockout fixtures for that judgement; the stale group fixtures still get quietly played off in the background, same as any other overdue result. Reproduced the exact crash against a live save, fixed it, then replayed 400 steps of that save's calendar with zero crashes, and separately proved a real knockout round (Round of 16 into Quarter-Finals) still advances correctly.
v1.46.0 Loans now weigh what the player wants, not just what his club will allow
- Traced the reported 'Show interested players only' emptiness to its actual cause: at a cash-strapped lower-division club, youth wages used to share the exact same budget as the first team (fixed two versions ago), so the combined bill could already exceed the whole wage budget from squad composition alone — meaning literally every loan candidate failed the affordability check before anything else was even considered. Confirmed directly against a live save: one division 4 club's old combined bill (£25k) already exceeded its £22k budget, which would have emptied this list regardless of who was on it. Already fixed by the earlier budget split; both live saves now show hundreds of genuinely interested players.
- On top of that, built what was actually asked for: a loan now depends on three independent things lining up, not just the parent club's willingness to release. The player himself now has a say — how hungry he is for first-team football (buried in his own squad's pecking order, or a youth prospect, versus a settled regular) and how much he's personally willing to swallow a step down in level to get it. A club's own institutional reluctance about a big status drop is unchanged and still does the heavy lifting on unrealistic mismatches; the player's OWN reluctance is separate and softens a lot for someone genuinely desperate for games, exactly like a real player in that position.
- Verified directly: the same seller's first-team regular (hunger 0.10) comes out far less willing to join a lower-division loan club than their own buried fringe player (hunger 0.85, willingness 0.90) — previously identical from the player's side, since nothing modelled the player's own view at all. A human requesting a loan from an AI club, or an AI club approaching a player, can now fail specifically because the PLAYER isn't interested, with its own distinct message, separate from the club saying no.
v1.45.2 Picking an unsuitable captain now actually costs you, not just discouraged from being auto-picked
- Last version stopped the game auto-picking a teenager as captain — but a manager who named one anyway (nothing stops that, and nothing should) got exactly the same morale bonus as if they'd picked a proven veteran with identical attributes. The armband's actual in-match effect never looked at age or experience at all.
- It does now, using the same age-appropriateness judgement the auto-pick already uses. Below the age a real dressing room would actually respect, part of the shortfall comes off the bonus and part becomes an active penalty on top — verified directly: the same real player with a maxed-out Leadership of 20/20 produces +4.4 to morale at 28 years old, and -3.2 at 17. A mediocre 30-year-old with a below-average Leadership of 10 still beats a 17-year-old with a perfect 20 (-0.45 against -3.16). Leadership alone was never supposed to be enough to make a teenager a credible captain, and now it genuinely isn't.
v1.45.1 No more teenage captains — the armband now weighs age and experience, not just raw leadership
- A good question surfaced a real gap: the automatic captain pick ranked purely by the Leadership attribute, with nothing at all accounting for age or experience. Checked both live saves directly — each had a 19-year-old captain, picked only because their independently-rolled Leadership happened to edge out a 24-28 year old on the very same squad by a point or two. Real captaincy tracks standing in the dressing room as much as raw personality; a teenager essentially never gets the armband at professional level regardless of how natural a leader he is.
- The automatic pick (used whenever a captaincy is vacant — a retirement, a sale, or simply never set) now weighs Leadership by age-appropriateness: rare and heavily discounted under 21, rising through the early-to-mid 20s, full weight from the mid-20s through mid-30s where the large majority of real club captains actually sit, and still highly credible for an experienced pro into his late 30s. A manager's own deliberate pick for their own club is completely unaffected — this only changes what the automatic fallback reaches for, never what you can choose yourself.
- Both live saves' existing captains were already wrong under the old, age-blind logic, so they've been corrected: a 19-year-old captain in each case has been replaced with a 28-year-old and a 25-year-old respectively, picked the same way any newly-vacated captaincy already gets filled.
v1.45.0 The academy now has its own wage budget, separate from the first team
- Youth wages were drawn from the exact same pool as first-team wages, and a normal-sized ~22-player academy costs roughly the same regardless of division — while wage_budget itself is exponential in reputation. Checked the actual numbers: for an average League One or Two club, the academy's wages plus the senior squad's already exceeded the entire wage budget from squad composition alone, before a single new contract was ever offered or a single youth player bought in.
- The academy now draws from its own separate pool (a new Academy Wage Budget, shown on the Youth Academy and Youth Transfers pages, in the same style as the existing wage-budget breakdown on Contracts). It's a flatter curve than the first-team budget — a real academy scholarship is fairly bounded even at the biggest clubs, nowhere near the 200-300x gap real first-team wage bills span top to bottom — and it's a genuinely separate pot, not carved out of the existing one, so this doesn't shrink anyone's first-team spending power.
- Signing an academy prospect from another club now checks it, the same way every other signing already checks the budget it draws from. Verified directly: an average League One or Two club that was already over its combined budget from squad composition alone is now clear on the senior side in the large majority of cases, and the academy has real, visible headroom of its own.
v1.44.1 Leadership, work rate and bravery weren't supposed to scale with division either
- Checked every attribute for the same bug the pace fix addressed, prompted by a good question: can a Division 2 player have strong leadership? Currently, no — of the 14 'Mental' attributes, seven are temperament and effort rather than skill (aggression, bravery, flair, important_matches, leadership, versatility, work_rate), and every one of them showed the identical ~8.5-point gap between the top and bottom division that pace did before that fix, despite none of them being a fitness or skill attribute. A League Two captain averaged leadership 4.0 out of 20 against the Premier League's 12.4, purely because of the club he played for.
- Those seven now barely track a club's level, the same treatment pace got — a lower-league dressing room has just as many genuine leaders, hard workers and brave defenders as a top-flight one. Anticipation, decisions, movement, positioning and vision are left exactly as they were: reading the game and making the right decision under pressure are real footballing ability that a higher standard of coaching and teammates does develop, the same way technique does, so those are correctly still part of what separates the divisions.
- Aggression and bravery both feed the cached tackling and goalkeeping summary scores (alongside the attributes that actually define them), so those have been rebuilt everywhere a player has one. Verified the match engine's own calibration from last version is untouched by this — goals per game and shot accuracy across all four divisions came out within noise of where they landed before.
v1.44.0 Match engine recalibrated against real football — and a bug that made some clubs unable to concede
- The headline find: a club with no available goalkeeper (all of them injured, suspended or out on loan, with an outfielder auto-filling the slot) could not concede a goal from open play AT ALL. All three shot paths gave up on the possession entirely if they couldn't find a natural keeper in the defending eleven, so every chance against that club was silently thrown away. It was live in your save: 16 of 394 clubs were fielding an eleven with no recognised goalkeeper, Liverpool among them — 217 chances created against them across 200 simulated matches produced literally zero shots. There's now an emergency keeper between the posts, which is what really happens.
- The lower divisions were sterile for a reason nobody would have guessed from looking at shooting: those squads were permanently exhausted. Stamina and natural fitness scaled with club quality like everything else, so a League Two side recovered about 19 fatigue a week while gaining 26 a match — mean stored fatigue of 68.5 against the Premier League's 22.7, which dragged down every duel they contested. Weekly recovery is rebalanced so every level is net-positive on a normal week's football while a player used twice a week still tires, and the corrupted fatigue carried in your save has been scaled back.
- The engine's own numbers are now tuned against real football rather than left where they landed: about 25 shots across both sides, a third of them on target, a third of those scored. It was producing 37 shots at 28% accuracy. Shot accuracy is also judged against the defender closing you down instead of a fixed difficulty — that fixed bar was the one absolute measure in an engine where everything else is relative, so two weak teams cancelled out everywhere except in front of goal.
- Big mismatches no longer run away to cricket scores. The three stages of a chance all read the same skill gap, so a large one compounded three times over — your own save contained results like 23-0, 22-0 and 20-0. Large gaps now saturate rather than paying linearly forever (a normal difference is untouched: a gap of 4 still counts as 3.7), and a heavy underdog now scores occasionally instead of never.
- Measured across 1,600 simulated matches either side of the change: goals per game 3.31 -> 2.81 (real football 2.70), goalless draws 11.9% -> 6.4% (real ~8%), matches with 8 or more goals 7.8% -> 1.1%, and the worst scoreline 24 goals -> 12. All four divisions now land in a realistic band and, for the first time, in the same one as each other — League Two football is no longer a different, far more sterile sport than the Premier League.
v1.43.0 Lower-league players are quick now — pace stopped being what separates the divisions
- Every one of the 41 attributes was generated from a single centre based on the club's level, so a club's standing moved all of them by exactly the same proportion. That made PACE the headline difference between divisions — League Two averaged 4.7 against the Premier League's 13.5, and the fastest player in a whole 24-club division only reached 16 out of 20. That isn't what separates the levels: lower-league football is full of genuinely quick, strong, fit athletes who lack the technique and the decision-making, not the legs.
- Physical attributes (pace, acceleration, strength, stamina, jumping, agility, balance) now barely track a club's level at all. Technique, finishing, passing and decisions are deliberately left exactly as they were, so a lower-league player still falls short in precisely the areas he fell short in before — he just isn't slow as well. League Two's quickest players now reach 19-20 pace, the same ceiling as the top flight, while their technique sits at 2-8.
- Two more things came out of the same root cause. A top-flight squad was three times more injury-prone and three times dirtier than a bottom-division one (12.4 against 4.0 on both) purely because those scale with club quality too — and both drive real injury and red-card rolls. They're now a genuine per-player trait at every level. And PACE was read by the squad-picker, your players' overall ratings and their valuations, but by no part of the match engine whatsoever: being fast literally did not help you win a match. It now decides running in behind and a defender's recovery, balanced on both sides so quick attacker against quick defender still cancels out.
- CONSISTENCY was generated for every player and never read by the match engine either — it only nudged post-match morale. It now decides how close to his own level a player actually turns up on the day, which is the real scouting difference between the divisions: a lower-league player can absolutely produce a moment an elite one would be proud of, he just can't do it on demand week after week.
- Your career in progress has been brought onto the new model automatically, and deliberately without moving anything else: only the physical attributes were redistributed, anchored on each player's own level rather than his club's reputation (a relegated squad is far better than its new reputation implies). Measured across all four divisions and three separate samples either side of the change, goals per game and goalless-draw rates were unchanged — so your table, your results and your valuations all stand exactly as they were.
v1.42.11 Recall a loan early, or send one out for the rest of the season
- There was no way to end a loan before its agreed return date — a parent club was stuck waiting it out even if the arrangement stopped making sense. The Loans page now has a Recall button on each of your own players out on loan elsewhere (only the parent club can do this — the borrowing club agreed to the loan as it stood).
- Both loan-request forms (the Loan Market page and a player's own Loan tab) now offer 'Rest of season' alongside the fixed 4/8/16-week lengths, running until this save's real season boundary instead of a manager having to guess and re-request partway through.
- The Bayern Munich loan to Sutton United from before yesterday's reputation-gap fix has been recalled — verified directly, the player is back at Bayern Munich and the loan record is closed out properly.
v1.42.10 Loans now respect reputation gaps, same as permanent transfers already do
- The transfer system has always refused to let a Premier League regular join a League Two club just because the fee was generous — nothing equivalent existed for loans. A parent club's reputation played no part in whether a loan happened at all, so a continental giant could send a player to the English lower leagues on loan as readily as a club one division up could. Confirmed as a real, live case: a brand new save had a Bayern Munich player join Sutton United on loan immediately, an 83-point reputation gap.
- Loans now carry the same realism guard transfers already use, just more forgiving (a real academy loan routinely crosses a couple of divisions, further than a permanent sale would) — a gap under 35 reputation points is unaffected, and it only ever gets vanishingly rare beyond that rather than hitting a hard wall. Applies everywhere a loan can happen: the Loan Market's own listings, a human requesting to borrow an AI club's player, and the AI's own background loan-seeking. Verified directly against live data: a normal 20-point gap loan is completely unaffected (identical acceptance rate with or without the fix), while the exact Bayern-to-League-Two scenario drops from routine to about a 5% chance and no longer even appears on the Loan Market's browse list for a club that outclassed.
v1.42.9 Transfer and loan lists are stocked before your very first click
- The Free Agents, Transfer List and Loan Market pages were all genuinely empty until the first weekly housekeeping cycle ran — nothing populates them except the AI's ongoing weekly review of its own squad. There was already a one-time seeder for this (_seed_initial_transfer_market), written specifically to solve it, but it was only ever wired into one of the game's five save-creation modes (the English pyramid) — every other mode, including Real Clubs (the default), still started with all three pages blank.
- Now wired into all five creation modes, and extended to seed the Loan Market too (it previously only seeded Transfers and Free Agents) — using the exact same surplus-player and loan-eligibility judgement the weekly AI review already uses, just run once at creation. Combined with last version's slower preseason pacing, a new save now actually has both the time and the content to do transfer and loan business before the season starts. Verified directly: all three pages carry real, clickable players immediately after creation, before a single Continue click, across all five creation modes.
v1.42.8 Preseason no longer skips straight past the transfer window
- A new save's Continue button was jumping 14-20 real days per click through preseason — a friendly never stops the clock, and a brand-new save has no news yet either, so nothing else pumped the brakes until the season's first competitive fixture, weeks later. A fresh save's very first click could cover 20 days by itself, and the whole preseason went by in as few as 3 clicks, leaving no real opening to use the transfer or loan windows.
- Preseason now paces at 4 days per click — enough clicks to actually visit Transfers, Loans and Tactics before your first match, matching how the close season plays in real football management games. This only applies before a save's season has actually started; verified directly that an existing, established save's ability to clear a large fixture backlog in one long click is completely unaffected.
v1.42.7 Calendar clear-out: wrong fixture dates fixed, and two crashes found before you hit them
- Fixture dates shown around the game were being worked out from the old week number instead of the date the match is actually on, so every Saturday league game displayed as the Sunday before it — up to six days wrong. The Dashboard's upcoming fixtures, match reports, a player's recent matches, the youth fixture list and a manager's biggest win/loss all now show the real date. The Dashboard was also ordering upcoming fixtures by week, which couldn't tell apart two games in the same week, so a Tuesday European tie and a Saturday league game could appear in either order.
- Fixed a crash that took the Europe page down completely: the stored European competition state holds a different shape in each phase, and the page was reading all of them as if they were group tables.
- Found and fixed two crashes waiting further ahead in the season, both by simulating a full season forward rather than waiting for them to happen: European knockout rounds (from the Round of 16 onward) and international tournament finals would both have failed outright. Same underlying slip as the qualifying-round crash fixed in v1.42.1, in two more places; the whole codebase has now been checked for it and is clean.
- Removed around 770 lines of code left behind by the move from a weekly turn to a real calendar — the one-time save migrations, the old week-slot fixture scheduler, the pre-duel match engine's team-average helpers and the superseded international resolver. Nothing that still opens an older save was touched. No gameplay change; verified by simulating a season, playing a full live match, creating a fresh save from scratch and loading every page in the game.
v1.42.6 Player names are nationality-aware now, not one flat pool for the whole world
- Every generated player's name came from one shared pool — 30 first names and 27 surnames total, for every nationality in the game combined. In a single club's ~20-player squad, a repeated surname was the expected outcome, not bad luck, and a Japanese player could just as easily be named 'Marcus Kovacic' as anything Japanese.
- New players now draw from real name pools for their actual nationality — dedicated lists for the 21 nations the game already weights heaviest (England, Brazil, France, Japan, Nigeria, and so on), with the rest sharing a same-confederation pool instead of one global list. Verified directly against realistic squad generation (proper domestic-share mix, not a synthetic worst case): average surname duplicates per fresh 20-player squad dropped from what the flat pool was producing down to about 1 per squad, roughly the rate real football actually sees. Existing players keep the names they already have — this only affects players generated from here on.
v1.42.5 Fixed a fourth, different way the game could get stuck on Ready
- Marking yourself ready advances the game in that same click when there's nobody else to wait for — but if that one request got interrupted (a dropped connection, anything short of it finishing cleanly), the Ready flag was left set with no button to retry: the gamebar always hid its own Continue button the moment you were marked ready, trusting that state to mean everything had already been handled. For a solo save, with no other manager to ever flip it back, that was a genuine dead end.
- The button now only stays hidden when there's an actual other manager in the save who isn't ready yet — everyone else always gets a working button, and clicking it safely retries the same advance. This is a different root cause from each of the three earlier stuck-Ready fixes this session, not a repeat of any of them. Verified directly by reproducing the exact stuck state and confirming the retry click advances cleanly, and that a genuine two-manager save still shows the correct waiting message.
v1.42.4 Transfers & Scouting now share one tab bar
- The sidebar has always treated Transfers, Free Agents, Transfer List, Loans, Youth Transfers, Scouting and Shortlist as one section, but the pages themselves didn't agree — Transfers only linked to Free Agents/Transfer List/Loans, and Scouting/Youth Transfers/Shortlist were only reachable from the Dashboard's unrelated, much longer subnav list.
- All seven pages now share the same tab bar (same pattern already used on Contracts and a player's own page), so you can jump straight between any of them from wherever you are. Verified directly: every page highlights the correct tab and none of the old links broke.
v1.42.3 Scouting page redesigned — no more hunting for the assign controls
- Sending a scout out was buried in the 6th column of a wide table (Scout, Judging Ability, Judging Potential, Assignment, Weeks Left, Dispatch) that only reached its assign form by scrolling right — easy to miss entirely, especially on a phone. And a club with no scouts hired yet just saw an empty table with no explanation.
- Each scout now gets their own clearly labelled card with a Send to Region / Duration form right there, no scrolling needed — and a club with no scouts hired shows a direct link to the Staff page instead of a blank table. Verified against live data: both live clubs' existing idle scouts render correctly, dispatching one still works exactly as before, and the no-scouts case now explains itself.
v1.42.2 Contract offer form now has actual labels
- The new Offer New Terms form on a player's Contract tab had no visible field labels — just a row of bare boxes relying on hover tooltips, which collapsed into an unreadable stack of unlabeled numbers on mobile (one input even looked like a stray button).
- Every field now has a plain label (Weekly Wage, Contract Length, Appearance Fee, Goal/Assist/Clean Sheet Bonus, Release Clause) stacked in a single clear column, matching the labelled-field style already used on the new game and manager profile forms.
v1.42.1 Fixed a crash on European qualifying tiebreaks (another stuck-Ready cause)
- Found the real cause of the Internal Server Error that came back after the Contract tab update: unrelated to that change, a European qualifying tie going to a tiebreaker (aggregate scores level after both legs) crashed with an UnboundLocalError — a local import inside the tiebreak function was written after the line that needed it, so Python treated the module name as unset at the point it was actually used. This is a different root cause from the two earlier stuck-on-Ready bugs, not a repeat of either.
- Every request that hit this crash left the Ready flag stuck at 1 (same failure shape as before — the flag is only ever reset once the whole day-by-day advance finishes cleanly), and because it kept getting retried, it eventually held the live database locked for everyone, including unrelated logins. Fixed, checked the rest of the calendar code for the same mistake (found none), and confirmed directly against live data: the exact qualifying tie that was crashing now resolves cleanly and the affected save unstuck itself immediately after the fix went live.
v1.42.0 Every player now has their own Contract tab
- A player's wage now shows right on their own page, and there's a new Contract tab alongside Profile, Injuries, Transfer, Loan and History showing wage, every bonus clause, contract length and release clause in one place.
- Negotiating a new deal (and releasing a player from their contract) has moved from the club-wide Contracts list onto each player's own Contract tab — the Contracts page still gives you the whole squad's wages and your budget headroom at a glance, but making an offer now happens on the player you're actually looking at. Verified end-to-end against live data: an in-budget offer was accepted and updated wage/years/bonuses correctly, an over-budget offer was rejected exactly as before, and releasing a player still frees them to the transfer market the same way.
v1.41.5 Wage budget now shows what you've actually got left
- Contract renewals were being rejected as over budget with no way to see why — the club page only ever showed the flat weekly wage budget, never what was already committed to existing deals.
- The Dashboard and Contracts pages now both show your committed wage bill alongside the budget, plus how much is actually left to spend (or how far over you are, in red, with a note on what it'll take to fix it). Verified against both live clubs directly: Chelsea has £129k/wk of headroom, Walsall is £10k/wk over — matching the real numbers the renewal check itself uses.
v1.41.4 Continue now skips through leagues you don't play in properly
- Found while helping with a heavily backlogged save: the Continue button was stopping on every single piece of news anywhere in the world — a foreign domestic cup final, an academy transfer between two clubs you'll never play against — even though none of it had anything to do with your own club. On a save with lots of leagues still catching up, that meant a click barely moved the clock before stopping again.
- Continue now only stops for news about your own club — every one of those was already posted that way (transfer offers, injuries, your own promotion or relegation, all still stop it exactly as before). Verified directly: one click on the affected save now advances 20 real days and plays out 113 fixtures in a single go, instead of stopping after the first unrelated headline.
v1.41.3 Fixed a season-rollover bug before it could actually happen
- Found while investigating a heavily backlogged save: if a season runs long enough to overrun the following season's own real kickoff date, the game would have generated that next season with fixtures already months in the past the moment they were created — every one of them instantly "due" at once. Confirmed directly this would have hit one save for real, with an August kickoff already 225 days behind the clock by the time its season was due to finish.
- The game now walks forward to whichever season's real kickoff is still genuinely ahead of the clock, even if that means skipping a season label entirely for a save whose backlog was that severe — the same thing real football would do rather than schedule a kickoff in the past. Verified directly against the affected save's own numbers.
v1.41.2 Fixed: gamebar stuck on "Ready" again, a different cause this time
- A genuinely different bug from the last stuck-Ready fix. Every domestic cup's saved round schedule from before the real-calendar rebuild was still in the old week-numbered shape; the first time a cup needed to draw its next round from one, the game crashed outright — and because your "ready" flag is saved before the advance even starts, that left it stuck on Ready with the crash repeating on every click. Old schedules are now upgraded automatically, and the affected save has been unstuck.
v1.41.1 Fixed: transfer windows could stop opening on a heavily backlogged save
- Whether a transfer window was open used to be worked out as a fraction of how long the season was expected to run — which broke if a season's actual remaining fixtures ran longer than that (a save with a big fixture backlog can genuinely do this). Confirmed directly: on one save, the next January transfer window would never have opened at all. Windows are now checked against the real calendar date instead — opening with preseason and closing 1 September for summer, 1 January to 1 February for winter — regardless of how long any one season runs.
v1.41.0 Release a player from their contract
- The Player page now has a Release from Contract option for your own senior players. Real football requires a club to pay out the remaining value of a contract it ends early (FIFA's own rule for this — researched, not invented) — so releasing someone with time left on their deal costs real compensation out of your transfer budget, shown upfront before you confirm, and you can't go through with it if you can't afford it.
- A confirmation step shows the exact cost and asks you to confirm before anything happens — this can't be undone by accident.
v1.40.1 Fixed: gamebar could get stuck on "Ready" with no way to continue
- If a live match happened to be the last fixture left in its week, finishing it could leave the gamebar showing "Ready ✅" forever with no button to click. A leftover code path from before the calendar rebuild was running end-of-week processing directly instead of through the new day-by-day advancer, and never reset the ready flag afterwards. Fixed, and the one live save this had already happened to has been unstuck.
v1.40.0 A real football calendar — midweek games, international breaks, and four new competitions
- Seasons now run August to May like real football, instead of taking 12–14 months. The old calendar could only fit one match per club per week, so every competition had to be laid end to end — which is why August kept drifting later every season, and why the smaller European leagues were running a full year out of step with England.
- Real midweek football. A 46-game EFL season genuinely can't fit into weekends alone, so it doesn't: Saturday rounds with Tuesday nights where the fixture list needs them. The Premier League comes out at 33 weekend rounds and 5 midweek ones — exactly the real 2026-27 split. Boxing Day and New Year's Day fixtures are in, and no club is ever asked to play twice in three days.
- International breaks actually pause club football, in the real FIFA windows (September and October are now one longer window, as they are from 2026). World Cups and Euros land in June and July of the right years. The Champions League is played on real midweek nights through the season instead of being a block of weeks before it started.
- Four competitions that were missing are now in: the EFL Cup, the EFL Trophy (all 48 League One and Two clubs in 16 regional groups, staying regional right up to the Wembley final), the promotion PLAY-OFFS, and the Community Shield.
- A note on the EFL Trophy: the real competition also invites 16 Premier League and Championship ACADEMY sides. That was built first and then taken out, because this game's academies aren't reliably whole teams — one was found holding exactly eleven players with no goalkeeper among them, so it lined up with an outfielder in goal. Results swung between 16-0 wins and 7-0 defeats depending purely on who happened to be in the academy that season rather than how good they were. The invited sides can come back once academies are guaranteed to be full squads.
- Fixed a real bug found while testing that competition, which was also affecting the youth league: an academy XI was picked into a 4-4-2 but never recorded which slot each player was filling, so the match engine had no idea what shape the team was in.
- Promotion and relegation now use the real rules instead of "top three up" everywhere: two go up automatically from the Championship and League One, three from League Two, and the last place in each is decided by the play-offs. Going down it's 3/3/4/2.
- Your saves keep every result. Both were mid-season, so the fixtures already played stay exactly as they were — only what hadn't happened yet moved onto the real calendar. All 44 league tables were checked as identical before and after.
- Fixtures are now shown by real date with the day of the week, there's a new season-calendar page, and your fixture list shows every competition together in date order.
v1.39.0 The calendar now runs day by day (groundwork for real fixtures)
- The game's clock is a real date now, not a week counter, and it advances a day at a time — stopping at your next fixture or at news that needs you, playing out everything in between automatically. The gamebar shows the date, and the button tells you where it's taking you ("Continue to Sat 12 Sep").
- Everything measured in weeks — injuries, suspensions, contracts, scouting, morale — carries on working exactly as before: week numbers are now worked out from the date rather than being the clock themselves. Nothing about your saves' fixtures or results has moved.
- Made the game a lot faster while doing it. The most common lookups in the whole game (a club's squad, a player's attributes, a club's lineup) had no database index at all and were scanning every player in the save, every time — one week of end-of-week processing was making ~31,000 queries and spending 14 of its 16 seconds inside the database. With the indexes added it's 3.7s on one save and 8.9s on the other, down from 16.0s and 19.9s.
- This is the foundation for real midweek fixtures, international breaks and the missing competitions — none of which a one-match-per-week calendar could represent.
v1.38.1 Fixed: couldn't advance with a loaned-in player picked in the Starting XI
- "Team not picked — fix before advancing" could show even with every slot filled, if any of them was a player you'd loaned in — the readiness check still only recognised your own contracted players, the same bug class as the earlier loan-assignment fix, just in a different place it hadn't been caught yet. Fixed — a loaned-in player in your XI is now correctly recognised as picked.
v1.38.0 See why a player is happy or unhappy, plus two new real morale drivers
- The Player page now explains what's actually driving a player's morale — playing time, team form, whether they're paid roughly what the market would suggest, the captain's influence, and (for a human-managed club) confidence in the manager — shown for your own players on the Profile tab.
- Two new, genuine morale drivers, on top of the ones above: signing a new contract now gives a real, if temporary, morale lift (feeling valued/secure), and the club landing a genuine marquee signing — someone clearly above the squad's own level — lifts the whole dressing room's mood for a few weeks (a real show of ambition). Both fade back to normal over time rather than being a permanent shift, and both show up in the new explanation when active.
v1.37.0 New Reserves page
- Added a Reserves tab next to Squad & Tactics and Youth Academy — a dedicated view of who's currently outside the Starting XI and Bench, with the same Assignment dropdown the Squad page uses to move anyone into reserves, or bring a reserve back onto the bench or into the XI.
v1.36.6 Fixed: couldn't actually pick a player you'd loaned in; loans now mixed-age
- A player you'd borrowed on loan showed no way to assign them to your Starting XI or bench on the Squad page — a genuine bug (the squad page, and the assignment itself under the hood, were both still checking who their PARENT club was rather than who they're actually playing for). Fixed — a loaned-in player can now be picked like anyone else in your squad.
- The loan market was young-players-only (youth or under-23). AI clubs now also loan out genuinely fringe senior players who aren't getting regular minutes, and actively look to borrow them too — same real-world pattern as the young-prospect loans already had, just not limited to age anymore.
v1.36.5 Pages stay where you were after a filter or action, instead of jumping to the top
- Flipping a filter (Position, Show Key Attributes, Show interested players only...) or submitting an action further down a long page — Transfer List, Squad, Player Stats and others — used to reload at the very top every time. The page now stays scrolled to roughly where you were, site-wide.
v1.36.4 Clearer queued substitutions, and pending subs greyed out in Player Stats
- Queued substitutions on the live match and Player Stats screens now show in their own highlighted box with a Pending tag and OFF/ON labels, instead of a plain line of text.
- On the live Player Stats page, a player who's queued to come off is now greyed out with a "Sub Pending" tag right in the On Pitch table, so it's obvious at a glance without checking the queued-subs list separately.
v1.36.3 "Show interested players only" added to Free Agents and Loan Market
- The Transfer List's interest filter is now phrased positively — "Show interested players only" instead of "Hide players unlikely to join" — same filter, clearer wording.
- Free Agents and the Loan Market now have the same filter: it checks whether signing (or borrowing, for a loan — the loan club pays the player's existing wage) would actually fit your club's wage budget, the same real check the game itself makes at signing time.
v1.36.2 Loan market gets the same filters as the Transfer List
- The Loan Market now has a Position filter and a Show Key Attributes option, matching the Transfer List page — previously it was just one unfiltered table.
v1.36.1 Faster end-of-week processing when your live match is the last one to finish
- When your live match was the last fixture of the week, reaching full time used to trigger the whole week's AI/economy processing (training, scouting, transfers, morale) synchronously before the page could respond — a real, measured 24-second wait on the busiest save. Found two genuine duplicate calculations inside the weekly morale update (recomputing the same club's starting XI and squad list a second time for no reason) and removed them — same result every time, confirmed identical output, now around 30% faster.
v1.36.0 Live-match substitutions: queue more than one, cancel clearly, subs off grouped separately
- You can now queue more than one substitution at a time for your side before the match continues, instead of a second one silently overwriting the first.
- Both the live match screen and the Player Stats screen now show every substitution you've currently got queued, each with its own Cancel button, before the match moves on.
- The live Player Stats table now separates players still on the pitch from those already substituted off into their own section, instead of mixing them in one list.
v1.35.2 Loan listing moved to each player's own page
- Listing a player for loan is no longer a big table on the Loans page — it's now a Loan tab on the player's own page, right next to Transfer, matching exactly how transfer-listing already works there. The Loans page itself now just points you to it.
- Viewing another club's loan-listed player also gets a quick Request Loan option right on their page, same as the Transfer tab already lets you make an offer directly from a transfer-listed player's page.
v1.35.1 Removed the club nav from the PIN entry screen
- The PIN-protected save unlock screen (and the save-delete confirmation screen) was showing the full club sidebar and gamebar — including a working "Play Match"/"Continue" button — above the PIN box, even though nothing about the save should be visible or actionable until the PIN is entered. Removed; both screens now show just their own plain content.
v1.35.0 Loans now work by listing, not proposing to one club
- Sending a player out on loan no longer means picking one specific destination club — instead, list them as available (mirroring how the Transfer List already works for permanent moves) and other clubs, human or AI, can approach you to borrow them. Accept or reject the resulting offer the same way as any other pending loan.
- The Loan Market browse page now only shows players other clubs have actually listed for loan, instead of literally every eligible player in the save.
- AI clubs now proactively list their own young/fringe players for loan (mirroring how they already do this for the transfer list), and proactively approach loan-listed players at human clubs too, not just each other — both were confirmed gaps: the AI loan logic's own docstring already claimed AI clubs "consider loaning out their own young/fringe players", but no code actually did that, and AI interest in borrowing a player explicitly skipped human clubs entirely. A human's un-listed players remain completely off-limits to these background AI approaches, same as before.
v1.34.1 Loans button added to the Transfers page
- The Loans page (browse and borrow players out on loan from other clubs) was only ever reachable from the Dashboard's own quick-links — nothing on the Transfers & Scouting page itself pointed to it. Added a Loans button there alongside Free Agents and Transfer List.
- Also checked: loans were already correctly unrestricted by the transfer window (verified directly — a real loan action goes through normally even with the window closed), unlike permanent transfers. Added a line to the closed-window message on the Transfers page making that explicit, since it wasn't obvious just from the page itself.
v1.34.0 Club finances recalibrated against real research, every league
- Extended the League Two research-backed finance fix (v1.33.1/v1.33.2) to every league in the game. Real anchors: a weak League Two club (~£10k transfer budget), Walsall's own £150k (unchanged from the last fix), several real bottom-of-table Belgian Pro League/Scottish Premiership/Austrian Bundesliga/Swiss Super League clubs (£0 — these got zero discount before this fix despite being at a similarly weak level), and Bundesliga's Hoffenheim (£6.5M) — which lines up almost exactly with what the game's own formula already produced there, confirming the discount only needed to reach a bit further than League Two, not the whole pyramid.
- Also found and fixed a separate, previously-unverified issue: elite clubs' WAGE budgets were roughly double real figures — Manchester City's real 2023-24 wage bill is ~£3.7M/week, Bayern Munich's ~£3.8M/week, against the game's ~£7.5M/week for a club of that reputation. Fixed with a discount that only kicks in for genuinely elite reputation — every other league's wages were already close to real figures and are untouched.
- Ukrainian Premier League gets an additional, explicitly-flagged discount reflecting the real, severe disruption to Ukrainian club finances from the ongoing war — research found no usable financial figures for this league at all, unlike every other one, so this is a deliberate judgment call rather than a researched number.
- Deliberately did NOT try to model a few other real single-country quirks the research turned up (Turkish Süper Lig's top two clubs being genuine debt-funded outliers; Scotland's Celtic/Rangers-vs-the-rest two-tier league; Danish Superliga's unusually strong transfer culture for its level) — the existing reputation-based scaling already gives a stronger club proportionally more, and building one-off multipliers for a handful of countries on inconsistent data risked introducing new problems I couldn't easily verify.
- Applied immediately to both live saves.
v1.33.2 Lower-league transfer budgets recalibrated against real research
- The previous pass at this (v1.33.1) still wasn't steep enough — checked against real researched League Two figures this time (Football Manager's own researched starting transfer budgets, a reasonable proxy given clubs don't publish this directly): most League Two clubs sit at literally £0-50k, with only a handful of better-funded ones reaching £100k-250k. Real Walsall specifically sits at £150k — v1.33.1 still had it at £296k, getting on for double. Refitted the discount curve directly against that £150k anchor and a weaker club's real ~£10k figure, rather than guessing again.
- Also checked Walsall's real reported wage bill (Capology) against the existing wage formula — already landing close to the real figure, so wages weren't touched again.
- Applied immediately to both live saves: Walsall's transfer budget is now £183k (Test) and £46k (Career 1), reflecting each save's different reputation at this point.
v1.33.1 Lower-league clubs are genuinely poor now, not just cheaper
- A weak club's transfer budget was still landing well above what a real club at that level actually has to spend — confirmed directly: reputation-22 Walsall sat at a £697k transfer kitty, when a real League Two club overwhelmingly survives on scouting, free transfers and loans instead. Added a genuine "poverty" scaling on top of the existing budget formula, specifically for the bottom of the pyramid (fading out completely by League One) — Championship and Premier League finances are untouched, only the transfer budget changed (wages weren't the complaint), and it applies to every club at that level, not just English ones.
- Applied immediately to both live saves — Walsall's transfer budget dropped from £697k to £296k (Test save) and £101k (Career 1) to match the two saves' different reputations at that point.
v1.33.0 Reputation trend graphs — click a reputation number to see it over time
- Manager Reputation and Club Reputation on the Managers page (and a club's Reputation on its own page) now expand into a line graph of that number's history when clicked — no page reload, just tap the stat box. Every club's reputation is now tracked weekly (not just your own), so this works when looking at any other club too.
- Nothing existed to reconstruct here — history starts counting from this update, so a long-running save will show a short trend at first and build up a real one over time, same as any other tracking that couldn't be applied retroactively.
- Built as a small reusable piece internally, so the same click-to-see-a-trend treatment can be added to other numbers later (league position through a season, club finances, squad value) without redoing this from scratch.
v1.32.1 Club News no longer shows every match result in the save
- Club News on the dashboard was including every AI-vs-AI match report across every league in the save (French, Italian, whatever else is running), not just things actually about your own club — these were always broadcast/world news items, not genuinely club-specific ones. Now scoped strictly to news about your own club: injuries, job approaches, transfer/loan activity involving you, and similar.
v1.32.0 Merged the two week-advance buttons into one
- "I'm Ready — Advance Week" and "Fast Forward" were doing almost the same thing (Fast Forward already stopped immediately at the first match or bit of news either way), so they're now a single button: "Play Match" when there's a fixture due this week, "Continue" when there isn't — one click either way, no need to think about which button applies.
v1.31.6 Fixed a crash opening Player Stats during a live match
- Opening Player Stats mid-match (not after full time) threw a server error — the player-name links added in v1.31.0 assumed every player-stats row carried a 'player_id' field, but the live in-progress version of that data used a differently-named field for the same thing. Fixed by aligning the two shapes.
v1.31.5 Tablet icon changed to ⬛
- Swapped the Tablet symbol on Login History to ⬛, per feedback on the previous icon.
v1.31.4 Fixed the tablet icon looking like a laptop
- The Tablet symbol on Login History was 💻, which reads as a laptop, not a tablet — swapped to 🖼️ so all three device symbols (phone, tablet, PC) are visually distinct from each other.
v1.31.3 Login History shows a device icon per entry
- Each row on the Login History page now shows a phone 📱, tablet 💻 or PC 🖥️ symbol (hover/tap for the exact label), read from the same browser info already being recorded for every login attempt — a best-effort read, not a rigorous device-detection library, but accurate for the real browsers this server has actually seen so far.
v1.31.2 Login History times now shown in UK local time
- Timestamps on the Login History page now read dd/mm/yy HH:MM:SS (e.g. "15/09/26 21:14:35") instead of the raw ISO format, and are converted to UK local time — BST in summer, GMT in winter, switching automatically on the real UK clock-change dates rather than a fixed offset. Storage is unchanged; this is purely how the time is displayed.
v1.31.1 Login History shows one row per person
- The Login History page now shows each email's single most recent attempt (success or failed) instead of every historical row, so it's a quick glance rather than a long scroll. Nothing changes about what's actually recorded — every attempt is still logged in full on the server, just not all listed on this page anymore.
v1.31.0 Click-through links: every club and player name, throughout the game
- Club names are now links everywhere they appear — fixtures, league tables, cup ties, European competitions, match reports, live matches, the transfer/loan market, leaderboards, the Managers page, a player's own club/loan club, and more. Your own club takes you straight to your Squad page; any other club opens a new read-only page showing its league position and senior squad.
- Player names are now links to their player page everywhere too — the Squad and Youth Academy lists, Tactics, the transfer and loan markets, scouting reports, the shortlist, free agents, and match-by-match player stats — not just the handful of pages that already had this.
- A couple of spots couldn't be made clickable and are staying that way for now: goal scorer/assister names and general match commentary text, since those are generated as finished sentences with no player reference attached to them internally — making those clickable would need a real rework of how commentary is generated, not just a template change. Names inside dropdown menus (e.g. picking a substitute) also can't be links — that's just how those controls work.
v1.30.7 Squad sorting now groups left, then right, then centre
- The default squad/academy sort still goes GK, then defenders, midfielders, attackers, but within each of those groups it now orders left-sided positions first, then right, then central (e.g. D/L, D/R, D/C) — previously every position within a group tied for sort purposes and the sub-order was effectively arbitrary.
v1.30.6 Slot dropdown now flags already-taken positions
- Each player's Slot dropdown on the Squad page now shows an option in red with a "(taken)" label when another player already occupies it, so it's obvious at a glance which starting XI/bench spots are free without having to scroll the whole squad list to check. A player's own current slot is never flagged as taken in their own dropdown.
v1.30.5 Squad page: found the actual cause of the leftward jump
- The v1.30.4 fix restored the squad table's own internal horizontal scroll, but the restore code itself was hardcoding the page's window horizontal scroll back to 0 on every pass — the actual, more visible cause of the page still snapping left on a slot change. Now captures and restores the window's own horizontal position too, instead of assuming it's always 0.
v1.30.4 Squad page also restores horizontal scroll now
- On a narrow/mobile screen the Squad table scrolls sideways within itself (rather than the whole page) so you can reach the stat columns without losing track of which row you're on — the scroll-position fix from v1.30.3 only restored the page's vertical position, so a slot change on mobile still snapped the table back to its leftmost columns. Now restores both.
v1.30.3 Actually fixed the squad page's scroll-jump this time
- The previous fix for the Squad page jumping to the top on every slot/filter change didn't work on any device, not just mobile — it relied on a 'submit' event that JavaScript's form.submit() doesn't actually fire, a real browser quirk, so the scroll position was never being saved in the first place. Fixed properly this time by saving it directly from each dropdown's own change handler, plus a couple of extra restore passes after load to survive mobile browsers still settling their viewport (address bar collapsing, etc.) a moment after the page finishes loading.
v1.30.2 Fixed the squad page jumping to the top on every slot change
- Setting a player's slot (or changing the position/attribute filter) on the Squad page used to reload the page back at the very top, losing your place if you were scrolled down a long squad list. The page now remembers your scroll position across that reload and restores it.
v1.30.1 Delete a save, and a tidier new-game league picker
- Added a Delete option on the Saves screen for removing a save you no longer want, permanently — every club, player, fixture and trophy in it. Protected by that save's own PIN (re-checked fresh every time, even if the save is already unlocked for viewing this session); a save that was never given a PIN asks you to type its exact name to confirm instead, so a delete is never a single unprotected click either way.
- The new-game league picker no longer shows a "(tier N)" suffix on every league name — just the competition and country, e.g. "Premier League (England)".
v1.30.0 Stage 4 of the European pyramid project: defending-champion qualification
- A club that wins the Champions League, Europa League or Conference League is now guaranteed a direct group-stage place in that same competition the following season, even if their domestic league finish alone wouldn't have earned it — unless their league finish already earns them a place in an equal-or-more prestigious competition, in which case they simply take that place instead rather than double-dipping.
- When the guarantee does mean pulling a club UP from a lower European place they'd otherwise have held, that vacated slot doesn't just disappear — it's backfilled from the next-placed club in the SAME domestic league, so no other club loses out and the league's total European representation goes up by one for the season, the same way real UEFA's own defending-champion rule works.
- Applies to any club regardless of which tier of league it plays in — including the 14 leagues added in Stage 1, now that Stage 3's qualifying ladder means one of their clubs can genuinely go all the way and win a European trophy, not just the original 5 major leagues.
v1.29.0 Stage 3 of the European pyramid project: a real qualifying-round ladder
- The 14 leagues added in Stage 1 (v1.27.0) now actually feed into the Champions/Europa/Conference League instead of existing as standalone domestic leagues: each league's champion and runner-up enter a genuine two-legged qualifying ladder, with the stronger leagues entering at a later, easier round than the weaker ones.
- Includes the drop-down mechanic real UEFA qualifying is built around: lose your Champions League qualifier and you get a life in the Europa League's play-off round instead of being knocked out outright; lose that too and you get a further life in the Conference League's second round. Needed a staggered three-round-pair timeline (rather than a simple two-round ladder) so a round's losers always have a not-yet-started round to drop into.
- Each two-legged tie is decided on aggregate score, with a level tie going to a real, weighted penalty shootout (reusing the same mechanism the domestic cup already uses for a drawn tie) rather than a coin flip. An odd number of entrants in a round gives the single strongest side a bye through to the next round, the same way a real qualifying draw would.
- Fixed a real, pre-existing bug in the knockout bracket found while building this: it crashed once a competition's group stage produced a qualifier count that wasn't a power of 2 (e.g. 3 groups -> 6 qualifiers, which can't keep halving evenly to a Final). The bracket now gives the highest-reputation remaining sides a bye down to the nearest power of 2 instead of crashing — this could in principle have been hit even without the new leagues, just never had been yet.
- This is a structural change to how a season's European qualification works, so it's not retrofitted onto either live save's current season the way earlier stages were — it takes effect naturally the next time each save rolls over into a new season.
v1.28.0 Stage 2 of the European pyramid project: real calendar dates
- Every "Week 245" style display across the game — fixtures, news, injuries, loan returns, transfer/match history, scouting reports, manager records — now shows a real date instead (e.g. "17 Jan 2031"). This is Stage 2 of the wider European-pyramid project (Stage 1: 14 new leagues, shipped as v1.27.0), done ahead of Stage 3's qualifying-round ladder so that gets built directly on real dates rather than on weeks and migrated later.
- Deliberately scoped as real dates layered on top of the game's existing weekly turn structure, not a rebuild of it — checked first, thoroughly, and confirmed the whole engine (fixture scheduling, training, scouting, fatigue recovery, contract countdowns, AI market activity) is already built around a week as the atomic unit of time by design, not by accident, and none of it needed to change. What changed is purely how a week number gets displayed: one new column (a save's real-world start date) plus one small conversion used everywhere a raw week number used to just print as a bare integer.
- New saves now open with a realistic football calendar — preseason starting in early July, the season kicking off in August — so the transfer-window and preseason timing tuned earlier this session lines up with the actual real-world months once shown as dates. Applied to both live saves too: Career 1 now reads 17 Jan 2031, Test reads 15 Nov 2026, both landing in a genuinely plausible point in an August-kickoff season.
v1.27.0 14 more European leagues added (Stage 1 of the full UEFA pyramid)
- The first stage of a genuinely large, multi-stage project: growing the game beyond the 5 leagues it's simulated until now toward the full UEFA picture. This stage adds real top-flight leagues for Portugal, Netherlands, Belgium, Scotland, Turkey, Austria, Switzerland, Croatia, Serbia, Poland, Sweden, Norway, Denmark and Ukraine — real club names (Benfica, Ajax, Celtic, Galatasaray, Shakhtar Donetsk and so on), each league its own domestic season, table, cup, and relegation pool, exactly like the 4 other top flights already had.
- Reputations are banded by tier on the game's existing shared 1-99 scale, not invented separately: the stronger new leagues (Portugal, Netherlands, Belgium, Scotland, Turkey, Austria, Switzerland) top out around 76-85, clearly below the original 5 leagues' own 90+ giants but above their mid-table; the rest (Croatia, Serbia, Poland, Sweden, Norway, Denmark, Ukraine) top out around 58-62. Verified directly: Benfica generated at reputation 82 with a full, correctly-scaled 20 senior / 20 youth squad and a realistic domestic-heavy nationality mix.
- Applied immediately to both live saves — 170 new clubs each, season boundaries and length confirmed unchanged afterward, each new league's own season scheduled to start after the current week with a real preseason of its own rather than kicking off mid-week. Verified a full week-advance still runs cleanly (~6s) at the new scale.
- Deliberately NOT included in this stage: these 14 leagues don't feed into Champions/Europa/Conference League qualification yet — that needs a real qualifying-round ladder (multiple two-legged knockout rounds before the group stage) that doesn't exist yet, which is Stage 3. Stage 2 is a genuinely separate, large project of its own: moving the whole game off the current week-counter calendar onto real dates, which the qualifying ladder will be built directly on top of rather than migrated onto later.
v1.26.1 Lower-league finance ceilings were still too generous
- A flat 3x cap on top of a club's natural budget made sense at the very top of the pyramid, where real financial gaps are huge (Champions League money, giant TV deals) — but League Two's real financial ceiling is much flatter than that, and a flat multiple didn't reflect it. £1.14m for a reputation-22 League Two club (Walsall) was still well above what any real club at that level actually spends, even after the previous fix.
- The cap multiple now scales with reputation instead of being flat: 1.5x at the bottom of the pyramid, rising smoothly to the same generous 3x at the very top — a genuine elite club can still meaningfully outspend its baseline through sustained success, a lower-league one no longer gets the same 3x real football doesn't support at that level.
- Applied immediately to both live saves: 151 more clubs in Career 1 and 116 more in Test corrected under the new scaling. Walsall's transfer budget is now £697k (was £2.1m originally, £1.14m after the last fix) — verified directly afterward that zero clubs remain over the new cap in either save.
v1.26.0 Budgets now show as £X.Xm, and a real overshoot bug is fixed
- Transfer/wage budgets read like "£2100k" — technically correct but easy to misread and inconsistent with how anyone actually talks about club finances. Anything at or above £1,000k now shows as £X.Xm (so "£2100k" becomes "£2.1m"), smaller amounts stay as £Xk.
- That £2.1m for a reputation-22 League Two club was also a real bug, not just a display issue — its own generation formula targets roughly £230k-£610k at that reputation, capped at 3x that as a hard ceiling. The cap existed, but only ever got rechecked at a season boundary, so nothing stopped a single season's matchday revenue alone from blowing well past it before that boundary arrived. Confirmed directly: 149 of 171 clubs in Career 1 and 79 of 168 in Test were already over their intended cap, one by as much as 9.6x.
- Now rechecked every week (cheap — one bulk query, plain arithmetic, confirmed well under 1ms) instead of only once a season, so a budget can't run that far past its ceiling before being caught. Applied immediately to both live saves rather than waiting for each one's next season boundary: Walsall's transfer budget corrected from £2.1m to £1.14m, and every other over-cap club in both saves brought back in line — verified directly afterward that zero clubs remain over cap in either save.
v1.25.1 Details/Report links now match the buttons next to them
- The "Details" and "Report" links (Academy, Squad, Fixtures, Cup) were plain underlined text sitting right next to real beveled buttons like Call Up and Promote — inconsistent and easy to miss. They now use the same button styling everywhere (the existing .button class, already used elsewhere in the app), with no visual difference from an actual <button>.
v1.25.0 Youth prospects can now play for the first team, age out, and get poached
- Call a youth player up from the Academy page for real senior game time (reversible — "Send to Youth" from the Squad page brings them back), or Promote them permanently. A called-up player is fully match-ready — assignable to a lineup slot, playing real minutes, racking up real stats — and genuine game time now measurably speeds up their development, through the weekly training system that already existed but could never actually apply its own starter bonus to a youth player before this.
- Academy age raised to 21 (was an unannounced, unused 18) — a prospect who's never been promoted by then is released, with a full season's warning first ("turns 21 next season and will leave as a free agent unless offered a professional contract") so there's a real chance to act, not a surprise. AI clubs make the same call automatically for their own academies based on potential, so they churn realistically too.
- Fixed a real, pre-existing bug this surfaced: youth players were already being silently released via the exact same generic contract-countdown path a 32-year-old veteran goes through, with no connection to age or academy status at all. Youth now has exactly one departure path (the age-based one above), not two uncoordinated ones.
- Youth players are now real transfer targets — another club's academy shows up when browsing them to bid, using the exact same offer flow as any senior player. Loans already worked both directions for youth with no changes needed, confirmed directly rather than assumed.
- Lower-division AI clubs now actively target higher-reputation clubs for loan talent — search more often the weaker their own reputation, and rank candidates with a bias toward a bigger parent club's spare players, not raw rating alone. Verified directly: a reputation-14 club's loan activity brought in players from clubs rated 51 and 99.
v1.24.0 Youth Academy is now its own page in the sidebar
- The academy used to live as a table at the bottom of Squad & Tactics — now it's its own "Youth Academy" entry in the sidebar, with its own position/attribute filters, separate from the senior squad. Everything the table already did (attributes, nationality, the "Details" link added a moment ago) carries over unchanged, just on its own page now.
- Verified directly: the Academy page lists every youth player correctly, the Squad page no longer shows any, and clicking through to a player's own page still works.
v1.23.2 Youth academy players had no link to their own stats page
- The Youth Academy table on the Squad page never had a way to click through to a player's own page at all — the senior squad table has always had a "Details" link, the youth one simply didn't. Not something today's youth-league work broke; it just went unnoticed until there was actually real match data worth clicking through to see.
- Added the same "Details" link the senior table already has. Verified directly: the link is now present for every youth player, and clicking through loads their page correctly, including today's new "Youth" match-stats row.
v1.23.1 Youth academies were drawing nationality from a fully global pool
- A division 2 club's academy should be overwhelmingly domestic, real foreign teenage imports are rare — but the youth intake and academy-size safety net built earlier today never wired in the country-weighting that's already used correctly for a club's initial senior squad. Confirmed directly on the live save: Sheffield United's 20-player academy had exactly 0 English/Scottish/Welsh players — entirely drawn from the global pool, same as literally any other club regardless of country.
- Fixed by reusing the exact same division/league-based weighting initial squad generation already has, with a modest boost on top for youth specifically — real academies skew even more local than a first team does, since senior sides import proven foreign talent far more than academies scout internationally for teenagers. A division 2 academy now lands around 80% domestic; a European top-flight academy (a La Liga club, say) around 65%, both realistic for how real academies actually recruit.
- The same gap existed on the senior side too, in the club-replacement fallback used when a relegation pool runs dry (_generate_non_league_club) — fixed there as well for consistency, same reasoning.
- Re-rolled nationality for existing youth players on both live saves rather than leave the obviously-broken result in place — 6,780 players corrected. Verified directly: Sheffield United went from 0/20 domestic to 18/20 and 15/20 across the two saves, Real Madrid's academy to 15/20 Spanish.
v1.23.0 A real preseason: friendlies, wider transfer windows, and a Fast Forward button
- Every new save (and every season from here on) now opens with a genuine 5-week preseason before a ball is kicked competitively — previously week 1 had a live league fixture already scheduled, with zero time to assess the squad, scout, or do transfer business first.
- AI now organizes real preseason friendlies for every club automatically — 3 per club, spread across the preseason with genuine open weeks in between (not one every single week, which would have defeated the whole point of a quiet preseason). Real matches through the same engine, real stats, and they now actually populate the "Non Competitive" row on a player's stats page, which previously always showed "-" because nothing populated it.
- Checked the transfer window durations directly rather than assume they were already right: the summer window was only 3 weeks and winter only 3 — both genuinely too short. Widened to ~2.5 months for summer (opens with preseason, closes a few weeks into the season, matching the real June-August 31 window) and ~1 month for winter, centered on the season's midpoint.
- Added a Fast Forward button next to "I'm Ready — Advance Week" for genuinely quiet stretches — clicks through several weeks automatically, stopping the moment there's actually something to deal with: a fixture, a transfer/loan offer, a completed scout report, or anything else newsworthy for your club. Deliberately kept the game's existing week-at-a-time engine rather than rebuilding a day-level clock — checked directly first and confirmed transfer offers and loans already resolve instantly against AI clubs (no week-advance needed at all); scouting was the one thing genuinely built around multiple weeks, and this solves exactly that without touching how contracts, wages, training, fatigue, and the whole fixture engine are built.
- Fixed a bug this surfaced along the way: the lineup-readiness check that blocks advancing until you've picked a team didn't know about friendlies or youth matches, so it was about to demand a manually-picked XI for a friendly nobody's meant to manage tactically — now only competitive fixtures (league/cup/continental/international) require a picked lineup before advancing.
- Only shapes new seasons from here on — this doesn't retroactively insert a preseason into either live save's already-running season, since that wouldn't make sense the way the earlier squad-size backfills did. Takes effect at each save's next season boundary.
v1.22.0 La Liga, Bundesliga, Serie A and Ligue 1 now have real relegation
- The other 4 major European leagues were each a single static division with nothing below them — a club could never actually go down, and nothing new could come up. Added the same lightweight relegation churn the English pyramid's own bottom tier (League Two) already uses: the bottom 3 clubs in each league drop into a dormant reserve pool at season end, replaced by a club pulled from that same league's own pool (or a freshly generated one if it's empty) — never another country's. No full second division is modeled, same deliberately light scope League Two's own bottom tier already has, so it costs nothing extra to simulate.
- A human-managed club finishing bottom gets the same reprieve League Two's human clubs already get — the board backs them for one more season rather than relegating them out to nowhere, since there's nothing modeled below to actually manage.
- Fixed a real gap along the way: the code that rebuilds each league's fixture list for the new season wasn't filtering by active status at all, so a just-relegated club would have carried on appearing in next season's fixtures regardless. Also reused the squad-floor safety nets from earlier today, so a freshly-generated promoted club starts life with the full 20 senior / 20 youth players immediately, same as everywhere else.
- Verified directly against a copy of the live save: all 4 leagues correctly churned 3 clubs each, scoped strictly to their own country (no cross-league mixing), and a promoted replacement was confirmed to already meet the full squad and academy floor and be picked up correctly for next season's fixtures. Takes effect naturally at each save's own next season boundary — not force-applied now, since relegation should only ever happen off a genuinely finished season.
v1.21.1 A freshly-promoted non-league club could start a season with no academy at all
- Traced through what actually happens when a club gets relegated out of the pyramid and a non-league side takes its place. Most of the time that replacement is a real club that was previously relegated out itself, so its squad and academy are already intact — but when the non-league pool runs dry (confirmed the Test save's pool is empty right now), the fallback generates a brand new club and promotes it into the pyramid immediately, in the same step — before the season-end safety nets that normally guarantee 20 senior players and a 20-player academy ever got a chance to run on it. It would have sat at 18 seniors and ZERO youth players for a full season, silently sitting out every one of its own youth-league fixtures in the meantime.
- Fixed by applying the same squad-size and academy-size safety nets right at the point this fallback club is created, instead of waiting for the next season boundary. Verified directly: a freshly generated replacement now comes out at 20 senior and 20 youth players immediately, same as every other club in the pyramid.
v1.21.0 Youth teams now play a real league — no more judging prospects blind
- Added a proper youth competition: your academy's 20 prospects now play real matches against other clubs in your division/league, with real stats (goals, assists, rating, pass %, tackles) instead of only a hidden potential number to go on. A new "Youth" tab sits alongside Domestic Cup/International/Europe with its own table and fixture list, and every player's own page gets a "Youth" row in their stats breakdown.
- Deliberately built lightweight: real matches through the same engine first-team matches use, and real stats through the same writer, but with none of the first-team-only overhead that doesn't apply here — no tactics, no commentary text, no injuries/discipline, no finance. Measured directly: a youth fixture resolves in ~7ms versus ~47ms for a full first-team match, and only runs on every OTHER week the senior league already plays, so it adds well under a second per week even across a full pyramid save — nowhere near the weekly-housekeeping budget.
- Fully automatic for every club, human or AI — nobody manages tactics or a lineup for it, it exists purely to surface real on-pitch form. A single round-robin per division/league, reusing the senior league's own already-reserved match weeks rather than inventing new ones, so it can never collide with a cup fixture.
- Backfilled immediately for both live saves rather than waiting for next season: Career 1 (877 fixtures) and Test (1,200 fixtures) both have a youth season scheduled for the rest of the current season, with this week's fixtures already queued to resolve on the next week advance.
v1.20.2 Elite academies now produce noticeably better raw talent, not identical odds
- The youth archetype mix (standout/late developer/solid pro/won't make it) was the same flat 4/14/45/37 split at every club regardless of reputation. Real elite academies genuinely do have a better hit-rate on raw talent — better scouting networks, national and international reach — even though what happens to that talent afterward is a separate question this game already handles: current ability generates relative to the club's own level, and first-team selection is comparative against that club's own squad, not an absolute bar, so a lower-reputation academy still offers a genuinely easier path to real first-team football, same as in real life.
- Archetype odds now tilt smoothly with club reputation: a reputation-99 club sees roughly double the standout-prospect rate (7.2% vs 3.2%) and notably fewer total washouts (26% vs 44%) than a reputation-20 club — verified directly across 20,000 simulated draws at each end of the scale. Deliberately a gentle slope, not a cliff — even the best academies produce plenty of players who don't make it, and a struggling club still turns up real gems regularly.
- This governs new youth generation from here on (recurring intake and the academy safety net) — the 6,859 youth players just generated across both saves keep whatever archetype they already rolled rather than being retroactively re-drawn, since this is a realism tune, not a bug fix.
v1.20.1 Youth academies were even thinner than senior squads — added a real mix
- Checked youth ranks the same way the senior squad size was checked: median 3-4 young prospects per club (some down to just 1) across the live save, because the recurring intake only adds 1-4 new 15-17 year-olds per club per SEASON, while 18-year-olds keep graduating out into the senior pool and nothing ever topped the academy back up.
- More importantly, every prospect was previously generated off one identical quality roll per club — no real variety in what an academy actually produces. Added a genuine archetype mix instead: 4% standout prospects, 14% late developers (deliberately rougher right now than their real ceiling, not just a bigger number nobody can see yet), 45% solid pros who'll have a decent career without stardom, and 37% who simply won't make it — matching what a real academy actually turns out. Genuine generational wonderkids stay the rarer, separate _plant_hidden_gems system this doesn't touch.
- The academy floor now matches a real club's own youth-league side: raised from an initial 10 to 20, since a real academy fields a full squad of its own, not just a handful of standby prospects. Every club in both saves now carries a healthy 20-player academy, kept topped up automatically each season end from here on — verified directly: 339 clubs brought up to 20 across Career 1 and Test, every one using the same realistic archetype mix.
v1.20.0 16-player squads were a bare floor, not a real one — raised to 20
- The squad safety net added moments ago used 16 as the minimum, which turned out to just match what a freshly generated club already starts with — barely a starting XI plus 5 subs, not a genuine top-flight squad. Real top-flight squads run 20-25 (the Premier League's own squad-list cap is 25).
- Raised the floor to 20 for both a freshly generated club and the season-end safety net — a club should always be at or above this; falling short means a manager (human or AI) let contracts lapse or sold more than they replaced, not that the game shorted them.
- Re-ran the top-up against both existing saves at the new floor: 332 clubs brought up to 20 senior players across Career 1 and Test, including every top club previously sitting right at the old 16-player line (Liverpool 17→20, Arsenal 19→20, Manchester City 16→20). Verified directly afterward: zero clubs below 20 senior players and zero unable to field a full XI in either save.
v1.19.9 AI squads were quietly shrinking over long saves — added a safety net
- Digging into why real squads looked thin turned up a genuine, long-running bug: AI clubs only auto-renew a player's contract if they rank in the club's top 10 — everyone else simply becomes a free agent the moment their deal runs out — and the weekly free-agent signing pass meant to compensate only fires for about 8% of AI clubs a week, and couldn't even consider signing into a position the club had been reduced to zero players in.
- Checked against the live save (268 weeks in): 148 of 171 non-human clubs had fallen below 16 senior players, and 45 of those couldn't field a full XI of available players at all — Manchester City, an elite club with a large wage budget, was down to 11.
- Added the same guaranteed safety net goalkeepers already had (_ensure_minimum_goalkeepers) for the whole squad: every club is now topped back up to 16 senior players at the end of each season if it's fallen short, using the same broad-position-balanced generation fresh squads already use. Verified directly: Manchester City 12→16, and three genuinely hollowed-out lower clubs (6-7 players) all correctly reached 16.
- Also fixed the weekly free-agent signing logic itself: it previously could never even consider a position the squad had zero players in (only positions it already had someone in were compared), and when several positions were simultaneously empty, it always picked the same one first regardless of whether a free agent for it actually existed, silently starving every other gap. Both are fixed — verified a club missing an entire flank of positions correctly signed into one of them once a suitable free agent was available.
- This can't retroactively undo a bug that never took a player away — it repairs going forward. Existing thin squads self-correct at each club's next season boundary; ask if you'd like existing under-strength AI squads topped up immediately rather than waiting.
v1.19.8 Goalkeepers were showing up on the assist and goal charts — fixed
- Found the real cause of a Chelsea keeper appearing on the assist leaderboard with 3 goals and 4 assists this season: the shooter, crosser, header-taker, free-kick-taker and assist pools in the match engine were all drawn from the entire XI with no goalkeeper exclusion, so on any attacking possession your own keeper — standing at the other end of the pitch — was a small but live candidate to take the shot or provide the pass.
- This was a match-engine selection bug, not an attribute-realism one — the position realism pass earlier today wouldn't have touched it, since a keeper's finishing/passing attributes were never the issue, only who the engine let take the shot.
- Goalkeepers are now excluded outright from every outfield attacking role (shooter, crosser, header, free kick, key pass/assist). Verified directly: 60 simulated matches against real club squads produced zero goals or assists credited to a goalkeeper, versus a handful of occurrences before the fix.
- This only affects matches simulated from here on — goals/assists a keeper already has on record from before this fix stay on their career stats.
v1.19.7 Checked realism across every position — found and fixed one more gap (MC/ML/MR)
- Ran the same comparison across all 15 positions, not just the ones already reported. Found one more real gap: MC, ML and MR had no negative emphasis at all, the only positions left with none — a plain central or wide midfielder was generating as an elite finisher, long-range shooter, and dead-ball specialist, fully on par with an actual striker or attacking midfielder.
- Central/wide midfield now reads as a genuine middle ground rather than "good at everything": below strikers/attacking mids on finishing, long shots, and set pieces, but above them on tackling and marking — a believable gradient from back to front instead of a flat one. Verified directly: an elite club's MC now averages Finishing 15 / Long Shots 16 / Corners 14, versus a striker's 18-20, while Marking (17) sits sensibly between a specialist defender's ~19 and a winger's ~15.
- Checked every other position pairing at the same time (attacking mid vs winger, wing-back vs full-back, sweeper vs centre-back, etc.) and found no other comparable gap — the remaining differences between positions now follow a believable gradient rather than a flat baseline.
v1.19.6 No — checked directly, and fixed the same gap for defenders too
- Asked directly whether this was fixed for every position, so checked rather than assumed: it wasn't. A big club's centre-back was generating with essentially the same Long Shots, Flair, Free Kicks, Corners, Penalties, Vision and Technique as their own striker (all ~18-19) — the identical root cause, just for defensive positions instead of goalkeepers: nothing pulled those attacking-specialist attributes down for a role that has no real use for them.
- Every specialist defensive position (sweeper, centre-back, full-backs, wing-backs, defensive midfield) now has those attacking-specialist attributes pulled down, the same pattern as the GK fix. Verified directly: an elite centre-back now averages Long Shots 13 / Free Kicks 14 / Corners 15 / Penalties 15, against a striker's 18-19, while Tackling and Marking stay fully elite.
- Central/attacking midfield and forward positions weren't touched — their existing emphasis already differentiates them reasonably (an attacking midfielder having good technique and vision isn't the same kind of mismatch a defender having a striker's finishing repertoire is).
v1.19.5 Fixed the reverse case too: outfield players rolling strong goalkeeping stats
- Same root cause as the GK fix, the other way round: an outfield player (a midfielder was reported directly) had no down-weighting on Handling/One On Ones/Reflexes at all, so a good club's midfielder or striker rolled genuinely useful goalkeeping attributes purely from the flat club-quality baseline, despite that having nothing to do with playing outfield. Every non-GK position's generation now pulls those three down toward a mediocre baseline (unless a position explicitly says otherwise, which none currently do) — verified directly: an elite club's midfielder/forward/defender now average around 9 in Handling/One On Ones/Reflexes instead of 18-20, while their genuinely relevant attributes are unaffected.
- Only affects newly-generated players from here on, same as the GK fix.
v1.19.4 Fixed: generated goalkeepers looked world-class at everything, not just goalkeeping
- Confirmed real gap, reported directly: only 4 of a goalkeeper's 41 attributes (Handling, One On Ones, Reflexes, Positioning, plus 4 explicitly reduced ones) were adjusted away from a flat, club-quality-driven baseline — everything else, including Marking, Heading, Dribbling, Pace, Technique and Work Rate, defaulted to that same baseline. For a big club's keeper, that meant genuinely elite numbers in a string of skills that have nothing to do with goalkeeping, reading as "good at literally everything" rather than a specialist. Expanded the down-weighting to the full realistic set (marking, heading, dribbling, flair, long shots, free kicks, corners, penalties, technique, pace, acceleration, vision) and added a few genuinely GK-relevant ones that were missing entirely (jumping, bravery, throw-ins, agility). Verified directly: an elite club's newly-generated keeper now reads as a real specialist — reflexes/handling/one-on-ones around 20, marking/heading/tackling/finishing down in the 8-13 range.
- Only affects newly-generated players from here on — a player already in your save keeps the attributes they were generated with, exactly as everywhere else in the game that avoids silently rewriting an existing player's identity.
v1.19.3 Fixed: the player page never actually said the player's own name or club
- Confirmed real gap, reported directly: opening a player's page (from a leaderboard, say) named their nationality, age and condition, but never their own name or which club they actually play for — the club shown at the top of the screen is always YOUR club, not the one being viewed. Added a proper header with the player's name, position, and club right at the top of the page.
- A player currently out on loan now shows both sides of it ("Lille (on loan from Inter Milan)") instead of just their parent club, or nothing at all.
v1.19.2 Leaderboards moved into the main sidebar menu
- Leaderboards now has its own permanent link in the left sidebar (next to Competitions), instead of being tucked into the League Table page's own sub-navigation row.
v1.19.1 Leaderboards now cover the domestic cups too
- Added a League / Cup toggle to the Leaderboards page, with the same 11 categories (scorers, assists, pass completion, clean sheets, and the rest) scoped to actual cup matches for whichever cup you pick — the real cup names (FA Cup, DFB-Pokal, Copa del Rey, Coupe de France, Coppa Italia), not just a division label.
- The English pyramid's single FA Cup spans all 4 divisions together, since that's a genuine one competition — verified directly it correctly mixes clubs from Manchester United down to League Two sides on the same board, rather than only showing one division's worth.
v1.19.0 Added Leaderboards — top scorers, assists, pass completion, and more, per league
- New Leaderboards page (linked from the dashboard and the Fixtures & Table page), with the same league tab row as the table — Top Scorers, Top Assists, Best Average Rating, Best Pass Completion, Most Clean Sheets, Most Man of the Match, Most Tackles Won, Most Key Passes, Most Key Tackles, Most Headers Won, and Most Shots on Target. Every category is genuine season-to-date data from actual played league matches, not estimated.
- Average Rating and Pass Completion require a minimum of 5 appearances to qualify, so a single standout game can't sit at the top of the board over a whole season's worth of consistency — every counting stat (goals, tackles, etc.) has no such minimum, since a real tally is a real tally regardless of how many games it took.
v1.18.0 No more silent auto-fill for your own team — you now have to pick it
- You can no longer advance the week with an incomplete or partly-unavailable starting XI silently auto-filled behind the scenes. Every one of the 11 slots now needs an explicit, available pick before "I'm Ready" will actually go through — trying anyway is blocked with the exact problem named ("No player selected for D/C", "Marcus Lindgren (GK) is injured until week 271"...) and sent straight to Tactics to fix it. AI-managed clubs are unaffected — auto-fill is exactly right for a side with no human there to make the call instead.
- This also covers the case asked for directly: a player picked weeks ago who's since been injured or banned no longer gets silently swapped for someone else when the week advances — you're shown exactly who's now a problem and pick the replacement yourself.
- The gamebar's Advance Week control now shows a "⚠️ Team not picked" warning (linking straight to Tactics) instead of the Ready button whenever this applies, so the block is visible before you click through and get bounced, not just after.
v1.17.0 Fixed a fatigue symmetry bug, and attacks now target the tired defender
- Fixed: two EQUALLY fatigued players didn't actually cancel each other out the way they should — the attribute-level fatigue penalty was dampening a different proportion of each duel type's relevant attributes for an attacker versus a defender (5 attack attributes vs 4 defend ones, only 2 of each touched by fatigue), so an equally-tired matchup quietly tilted toward the attacker instead of staying fair. Fatigue is now applied at the final duel score itself rather than to individual attributes beforehand, so an equal cut is genuinely an equal cut for any duel. Verified directly: with every player on both sides equally fatigued, tackle win rate now stays flat (83% → 81.5%, just sampling noise) across the whole fatigue range, instead of the previous steady decline. A player's own rating still drops with their own fatigue regardless of the opponent — that part was always meant to be personal, not relative, and still is.
- Added tactical targeting: attacking play now preferentially probes whichever opposing defender is most fatigued, the way real attacks work the tired full-back rather than picking a random defender regardless of condition. Verified directly: a fully exhausted defender gets picked out as the one being attacked roughly twice as often as an identical-position fresh teammate.
v1.16.3 Fatigue's performance impact raised sharply, per direct request
- The attribute penalty at full exhaustion raised from 20% to 60%, as specifically requested. The direct duel win-probability penalty raised from 35% to 55% to match, so a badly fatigued player is now genuinely losing the large majority of the individual battles they're in, not just somewhat fewer of them — verified directly: a defender at 92 fatigue against an identical fresh opponent won just 36% of tackles over 30 simulated matches, down from 84% for the fresh player.
- Match rating now has real room to reflect that: the fatigue deduction and the rating floor itself both scale with fatigue, so a genuinely exhausted player's rating can now fall to around 1.0 at full exhaustion (previously floored at 3.0 regardless) rather than only ever landing in a "disappointing but still solid" range. Verified directly: an artificially fatigued starter (92 fatigue) finished a full simulated match with a 1.3 rating against teammates in the 5.9-6.8 range.
v1.16.2 Fixed the Internal Server Error (a real performance bug from the last update), and fatigue now actually grows as a live match goes on
- Root cause of the Internal Server Error, confirmed directly from the server's own error log: advancing the week recomputes every club's starting XI/bench to estimate each player's squad role for morale — a per-club cache for this was already written into the code but never actually used, so it silently recomputed the SAME club's XI/bench from scratch once per PLAYER instead of once per club. That was already wasteful; last update's AI-selection improvement added one more query to every one of those calls, which tipped it over into timing out the request entirely — which then cascaded into "database is locked" errors on completely unrelated pages (including live matches) while the stuck request held things up. Fixed the cache; confirmed directly the same weekly housekeeping that used to risk a 30-second timeout now finishes in about 7 seconds on this save's full ~4,100-player, 225-club world.
- Separately, confirmed a real gap reported directly: a player could show 0% Condition live and still be performing fine. Condition was already correctly projecting how tired a player would get as the match wore on, but nothing about the actual simulation — duel outcomes, match rating — ever read that projection; they judged every player on their fixed PRE-match fatigue for the entire 90 minutes, so someone who'd visibly worn down during the game was never actually playing any worse for it. Fatigue used by the live match engine now grows through the game the same way the Condition number already displayed it growing, so what you see is now what's actually driving performance. Verified directly: a player's effective in-match fatigue climbed from 55 at kickoff to 85+ by the half-hour mark in a live simulated match.
v1.16.1 Scorer/assist now on one line, and the scorecard survives to the full match report
- Scorer and assist now sit on the same line ("⚽ Rafael Haddad 79' 👟 Bruno Garcia") instead of the assist wrapping to a second line underneath.
- The scoreboard's scorer/assist list now also appears on the full match report after the game ends — previously it only existed on the live match screen, so it vanished the moment the match finished. This meant building a genuine scorer/assist record for AI-vs-AI matches too, which never went through the live match screen at all — added a goal_events column that both the live and instantly-resolved match paths now write to.
v1.16.0 Fatigue now makes a real difference: injury risk, near-uncompetitive duels at extreme fatigue, and smarter auto-selection
- Injury risk now scales with fatigue — negligible for the first 20% (matching every other fatigue curve in the game), then accelerating up to 2.5x the baseline risk at full exhaustion, reflecting how soft-tissue injuries cluster late in matches and for players who haven't had time to recover, in real football.
- A heavily fatigued player is now genuinely, severely outmatched by a fresh opponent in the individual duels they contest (tackles, headers, shots, keeper vs shooter) — on top of the attribute dampening added last time, added a direct win-probability penalty for extreme fatigue gaps, since the small sensitivity the engine deliberately uses everywhere else (to stop an ordinary skill gap producing blowout scorelines) was diluting even a big attribute cut into barely a shift. Verified directly: two otherwise-identical defenders, one at 90 fatigue and one fresh, won 56% vs 83% of their tackle attempts over 30 simulated matches — a real, dramatic gap purely from fatigue.
- AI auto-selection (filling an unassigned slot or the bench) now weighs the full detailed attribute model — the same one the match engine's own duels run on — alongside the existing coarse rating, fatigue and recent form, and now also factors in morale. Previously it judged every candidate on just 6 generic engine numbers, missing most of what the actual simulation cares about for that specific role.
v1.15.2 Fixed: a badly fatigued player could still post a top rating
- Confirmed real bug, reported directly: a defender on 12% Condition was showing one of the best ratings on the team. Root cause — the tackle duel (PROGRESSION_DEFEND_KEYS: tackling/marking/positioning/anticipation) shares none of its attributes with what fatigue actually dampened (pace/acceleration/agility/stamina), so an exhausted defender's actual tackle success was completely untouched by fatigue in practice, however tired they were.
- Fatigue now also dampens tackling, marking, strength, jumping and balance, not just the four purely physical attributes — so a gassed defender genuinely loses more of the physical duels, not just runs slower.
- On top of that, match rating itself now takes a direct hit for heavy fatigue (up to roughly a full point at full exhaustion, via the same accelerating curve — negligible for the first 20%, then increasingly severe) — a deliberate, explicit adjustment rather than relying only on probabilistic duel outcomes, the same way a real match rating docks a player for visibly fading late on, not just for the specific tackles they happened to lose. Verified directly: an artificially fatigued starter finished a full match with the lowest rating on the team.
v1.15.1 "I'm Ready — Advance Week" moved into the club header bar
- The Advance Week button now lives in the coloured club bar at the top right of every page (next to your manager name), not just as a card on the dashboard — so readying up for the next week no longer means navigating back there first. Turns into a "Ready ✅" tag once you have, and is hidden while a live match of yours is still in progress, same as before.
- The dashboard's own Advance the Week card now only appears when there's actually something it needs to tell you (the opponent manager's ready status, or that a live match needs finishing first) — otherwise the header bar button is the only place it lives.
v1.15.0 Condition (100 = fresh, 0 = fatigued) now shown on the squad page, and the fatigue model got deeper
- Added a sortable Condition column to the squad page (100 = fully fresh, 0 = fully fatigued, colour-coded the same way the live match stats already are) — previously fatigue only showed as a binary "Tired" tag once a player crossed a threshold, with no actual number anywhere on that page. The player profile page's existing fitness % was relabelled Condition to match.
- The fatigue penalty to match performance is no longer a straight line — the first 20% of fatigue now barely matters (realistically, a player who's only just started to tire isn't meaningfully worse for it), then the penalty accelerates the more worn down they get. Both ends of the scale (fully fresh, fully exhausted) are unchanged — only the shape in between is different. Applied consistently to both actual match performance and the AI's own auto-selection judgement, so the two never disagree about how much a given fatigue level should matter.
- Fatigue itself now also factors in age (players 30+ tire faster and recover slower, up to 30% at 39+), the separate Stamina attribute alongside Natural Fitness, and recent workload — a player already carrying fatigue in from recent matches without having fully recovered now gains extra fatigue on top of this match's own base amount (up to +25%), rather than every match adding the same flat number regardless of how recently they last played.
v1.14.8 Player Stats table now sorts by position, not rating
- Rows now read GK, then defenders left to right (DL/DC/DR/WB), then midfielders, then attackers, then forwards — the standard shirt-reading order already used on the squad page — instead of grouping by who started and sorting by rating.
v1.14.7 Tidied the Player Stats table's column groups
- Assists moved into the Passing group (Pas/Cmp/Key/Ast) instead of sitting on its own between Heading and Shots, misaligned with every other group's two-row header. Goals added to the Shots group (Gls/Sho/On), right next to shots and shots on target where it reads naturally.
v1.14.6 Scoreboard goal line now shows the minute, and the ball icon is a proper black-and-white ball
- The scorer's name in the scoreboard now has the minute right next to it ("⚽ Kwame Johnson 23'"), live and on the initial page load alike.
- Swapped the ⚽ emoji for a small drawn black-and-white football icon — the emoji itself renders in full colour on most systems' emoji fonts (not actually controllable via CSS), so a plain SVG was the only way to guarantee the classic black-and-white ball look everywhere.
v1.14.5 Scoreboard now shows goal scorers/assists live, and the three action buttons are finally equal width
- The live match scoreboard now lists goal scorers under each team's name as they go in — ⚽ for the scorer, 👟 for the assist underneath if there was one — updating live without a page reload, the same way the commentary and score already do.
- Fixed: the Autoplay/Continue button (a <button>, unlike the Player Stats/Tactics links) was quietly narrower than the other two despite all three sharing equal flex-grow — a well-known flexbox quirk where a button's own default sizing wins out over equal distribution unless explicitly overridden. All three are now genuinely equal width.
v1.14.4 The match's own Continue/Autoplay button now sits in the same row as Player Stats / Tactics
- Whatever the live match's primary action actually is right now — Continue to Next Segment, Continue to Second Half, View Full Report, or the Autoplay Running/Paused toggle — now appears as the leftmost button in the same row as Player Stats and Pause & Adjust Tactics, styled the same way, instead of sitting separately in its own box further down the page.
- During a pending injury (a genuine decision, not a single action) that leftmost slot is left out rather than forced to hold something — the injury card below still handles that one on its own.
v1.14.3 Commentary now reads newest-first, and the live match buttons look like buttons
- Match commentary — live and in the full match report — now shows the newest event at the top, oldest at the bottom, instead of the other way round. The newest line is always the one right there at the top of the box rather than something you had to scroll down to find.
- The "Player Stats" / "Pause & Adjust Tactics" buttons on the live match screen now use the same raised, beveled button styling as every other button in the game, with a coloured top stripe (cyan / orange) to tell them apart — previously they looked more like a flat accented panel than an actual clickable button.
v1.14.2 Restyled the live match Player Stats / Tactics links as proper buttons
- The "View Player Stats" and "Pause & Adjust Tactics" links on the live match screen were plain text. They're now a pair of icon buttons with a colour-coded accent stripe (cyan for Stats, orange for Tactics), side by side above the scoreboard.
v1.14.1 Added a direct link from a live match to Tactics
- The live match screen now has a "Pause & Adjust Tactics" link, since a mid-match style/formation/instructions change already takes effect from the next minute on (see v1.14.0) but there was previously no quick way there short of leaving the match entirely through the main menu. Leaving the live match page naturally pauses it too — nothing advances the match except an explicit action from that page, so stepping away to the Tactics page is a genuine pause, not a race against autoplay.
- The Tactics page now shows a "Back to live match" link when reached this way, which survives making one or more changes rather than only working on the very first visit.
v1.14.0 Fixed the live match screen fighting your scroll, and tactics now actually apply mid-match
- Fixed: autoplay was reloading the entire page every 1-3 seconds to fetch the next bit of commentary, which reset the browser's scroll position to the top every single time — so scrolling down to read the commentary got fought constantly. Autoplay now polls for new commentary in the background and appends it to the page directly, without a page reload, so the page stays exactly where you left it. A real interruption (an injury, a substitution) still does a normal page change, since those need the rest of the screen to update too.
- Fixed: changing formation, player positions, or player instructions on the Tactics page already applied to a match already in progress, but team style (Attacking/Balanced/Defensive) did not — it was locked in at kickoff and silently ignored for the rest of that match no matter what you changed it to. Confirmed directly: a mid-match style change is now picked up on the very next minute, same as everything else the Tactics page controls.
v1.13.0 Live matches now run minute by minute, with a speed control and a real half-time break
- Live matches used to resolve in six 15-minute blocks. They now resolve minute by minute internally — every formula that scales with segment length (injury/discipline chance, possession count) already scaled proportionally, so this is genuinely finer detail, not a different match underneath.
- Added a Speed control (Slow / Medium / Fast, Medium by default) on the live match screen for how many of those minutes are resolved per autoplay tick or Continue click — Slow keeps close to the old pace, Fast is for skimming through a match you're not micromanaging.
- The match now genuinely pauses at half time and hands control back — a dedicated screen shows the half-time score with a link straight to Player Stats for a look at how everyone's actually performed, and needs an explicit "Continue to Second Half" before play resumes, rather than just ticking straight through like every other segment.
- A match already in progress when this update deploys picks up correctly rather than getting confused by the changed segment size — verified directly.
v1.12.0 Player Stats expanded to a full CM01/02-style boxscore, with subs you can make right from it
- Matched against a real CM01/02 in-match stats screen and expanded the Player Stats page to the same column layout: Passing (attempted/completed/key), Tackling (attempted/won/key), Heading (attempted/won), Assists, and Shots (total/on target) — on top of Rating and, live, Condition.
- "Key" passes and tackles are genuine engine-derived events, not invented: a key pass is whoever set up a shot attempt (by an open-play pass or a corner delivery), whether or not that shot scored; a key tackle is a tackle won specifically against a player in an advanced/creative role, not a routine challenge on a deep-lying man who was never much of a threat. Heading is now tracked as its own duel (previously folded anonymously into general shot counts) so a genuine aerial threat actually shows up as one.
- Passes attempted/completed are the one estimated figure here, same as the existing pass % — the engine models possession share rather than simulating individual passes, so this turns that existing, attribute-based completion rate into a believable count scaled by position and minutes played, rather than inventing a new unrelated number.
- On the live version of the page, your own team's table now has a substitution form right there — queue a change the moment a bad Rating or a sliding Condition catches your eye, without switching back to the match screen first.
v1.11.0 Added a Player Stats screen for both teams, during and after a match
- New "View Player Stats" link on the live match screen and on the full match report: every player who's featured for either side, with rating, goals, assists, shots (on target/total), tackles (won/attempted), and an estimated pass completion — CM01/02-style boxscore stats, not just the final score.
- During a live match this also shows a live Condition rating (0-100, higher is fresher), estimated from each player's real fatigue level plus how much of the match has elapsed so far, using the same fitness model that already governs the weekly fatigue/substitution system — a starter who's played 70 minutes reads noticeably more tired than one just brought off the bench.
- Tackles were previously only recorded as "won" with no sense of how many were actually attempted — the match engine now tracks both, so the new Tackles column reads like a real stat (e.g. "6/8") instead of just a win count.
v1.10.1 Fixed: League Table defaulted to a broken, unfiltered table for anyone outside the Premier League
- Confirmed bug: a manager anywhere in the English pyramid below the Premier League (Championship, League One, League Two) had no domestic_league tag of their own, so the page's league/division filter silently fell through to "no filter at all" and showed every club in the entire save — all 4 English divisions plus La Liga, Bundesliga, Serie A and Ligue 1 — merged into one meaningless table sorted by points.
- The League Table page now always defaults to your own division/league and filters the table to just that competition, with the other 7 available as a proper row of tabs (Premier League, Championship, League One, League Two, La Liga, Bundesliga, Serie A, Ligue 1) to switch between — verified directly against both live saves that a Chelsea manager now sees only Premier League clubs and a League Two manager sees only League Two clubs.
- Also shortened the tab labels and gave the active one a clear highlighted pill instead of relying on bold/underline that was easy to mistake for a hover state, and fixed the tabs wrapping messily on longer league names.
v1.10.0 Match commentary now shows which team a goal or chance belongs to
- Every commentary line (goals, cards, injuries, substitutions) is now tagged with the team it belongs to and shown with that club's colour as a left-hand stripe plus the club name inline, on both the live match screen and the full match report — previously a line like "Elijah Nakamura splits the defense and Finn Johnson finishes it off!" gave no clue which side had scored.
- Old matches played before this change still display correctly — their commentary was saved without team information, so those lines simply show with no colour stripe instead of breaking.
- The club colour lookup this relies on only covered the Premier League and the biggest continental clubs, so most English pyramid and lower-division matches (e.g. Rochdale vs Walsall) still showed as flat grey either side — filled in real kit colours for every one of the 168 clubs across all 8 leagues so every save gets proper team-coloured commentary, not just Premier League saves.
v1.9.1 Fixed: v1.9.0's free agent fix only helped brand new saves, not ones already running
- The previous fix only seeded free agents when a save is first created, so anyone already partway through a save (or between season boundaries, when the pool only refills once a year) still saw an empty Free Agents page — confirmed directly. Added a small weekly top-up instead: any save's free agent pool that drops below 8 players gets released a handful more (never goalkeepers, never from a club that's already thin), checked every single week regardless of when the save started or how long it's been running. Self-limiting either way, so it tops up when genuinely needed and leaves a healthy pool alone.
v1.9.0 Fixed: no free agents or transfer-listed players at all in week 1
- Real bug fix: a brand new save started with a genuinely empty Transfer List and Free Agent pool — both only ever get populated by ongoing processes (AI clubs listing surplus players week to week, contracts expiring once a season), so week 1 had nothing to browse on either page. New saves now seed a modest, realistic starting pool of each (never touching goalkeepers, so no club starts a save short at the back). Also raised how often AI clubs list a player week to week for a healthier ongoing supply, not just a one-time fix for week 1.
- Added 'Hide players unlikely to join' to the Transfers browse list and the Transfer List page — filters out anyone who'd reject literally any fee your club could afford, instead of finding that out only after submitting (and waiting on) a doomed offer.
- Checked the underlying logic this relies on directly: a happy Premier-League-level star in their prime will not join a bottom-tier club for any fee that club could realistically raise — confirmed with real numbers (required fee ~£108M+ against a £15M budget, correctly rejected). An unhappy, transfer-listed, or veteran (34+) player is a genuinely easier sell and can move to a smaller club if that club can actually afford them — confirmed a mid-table club affording an unhappy 35-year-old star where the same club couldn't touch their prime-age, contented self — but even then, a truly small club's budget still won't stretch far enough, so it stays rare rather than becoming common.
v1.8.0 Fixed unrealistic new-save squads: crazy position splits, and no home-nation bias
- Real bug fix: a freshly generated 16-player squad picked each player's position fully independently, which had enough natural variance to regularly produce things like 4 goalkeepers and barely any real defenders — confirmed directly as a repeatable problem, not one unlucky save. Every new squad now targets a realistic broad split (2 goalkeepers, 6 defenders, 5 midfielders, 3 forwards) every time, while still varying naturally which specific sub-position (e.g. centre-back vs full-back) within each.
- Real bug fix: nationality was drawn from the exact same global pool for every club in the game, regardless of which country's league it played in — an English League Two club had no more chance of fielding English players than a Bundesliga side did. Clubs now skew toward their own country's players, more heavily the lower the division (~90% British in League Two, ~55%+ in the Premier League and the other top flights) — confirmed directly with a 500-player sample at each level.
v1.7.2 Key Attributes now shows 5 per player instead of 3
- Every 'Key Attributes' list (Squad, Free Agents, Transfer List, and Scouting reports) now shows 5 position-relevant attributes instead of 3 — e.g. a keeper adds Positioning and 1v1s, a centre-back adds Positioning and Strength, a striker adds Pace and Technique. Same one place (KEY_DISPLAY_ATTRS) drives all of them, so this applies everywhere the feature is shown, not just one page.
v1.7.1 Fixed: intermittent 'Internal Server Error' from a database lock
- Real bug fix: pages could occasionally fail outright with a database-locked error — made noticeably more likely by v1.3.0's online-status tracking, which added a small database write to nearly every single page load. SQLite was running in its default mode, where any write briefly locks the whole database file and a second request arriving at the same moment fails immediately instead of just waiting. Switched to WAL mode (readers and a writer can proceed together) and gave writes a real timeout to wait out a brief lock instead of failing outright — confirmed directly this resolves it. The online-status write itself is now also wrapped so that even a genuine database hiccup there can never fail the actual page around it.
v1.7.0 Pick your lineup right from the Squad page
- The Squad page now shows your current formation and style up top, and every player row gets a Slot dropdown — GK through every outfield slot in your formation, down to Sub 1-7, or Reserve. Picking one moves that player there immediately (bumping them out of wherever they were before, same as the Tactics page already does), so you can set your team without leaving the Squad view. Formation/style changes, captains, set-piece takers, and per-slot instructions still live on the Tactics page, linked right above the squad table.
v1.6.0 Fixed: league position didn't actually decide European qualification (or promotion/relegation)
- Real bug fix, and a significant one: at the end of a season, the database's season boundary was being advanced to the NEW season before both promotion/relegation and European qualification were computed — both rely on reading the league table for the season that just finished, and with the boundary already moved, every match from that season fell outside the filter. The result was a standings table where everyone showed 0 points, silently falling back to whatever order clubs happened to be stored in — so final league position frequently had no real bearing on who got promoted/relegated or which European competition (if any) a club actually qualified for. Confirmed directly and fixed by computing both before the season boundary advances, not after.
- Season/week display fixed: the dashboard and Saves screen were showing a single ever-increasing week count (week 235, and climbing forever) instead of a real Season/Week pairing. Now shows Season X, Week Y, where Week resets to 1 at the start of each new season.
- Squad page's Attributes filter has 'Key Attributes' back as an option (the position-specific 3-attribute view) — and it's the default again.
- Fixed full-backs (DL/DR) showing Crossing as a 'key' attribute despite being pure defenders — swapped for Marking, alongside their existing Tackling and Pace. Wing-backs (WBL/WBR) keep Crossing, since delivering from the flank genuinely is their attacking role in a back-3/5 system.
- Free Agents and Transfer List pages now have a Position filter and a 'Show Key Attributes' checkbox, matching the filter pattern the Squad and main Transfers pages already use.
v1.5.0 Fatigue is real now: it affects selection and performance, plus a Recent Matches list
- Added match fitness/fatigue, tracked per player (0 fresh - 100 exhausted): builds up from actually playing (more for a full start than coming off the bench, less for a player with high Natural Fitness), and recovers a bit every week whether they played or not. A tired player now plays below their normal level in a match (up to a 20% hit to pace/acceleration/agility/stamina specifically — fatigue is physical, not mental).
- Auto-filled lineup and bench slots (which is how every AI club, and any empty slot on your own team, actually gets picked) now weigh both fatigue and recent match form, not just raw attributes — a tired or out-of-form player rates lower for a starting slot than a similarly-able teammate who's fresh and in form. A manager's own explicit slot assignment is never second-guessed either way.
- Added a 'Tired' tag on the squad page for anyone at high fatigue, a Match Fitness % on the player page, and a real Recent Matches list there too (last 10 games: opponent, score, minutes, goals/assists, and that match's actual rating) — previously the player page only ever showed career averages, with nowhere to see individual match-by-match form.
v1.4.0 Morale now actually affects matches, and AI clubs pick real tactics
- Morale used to be tracked for every player and drive transfer requests and contract odds, but a miserable squad played an actual match exactly as well as a delighted one — nothing in the match engine ever read it. It now scales a player's on-ball/decision attributes (not raw physicals like pace) up to 10% for a genuinely happy player, down to 15% for a miserable one, with a 'Content' player around the middle of the scale seeing no change either way.
- AI clubs now actually think about their own tactics instead of sitting frozen on the 4-4-2/Balanced default every club starts with, forever. Each AI club occasionally reviews its setup: formation is picked by whichever of the 5 shapes its actual squad fits best (reusing the same per-slot rating the auto-fill lineup already uses), and style leans attacking or defensive based on whether the squad's own attacking or defensive attributes are stronger, nudged further by the club's season ambition (title push = bolder, relegation fight = more cautious). Never touches a human-managed club.
v1.3.0 See when your co-op partner is actually online
- The Saves screen now shows 🟢 '<name> online' next to a save when the other manager on it has actually been active in the app in the last couple of minutes, instead of no way to tell whether they're currently playing at all.
v1.2.2 Fixed: Random Club only ever picked within whichever league was already selected
- Real bug fix: the 🎲 Random Club button only randomized among the clubs in the currently-selected league, not across the whole pyramid — so it looked like it was just shuffling within one division rather than genuinely picking from anywhere. It now picks a random league first, then a random club within it.
v1.2.1 Fixed spacing on the new-save club picker, and rescaled reputation across the pyramid
- Fixed the Random Club button overlapping the ‘strongest to weakest’ hint text right above it on the new-save screen.
- Rescaled club reputation across the English pyramid so it actually reads as realistic top-to-bottom: the Championship's very best side now lands level with a Premier League mid-table club (50, same band as Brentford/Forest) instead of above it — it was previously stronger on paper than half the Premier League. League One and League Two rescaled the same way beneath it, each division's ceiling landing around the tier above's lower-mid table rather than overlapping upward into it.
v1.2.0 Random club picker and reputation shown on the new-save club list
- Starting a new save now shows each club's reputation right in the club list, sorted strongest to weakest, instead of a plain alphabetical list with no sense of scale.
- Added a 🎲 Random Club button next to club selection (both for yourself and, in co-op, your partner) — picks a random club from whichever league is currently selected, for anyone who'd rather not pick by hand.
- Versioning switched to a strictly sequential vMAJOR.MINOR.PATCH counter — MINOR and PATCH are single digits 0-9 that roll over into the next segment up (so 1.9.9 becomes 2.0.0), but MAJOR itself isn't capped at 9 (9.9.9 becomes 10.0.0, not something else).
v1.1.0 League Two's bottom clubs now actually get relegated, not just left in place
- Previously the bottom of League Two was a dead end — those clubs just stayed put every season, since there's no lower division modeled. Now they're relegated out of the Football League for real, replaced by a club drawn from a dormant non-league pool for your save (the strongest one available comes up first, same as a real promoted side) — generating a brand new one with a full squad if that pool's ever empty. Relegated clubs aren't deleted; they sit in the pool and can be promoted straight back up later.
- Your own club is never sent down this way, regardless of where you finish — there's no football modeled below League Two, so the board backs you for another season instead of leaving you with nothing to actually manage.
v1.0.0 Real contracts, real transfer deals, a squad-page fix, and a genuine cup-name bug fixed
- Real bug fix: an FA Cup Final (or any Premier League club's cup fixture) could report itself under another league's cup name entirely — e.g. ‘Copa del Rey’ for an all-English final — in a save running more than one domestic league. A top-flight club's cup lookup was keying off its domestic_league field directly instead of the same division-based key every other part of the game already uses for this; lower-division clubs were never affected, which is why an earlier, related fix to this exact problem missed this specific case.
- New Contracts page (sidebar link, filter for Players or Staff): renew a player's deal with real added clauses — appearance fee, goal bonus, assist bonus, a clean sheet bonus for keepers/defenders, and a release clause (a fixed fee that guarantees a sale to any bidder, no negotiation). Bonuses are paid for real out of your transfer budget the moment they're actually earned in a match, not cosmetic numbers. Moved off the player page entirely, which now links here instead.
- Transfer offers can now include a makeweight player from your own squad (a real swap deal, not cash-only) and a buy-back clause offered to the selling club — a fixed fee and a window of seasons in which they can force a re-signing later. Both are weighed for real by AI sellers judging an offer, not just recorded. Active buy-back clauses you hold show on the Transfers page with a one-click trigger.
- Squad page now defaults to GK, then Defenders, then Midfielders, then Attackers (real shirt-number order) instead of an alphabetical read of the position code that used to put e.g. AM/C ahead of D/C — click the Pos header again to reverse it.
- The Transfers browse list can now be searched by position and by a specific attribute's range (pick an attribute, set a min/max), and its attribute display now matches the squad page's own Goalkeeping/Attacking/Defending/Physical/Mental filter instead of a fixed three-attribute summary.
v40 Fixed: playing very defensively made you concede MORE goals, not fewer
- Real bug fix: a defending team's own tactical style never actually applied to any duel in the match engine — the variable holding it was computed every possession and then never read. Only the attacking side's style mattered. Practical effect: Very Defensive gave up meaningfully more of the ball (by design) for genuinely zero defensive benefit in return, making it actively worse than Balanced in every matchup tested, never a legitimate 'park the bus' option the way it should be. Now wired in on both sides of the ball, so a defensive setup actually makes you harder to break down, not just more passive.
- Also rebalanced how much a style shifts possession share (Very Defensive/Very Attacking were swinging it by a full 10 percentage points, stacking on top of the attack/defense duel-bias effect above and compounding into a near-unbeatable Very Attacking and a near-unplayable Very Defensive). Cut roughly in half — style still matters, but a low block can now realistically grind out a stalemate against a stronger side instead of just getting overrun regardless.
- Checked this wasn't hiding a formation-level version of the same problem (the classic old flaw where the strongest tactic fielded no wingers at all): it wasn't — every formation in the game includes width, wide positions are weighted at least as heavily as central ones in attacking involvement, and simulated testing confirms modern, wide-attacking shapes (4-3-3, 4-4-2) already outperform narrow ones (5-3-2), not the other way round.
v39 AI clubs now scout visibly (WNT tag), plus a shortlist compare tool
- AI clubs now build their own scouting shortlist week to week, the same table the Scouting page uses — visible on your squad page as a 'WNT' tag next to any of your players an AI club is actively watching, a real early-warning sign before a bid shows up rather than one appearing out of nowhere. Yes — AI clubs do also scout and bid on players you haven't transfer-listed, this just makes that visible instead of invisible.
- AI transfer offers now prioritize a club's own scouted shortlist first (only needs a small edge to trigger a bid), then transfer-listed players league-wide, then a general upgrade hunt at their weakest position as before. A successful bid clears that player off the buyer's shortlist — interest became an actual move, not something still just being watched.
- Added Compare on the Shortlist page: tick 2-4 shortlisted players and see every attribute side by side, with the best value in each row highlighted.
v38 Fixed: transfer-listing a player did nothing to get AI clubs to actually bid
- Real bug fix: AI clubs' transfer-hunting logic never looked at whether a player was transfer-listed at all — a listed player was evaluated exactly like anyone else in the league, so listing someone had no actual effect on whether AI clubs would bid. AI clubs now check every transfer-listed player first, against any position of need (not just their single weakest spot), need only a modest edge over the incumbent rather than a big upgrade, and bid somewhat below full value — a willing seller doesn't command full asking price.
- AI clubs also now attempt something in the transfer market a bit more often each week during a transfer window (up from a 12% to a 20% chance per club) — still most clubs sit still most weeks, but more real activity overall.
v37 New Managers page, and your name shown instead of your login email
- The sidebar and header now show your manager name (once you've filled it in) instead of your login email.
- Added a Managers page (new sidebar link) with a career record for every human manager in the save: current club and formation, reputation, win-draw-loss and goals for/against at your current job, biggest win and biggest loss, trophies won, and your best-ever league finish. Trophies and season finishes are tracked from this release onward — there's no way to reconstruct what happened in a save before it existed.
- Changing clubs or taking an international job no longer starts your career record over — trophies and best league finish carry across every job you've held in a save.
v36 Manager profile: your name, age, and nationality — as the manager, not a player
- New saves now ask for your first name, last name, age, and nationality when you create the save — this is you, the manager, not a generated player. Foundation for upcoming manager-identity features, nothing changes in-game yet.
- Already-running saves pick this up automatically: next time you open one, you'll get a one-time 'Complete Your Manager Profile' prompt before the dashboard loads. Answer once and it's done — carries over automatically if you later change clubs or take an international job.
v35 Squad page: every column sortable, attributes default to Mental, contract/transfer moved to Details
- Every squad table column — Pos, Nat, Morale, Status, not just Name and Age — can now be sorted alphabetically or numerically. Every sortable header shows a small ↕ icon up front so it's clear before you click that it's sortable, not just after.
- Removed the old ‘Key Attributes’ column; the Attributes filter now defaults to Mental and always shows a full column per attribute in the chosen category (Goalkeeping/Attacking/Defending/Physical/Mental). Hover an abbreviated column header (e.g. DEC, WR, LDR) to see its full name.
- Contract renewal and the transfer-list toggle are no longer inline on the squad table — they've moved to the Contract and Transfer tabs on a player's Details page, which now also pre-fills a suggested weekly wage.
- Static assets (style.css) are now served with a cache-busting version tag, so a CSS change shows up immediately instead of possibly sitting behind a stale Cloudflare/browser cache after a deploy.
v34 Squad page: sorting and a tidier filter bar
- Click any column header to sort — Name (A-Z), Age (youngest first), or any attribute column when a category filter is active (highest first). Click again to reverse the order.
- Tidied up the squad page: the Position/Attributes filters now sit in a proper toolbar with a Clear Filters link, and attribute/age values are right-aligned for easier scanning down a column.
v33 Fixed players stuck on international duty, and a clearer label for it
- Fixed players still showing unavailable after the v32 timing fix: that fix stopped NEW call-ups from marking a player unavailable too early, but didn't retroactively release players already stuck by the old bug. This release does — automatically, the next time the server restarts, no action needed.
- The squad page and Loans page now show an orange ‘INT’ tag for players away on international duty, distinct from the cyan ‘Loan’ tag for a real club loan — previously both looked identical. Both now also show the week they're back.
v32 Two real bugs fixed: reputation display, international call-ups
- Fixed club and manager reputation occasionally showing as a long decimal (e.g. ‘45.30000000000001’) wide enough to overflow the dashboard — three places that adjusted reputation by a fraction never rounded the result back to a whole number. Existing saves are cleaned up automatically on first load after this update.
- Fixed a real gameplay bug where international call-ups could mark a player unavailable (‘out on loan’ to their national team) many weeks or even a full season before the actual fixture, making it look like they’d never return. Call-ups now only take effect the week they actually happen.
v31 Squad page filtering
- Added a Position filter to the squad page — show just your centre-backs, forwards, etc. Only lists positions someone in the squad actually plays.
- Added an Attributes filter to switch the squad table from the default Key Attributes column to a full breakdown of Goalkeeping, Attacking, Defending, Physical, or Mental attributes — one column per attribute, for comparing players side by side.
- Both filters work together and combine with the URL, so a filtered view can be bookmarked or shared.
v30 Tactics pitch polish
- Player positions on the tactics pitch are now spaced out dynamically based on the formation in play, instead of every position having a fixed height regardless of formation — fixes tight clusters of players with large empty gaps between them.
- Stay Back / Balanced / Get Forward are now a clearer blue / neutral grey / orange-red on the pitch, replacing two shades of blue that were hard to tell apart.
- Added this changelog.
v29 Cup name and cup bonus fixes
- Fixed the dashboard and cup page showing the wrong domestic cup's name for clubs outside the English pyramid (e.g. a League Two club's nav showing “Coupe de France”) — traced to a single shared field that only ever held one cup's name at a time, now resolved per club instead.
- Fixed the cup bracket page itself mixing fixtures from all 5 domestic cups together rather than showing just the viewer's own competition.
- Fixed a related gameplay bug: the board-confidence bonus for winning a domestic cup was only ever being awarded for the English pyramid's cup, never for the other 4 countries' cup winners.
v28 Real login, PIN-protected saves, login alerts
- Replaced the old open username-only login with real email + password accounts, properly hashed — no more silent account creation on any typed-in name.
- Accounts are set up via a command-line script on the server (manage_users.py), not a public signup page.
- Every save now has its own PIN; all saves are visible to both accounts, opening a specific one requires its PIN.
- Added a drag-to-reposition tactics pitch — dragging a player forward or back on the pitch sets their existing Attacking Freedom setting, as an alternative to the dropdown.
- Added login tracking (visible in-app at /login_history) and optional email alerts on every login attempt, with repeated failures throttled so a guessed password doesn't flood the inbox.
v27 Attribute system overhaul
- Training now grows a player's real 41 detailed attributes (the ones the match engine actually reads) rather than a separate summary score that the match engine never consulted — previously, training was cosmetic and had no effect on how a player actually performed in a match.
- Man-marking, corner takers, penalty takers, and wrong-footed wingers now genuinely affect match outcomes — each of these existed as a setting before but had no real effect on the simulation.
- Dirtiness and Versatility (cards, and playing out of position) wired into the match engine — 39 of the 41 detailed attributes are now actually used somewhere.
- The 5-number summary score is no longer shown anywhere in the interface — squad lists, scouting reports, and player pages all show the real detailed attributes instead.
- Goalkeeper and outfield trainable-attribute lists reviewed and corrected so every position can train what it's actually judged on in a match.
v26 Unified world, manager careers
- Merged the separate pyramid and European-competition game modes into one shared world — every save now includes the full English pyramid plus La Liga, Bundesliga, Serie A and Ligue 1 together, with European competitions running automatically. No more choosing between them at creation.
- Added a reputation gate on job applications, so a manager can't apply for a job far above their proven career record.
- Added unsolicited approaches from bigger clubs for managers who are genuinely overperforming.
v25 and earlier Original build through the CM01/02 redesign
- The bulk of the game as it exists today was built across many earlier versions: the core match engine, real clubs and players, scouting, tactics, transfer market, injuries and suspensions, live match viewing, domestic cups, the 4-division English pyramid, club finances and stadiums, international football (World Cup and continental championships), player morale and manager job security, backroom staff, loans, the Bosman rule, and mobile-friendly layouts.
- The full CM01/02-style visual redesign, match statistics tracking, the transfer list, and more realistic AI transfer behaviour all landed by v25.
- This entry is deliberately a single summary rather than broken out version by version — the detailed record for exactly what changed in each specific early version number doesn't exist, so itemizing them individually here would mean guessing rather than reporting.