A real 1–20, and roles you have to teach
Something had been quietly bothering me. The attribute card showed a 1–20 scale, the way every football manager game I've played shows a 1–20 scale, except mine was taking a 3–18 number and stretching it onto the ruler for display. Nobody was lying exactly, but the number you read wasn't the number the game used. Once you know a thing like that, you start distrusting the rest of the sheet.
The other one was positions[0]. Whatever fell out of the generator first was destiny. A player was a left-back because a draw on the day he was born said left-back, and no amount of training was ever going to change his mind about it.
Two dense days, after an evening spent on the weight map, and both of those are gone.
The scale is native now. 1–20 is what's stored and what the formulas use, and the remap function has been deleted. Worlds that already exist rescale once and resync current ability so today's elites stay elites — that's a seeder with a large warning painted on it, because a rescaled save and a native formula are both fine on their own and a disaster together. That's an ops discipline, not something I'm going to hide behind a soft clamp.
Current ability counts the whole sheet. The role weight map still carries most of the sum, so a striker is mostly judged on striker things, but leftover skills and off-role floors contribute too. A centre-back's penalty taking and a winger's jumping aren't decorative zeros anymore. Keepers are scored in the keeper family and stay there, and generation fills the opposite family near the floor and won't use those attributes to chase a flattering overall.
Listed roles are earned. Every player carries a 0–100 familiarity score per role, and the listings fall out of those scores: three outfield roles at most, goalkeeper exclusive, no blessed first position. Retraining is a classroom session that hops from the closest role a player already knows, so a left-back learning left wing-back is a short trip and a striker learning centre-back is not. Sunday progress can list a role once he's competent at it. Roles he never uses and was never natural in decay. The last listed role won't unlist, because a player with no positions is a bug, not a story.
And it costs you on Saturday. The engine applies a banded out-of-position multiplier straight from those familiarity scores — versatility can cut what's left of the penalty — without touching stored attributes mid-match. The existing fatigue multiplier already owns that job and I wasn't about to have two things fighting over the same numbers. Nest, the shared utilities and Go all read the same tables; the match engine stays the only place the penalty actually lands.
What I refused to print is a second overall. No per-position CA on the card. The moment there are two overalls, every conversation about a player becomes a conversation about which overall you mean, and I'd be explaining that forever. Instead the card highlights the key and useful attributes for whichever role you're comparing against — pick it from the dropdown or click the bio-pitch — and hidden ? values stay unhighlighted, because highlighting a value you can't see is a hint with extra steps.
The tuning was the hard part, as usual. Too little leftover coverage and every specialist is a copy of every other specialist. Too much and roles dissolve. Too harsh an out-of-position band and covering an injury is suicide; too kind and familiarity is flavour text.
Two things I'll own up to. Match minutes are better at recording when a player filled a role than at crediting that time toward becoming natural in it. And classroom retraining can still overshoot a "competent enough" cap I haven't pinned down yet. Both are follow-ups. I'd rather write them here than soften them quietly.
The nice outcome is that a manager can now be wrong about a role in a way the engine will punish him for, which is more or less the point of learning one.