Skip to content

Dev Log ยท Anpfiff1, Youth, Balancing, Measuring

A youth academy, and six goalkeepers in one intake

5 to 10 September 2026:

The youth academy is the largest part of 2.1.7. Three age groups with their own league, training by position, scouting, poaching, the first pro contract. Building the screens was the manageable part. The work sat in the numbers behind them, and several assumptions about those were wrong.

An intake is a team, not a sample

A new academy draws up to fourteen players at once. They were drawn one at a time, using the position distribution the senior squad uses, fourteen independent rolls at roughly fifteen per cent goalkeepers.

Measured, one under-19 side came out with six goalkeepers and another with none at all. Both are perfectly normal for independent rolls and both are useless: an intake is a team.

The draw now counts the age group and fills the largest gap against a target shape: one keeper, four defenders, four midfielders, three forwards across twelve places.

The preview said 650 weeks; it took 227

The squad list shows how long a talent needs for its next strength step. The calculation only counted training.

That left out what a youth player gets on every matchday anyway: experience for turning out. After the rebalance that was around sixty per cent of the bare base rate, and a poorly supported player showed 650 weeks where he needed 227.

Appearances are now counted in, and only appearances. Goals, assists and clean sheets come on top, but they are earned, not predictable. The preview is deliberately the pessimistic number.

A help text that states numbers has to compute them

The academy help text read: "Without training and a coach, a strength step takes 71 weeks." Hard-coded, in 49 languages.

After the rebalance that number was off by a factor of five. Today it is 367. The sentence now comes from the calculation itself and can no longer rot, and the guard checks that the old number does not come back.

Market value is built for professionals

Poaching someone else's talent costs a training compensation fee. The first draft took a share of the market value, so there would be only one source of prices.

Measured, it produced nonsense. Market value rerolls on every call and explodes for young players: the same strength-3 talent cost four million at 16 and eight hundred thousand at 17, and every six ran into the cap.

It is now calculated the way a real training compensation is: years of training times the annual rate for the club's tier, weighted by potential.

Exceptional talents are a quota, not a probability

How good an intake turns out was meant to depend on the club's tier. Measured, it barely did: a top club averaged 2.8 fives and 1.8 sixes, an eighth-tier club 2.2 and 0.7. The difference was there, but it was not one anybody notices.

It is a quota now instead of a roll: one five for the top five tiers, none below, and no six at all out of your own youth. A six is trained, not found. Potential is untouched by this, a player who starts as a four can still work his way there.

The top third of the potential scale did nothing

Potential runs from 0 to 99, target strength from 1 to 6. The conversion rounded and clamped, so potential 55 and potential 99 were exactly the same.

Potential is now two things at once: the ceiling and the pace. Two talents with the same target strength arrive there at different speeds.

The scout was a button without a limit

Scouting returned a result immediately and could be repeated at will. Whoever had money clicked until something good turned up.

The scout now travels in three ranges, each with its own price and its own wait: one, two or three matchdays, costs times 1.0, 2.2 or 4.0, and in return up to two more candidates and up to eleven more points of potential. Plus an allowance of two to four trips a season, depending on the academy level.

What deliberately does not go into the save

Scouting does not take players out of other academies, because there are none: 1,063 AI clubs with forty youth players each would be around 42,000 additional players in every save. The candidates carry a real club of origin instead, and its tier decides quality and price.

And finally, the umlauts

In source code we write ue and ae out of old habit. In a string a player reads, that is simply wrong. Through the scripts that create the text entries, three German strings reached the translation file with those spellings intact.

It was not found by reading the source. It was found in the finished screen.

The guard for this area carries three assumptions in its header that were wrong at design time. They are there because they would repeat themselves at the next rebuild.

Warm regards from the workshopDigitale Manufaktur Rudolstadt