Some training and development conventional wisdom for FM24

by LightningFlik, 1 day, 10 hours ago

Some training + development conventional wisdom I'm confident I can clear up at this stage:

- game-time contributes towards development. Yes
- you have to play at least 60 minutes. No. Every minute counts (in 5-minute steps).
- match rating matters. No (except player of the match, worth one extra step)
- the result matters. A little. If he plays 45+ minutes, a win adds one 5-minute step and a defeat takes one away.
- the competition's reputation matters. Yes. It's to do with the "established level" of the player relative to what he's playing at.
- players under 18 don't need to play competitive matches. No Maximising match experience for an U18 player amounts to ~1.5–1.7 CA extra a month (measured on two players: Kellyman and Proctor)

EDIT: how I learned this. I've found the function that computes monthly player growth (0x144F70400 if you want to open it up in Ghidra) and I've been calling it willy-nilly. One thing I found is the presence of what I'm calling Match Points, but you can think of it like match experience. And this exists per player, in RAM; you can view it in Cheat Engine right now. (Either find a Person object and look at -0xCA before it or find their Player object and look for +0x1AE after it; in the next 15 bytes are also the number of matches a player has played since their last monthly development and last month's values, but we only need to care about Match Points).

These points are added whenever a player takes part in any match: league, cup, international, and friendlies too (friendlies are scored as non-competitive, which lowers the minimum multiplier, see the formula below). The amount you get scales with a) the level of the competition relative to the level the player has established himself at (not his reputation; see EDIT 2) and b) the number of minutes played, with smaller effects from the opponent's reputation and the average CA on the pitch. The person I've been testing, 17 year old Omari Kellyman got 2.5x as many points for playing in an EPL game vs his U21 side.

Here are some players I monitored for a Premier League match:

| Player | Age | Reputation | Minutes | Rating | Points | Per minute |
| --- | --- | --- | --- | --- | --- | --- |
| Kellyman | 17 | 4989 | ~102 | 7.1, goal | 57 | 0.56 |
| Proctor (GK) | 16 | 3090 | 65 | 6.6 | 28 | 0.43 |
| Gauci (GK) | 23 | 5345 | ~37 | 6.7 | 16 | ~0.43 |
| Rogers | 21 | 6302 | ~19 (injured) | 6.6 | 6 | 0.32 |
| Zaniolo | 24 | 7295 | ~102 | 7.1 | 30 | 0.29 |
| Bailey | 26 | 7094 | ~83 | 7.0, goal | 24 | 0.29 |
| Tielemans | 26 | 7335 | 50 | 6.4 | 14 | 0.28 |

Match Points themselves aren't capped, but the monthly development only looks at which band the total falls in, and the top band starts at 150 (bands at 20/40/60/80/100/125/150). Going above 150 makes no difference, and most of the benefit is already there at 125. A 90-minute Premier League game is worth about 55 points to Kellyman, and a U21 game only about 20–23, so they are not equivalent: 150 takes about 3 senior games or about 7 U21 games a month.

And how do these points affect monthly CA growth?

|    Player    | Age |  0  |  20  |  40  |  60  |  80  |  100  |  125  |  150 |
|---|---|---|---|---|---|---|---|---|---|
| Proctor (GK)  | 16  | +0.34 | =    | =    | =    | =    | +0.96 | +2.02 | +2.08 |
| Kellyman      | 17  | +1.26 | =    | =    | =    | =    | +1.56 | +2.72 | +2.76 |
| Rogers        | 21  | 0    | 0    | 0    | +0.28 | +0.32 | +0.42 | +1.62 | +1.80 |
| Gauci (GK)    | 23  | +0.08 | +0.10 | +0.12 | +0.50 | +0.92 | +1.06 | +1.40 | +1.40 |
| Zaniolo      | 24  | +0.10 | 0    | 0    | 0    | +0.92 | +0.98 | +1.00 | +1.04 |
| Tielemans    | 26  | 0    | 0    | 0    | 0    | +0.68 | +0.72 | +0.78 | +0.84 |
| Bailey        | 26  | −0.04 | −0.04 | −0.04 | −0.02 | −0.02 | −0.02 | −0.02 | −0.02 |
| McGinn        | 28  | 0    | −0.22 | −0.10 | 0    | 0    | 0    | 0    | 0    |
| Martínez (GK) | 30  | 0    | −0.12 | −0.04 | 0    | +0.04 | +0.06 | +0.06 | +0.06 |
| Digne        | 30  | 0    | −0.14 | −0.02 | 0    | +0.04 | +0.04 | +0.04 | +0.04 |
| Olsen (GK)    | 33  | −0.28 | −0.82 | −0.52 | −0.30 | −0.24 | −0.18 | −0.06 | −0.04 |


"=" means identical to the 0 column, seed for seed. Each cell is the mean of 50 seeds (random runs) of one month, so differences of a few hundredths are noise.

Some takeaways
- Kellyman grows very quickly even without match-time (we knew this, it gets repeated a lot) and this growth doesn't change until he reaches 100 Match Points. From 125 he adds about another 1.5 CA a month. (That said, if you don't want to max out a player's CA as fast as possible, not playing him will still let him develop reasonably well.)
- As you can see, senior (21+) players get basically all of their development from playing time. I think this was known but here it is laid-out. (I've since tested 19 and 20: with no matches they keep only about a fifth of the youth growth, because they stay on the youth path only if a Determination roll passes.) How many minutes that takes depends on the player: seniors earn about 0.3 points a minute in the Premier League, so 80 points is roughly 270 minutes and 125 points roughly 420 (an estimate from the table above, not measured directly).

You could test this by finding the day a player gets his training benefit (it's the person's row ID, at person +0x08, divided by 28, take the remainder and add 1. Nobody develops on the 29th–31st) and, the day before, hardcoding his Match Points to 0, advancing, measuring his CA change, reloading, setting the value to 150 and comparing. (Note: randomness is at play in the development function, so you will see variations when running a tiny sample size, but it should get across the point).

And, because I couldn't help myself, I started changing mental attributes while doing this (1–20 scale, 50 seeds each, so ±0.02–0.04 is noise: Determination 20 and Ambition 20 made no real difference for Kellyman).

Kellyman  baseline        0:+1.26 20:+1.26 40:+1.26 60:+1.26 80:+1.26 100:+1.56 125:+2.72 150:+2.76
Kellyman  20 determination  0:+1.28 20:+1.28 40:+1.28 60:+1.28 80:+1.28 100:+1.56 125:+2.74 150:+2.78
Kellyman  20 professionalism 0:+2.10 20:+2.10 40:+2.10 60:+2.10 80:+2.10 100:+2.10 125:+3.38 150:+3.46
Kellyman  20 ambition        0:+1.28 20:+1.28 40:+1.28 60:+1.28 80:+1.28 100:+1.56 125:+2.74 150:+2.80
Kellyman  1 determination  0:+0.50 20:+0.50 40:+0.50 60:+0.50 80:+0.50 100:+0.70 125:+1.80 150:+1.86
Kellyman  1 professionalism 0:+0.60 20:+0.60 40:+0.60 60:+0.60 80:+0.60 100:+0.70 125:+1.86 150:+1.86
Kellyman  1 ambition        0:+0.46 20:+0.46 40:+0.46 60:+0.46 80:+0.46 100:+0.56 125:+1.70 150:+1.78
Kellyman  set all to 1  0:+0.06 20:+0.06 40:+0.06 60:+0.06 80:+0.06 100:+0.08 125:+1.08 150:+1.08
Kellyman  set all to 20  0:+1.96 20:+1.96 40:+1.96 60:+1.96 80:+1.96 100:+1.96 125:+3.36 150:+3.46

There's a lot more experimentation to be done (all will be possible via scripts when I release this addition to my simulator app) but I've got a feeing I won't be able to nail the exact mechanics down. Attribute change for lots of reasons, not just monthly growth and I don't think I'm going to be able to chase them all down.

EDIT 2: here's the formula for Match Points, by the way:

minutes * match weight * level ratio

- minutes is the (smaller of minutes played and 90) / 5, rounded down, at least 1. Played 45+ minutes: +1 if his team won, −1 if it lost (0 for a draw), and +1 for player of the match (the player-of-the-match check is my best reading of the code, not confirmed)
- match weight (average CA of everyone who played, weighted by minutes and from both teams / 10 + competition level + opponent's reputation / 500) / 40 + 0.5. Each of the three terms is rounded down. In competitive matches it's at least 1.0.
- level ratio is competition level / the highest level the player has established himself at (visible in Cheat Engine at player +0x1BC; 1.0 if he has none yet). If the competition is at or above that level, it's * (1.5 − apps/120) while he has fewer than 60 appearances at that level. Clamped to 1.0 - 2.0 (0.85 - 2.0 in friendlies)

Basically this:

- There's no 60 minute threshold; points for up in 5-minute steps from the first minute.
- ratings, goals and assists are not in here; they don't count. (The one exception is the player-of-the-match bonus, worth one extra 5-minute step.)
- Why youngsters earn about twice as much per minute. It isn't age or reputation, it's level ratio. Kellyman's established level is 1, so a Premier League game hits the 2.0 cap. Zaniolo (established level 17) and Tielemans (level 18) are already at Premier League level, so they get about 1.1.
- Competition level is competition reputation / 10 FYI (at least 1).
- The win/loss check compares each side's goals, a byte at decimal offset 338 on each side's match object (not the team). I'd earlier mistaken this for a "team strength" value.

ANOTHER EDIT: chances are that I've updated this since you last read it due to new things I've learned (probably due to clarifications requested from other people, thanks!)

6

@LightningFlik, great findings! :thup:

It deserves its own thread for more visibility.

0

Grazie, that's generous of you.

0

Good stuff there! I would like to know if any training schedule has impact in match performance, other than indirectly through attribute gain, condition, match sharpness, fatigue, happiness, and so on. How much does tactical familiarity affect the match engine?

0

Fantastic findings @LightningFlik! It's great that even in the testing you're making, you're coming to the same answers as before, since it gives corroboration to what was found previously.

Several questions:

"Match Points max out at 150."

Maxes out... per month? When does it reset? On the 1st of next month? The 2nd? The 4th? The 5th? This is important to know to understand when should we start playing our wonderkids again or when we should give match time to others since the wonderkid has reached his limit for the month.

"As you can see, senior (21+, but I've not tested 19 or 20)"

It's important to nail this down to see at what exact age does the "can improve without match time" mechanic ends, to understand when should we definitely make sure they are playing.

"Bailey        | 26  | −0.04 | −0.04 | −0.04 | −0.02 | −0.02 | −0.02 | −0.02 | −0.02 |"

Also, why is the player Bailey decreasing in CA despite playing? Was he already at his CA limit?

"the highest level the player has established himself at"

What does this mean? What is "establishing himself" means?

Can't wait to see what more comes of this!

0

ZaZ said: Good stuff there! I would like to know if any training schedule has impact in match performance, other than indirectly through attribute gain, condition, match sharpness, fatigue, happiness, and so on. How much does tactical familiarity affect the match engine?

Both good questions I'll need to spend time investigating. I've done very little research in to either.

For now I know that there are situational attribute boosts from the different Match Focus options you can select. I think it's stuff like +1 concentration after gaining/losing possession for and +1 awareness at set pieces. I've only had a cursory look (and not looked at all at other training types).

0

Jolt said: Also, why is the player Bailey decreasing in CA despite playing? Was he already at his CA limit?

Because the monthly development function changes the game, I have to reload in between running it so as to keep working from the same blank slate. If I recall, Bailey got injured in one of the reloaded timelines, which is why he declines. I'll load the save when I get in this evening to double-check.

0

LightningFlik said: Because the monthly development function changes the game, I have to reload in between running it so as to keep working from the same blank slate. If I recall, Bailey got injured in one of the reloaded timelines, which is why he declines. I'll load the save when I get in this evening to double-check.

Thanks. Definitely important to check.

I added some questions to the previous post that the forum ate.

0

Jolt said: What does this mean? What is "establishing himself" means?

Sorry I had to double-check my notes. A player's match level is competition reputation / 10 where "competition reputation" is the highest reputation domestic league they have made 11+ appearances for in a single season.

"Played" means appearances + (subs / 3).

So Andre Onana, at the start of FM 24, has a level of 17. He plays for Man Utd (those were the days) who are in the Premier League (rep of 185) but he has only played four games for them. So his level comes from the 24 games he spent playing in Serie A.

I'd be intrigued to see if international competitions counted, if you had one that ran for at least 11 games.

0

Jolt said: "Match Points max out at 150."

Maxes out... per month? When does it reset? On the 1st of next month? The 2nd? The 4th? The 5th? This is important to know to understand when should we start playing our wonderkids again or when we should give match time to others since the wonderkid has reached his limit for the month.


The value keeps going up and up but it's clamped to 150 when it's read by the development function. This happens on a player's development day every month, at which point it's reset.

To know when a player advances, you'd need to change the FM settings to have it show the UIDs of every screen you're on (this is an option in the game), or use something like FMRTE, and calculate a player's development day from that.

Jolt said: "As you can see, senior (21+, but I've not tested 19 or 20)"

It's important to nail this down to see at what exact age does the "can improve without match time" mechanic ends, to understand when should we definitely make sure they are playing.


I'll check this tonight. I can just call the monthly development function with a player and fudge his age and see at what point he stops growing naturally. I can probably map out when outfield players and goalkeepers start to decline too, although that will be dependent on some of their attributes (whereas the "need game time" rule I think is a one-size fits all deal).

0

Are late bloomers a thing in FM? I've sacked off work because I'm under the weather and I've fired up FM. Some players are not responding predictably at all when simulating their growth through the years.

0

LightningFlik said: Are late bloomers a thing in FM? I've sacked off work because I'm under the weather and I've fired up FM. Some players are not responding predictably at all when simulating their growth through the years.
Yes, think it was introduced in fm24. But honestly they aren't that common to count on it.

0

LightningFlik said: here's the formula for Match Points, by the way:

minutes * match weight * level ratio

- minutes is the (smaller of minutes played and 90) / 5. Played 45+ minutes: +1 if his team is stronger, −1 if weaker, and +1 for player of the match
- match weight (average of a per-player value (probably CA, I haven' checked) over everyone who played / 10 + competition level + opponent's reputation / 500) / 40 + 0.5
- level ratio is competition level / the highest level the player has established himself at (visible in Cheat Engine at player +0x1BC). * (1.5 − apps/120) while he has fewer than 60 appearances at that level. Clamped to 1.0 - 2.0



LightningFlik said: Sorry I had to double-check my notes. A player's match level is competition reputation / 10 where "competition reputation" is the highest reputation domestic league they have made 11+ appearances for in a single season.

"Played" means appearances + (subs / 3).

So Andre Onana, at the start of FM 24, has a level of 17. He plays for Man Utd (those were the days) who are in the Premier League (rep of 185) but he has only played four games for them. So his level comes from the 24 games he spent playing in Serie A.

I'd be intrigued to see if international competitions counted, if you had one that ran for at least 11 games.


I was going over this. Several questions:
1. To clarify, wherever you mention competition level, you're talking about the following equation: competition reputation / 10 am I correct?
2a. When you mentioned "while he has fewer than 60 appearances at that level" in the level ratio part, what you're saying is, in this equation: (1.5 − apps/120) the "apps" function maxes out at 60? Meaning, if a player has appeared more than 60 times, it doesn't go over 60?
2b. What does apps count? Are they the apps per month? Per year? Per club? Per league? Do the subs count (as you've explained in the second quoted post)?
3. On your "minutes" section, you wrote this: "Played 45+ minutes: +1 if his team is stronger, −1 if weaker, and +1 for player of the match". Does this mean that only if the player plays for 45+ minutes, if the player's team is stronger (meaning, he's playing against weaker opposition) he gets a +1, and if the player's team is weaker (meaning, he's playing against stronger opposition) he gets -1? And if he plays less than 45 minutes, it does not matter if the opposing team is stronger or weaker for match points?

Now, to ensure me (and others) can follow the logic, let's make an example. Please correct as needed.

Let's imagine a player, John Doe, playing in Man Utd, against Liverpool (club rep 9000), for the Premier League (league rep 185). This season, John Doe has played in 14 games for Man Utd in the Premier League. He ends up playing 30 minutes vs Liverpool. The average CA of everyone that played the game is 150.

Minutes: (45/5)-1 (because Liverpool is stronger than his team Man Utd). This ends up calculating for a result of 8.
Match weight: (((150/10)+(185/10)+(9000/500))/40)+0.5. This ends up calculating for 1.7875.
Level ratio: (185/10)/185*(1.5-(15/120)). 185 because that's the reputation where John Doe was involved in 11+ games, and 15 because it was the previous 14 apps, plus this one against Liverpool where he played. This calculates for 0.1375, which gets brought up to 1, as the floor you mentioned.

So, it ends up being 8*1.7875*1 = 14.3 match points for the 45 minutes John Doe played against Liverpool.

Is this logic correct?

If everything remained the same, but his team played a weaker team, in the minutes equation, he'd have (45/5)+1, which would ultimately result in 16.0875 match points, correct?

So, playing weaker teams (presuming same league rep) and letting the player play 45 minutes or more gives more match points that hypothetically unlocks faster development.

EDIT: Edited the calculations to put the player playing 45 minutes.

0

You should give friendlies a test too, for the age 18< players. And what if it's a friendly against a big team rather than a small one.

I would think that friendlies have similar results to u18/21 matches, as they would share a similar competition reputation (I assume friendlies are '1' rep?).

I think this would be useful to know because there aren't 6 u21 matches in a month, but it can done with friendlies.

If I'm thinking about this correctly, it means that no one has actually been maxxing out their youth development. Assuming friendlies can be used as a substitute, that still means you'd need 8 friendlies a month (8 because the player wont play 90min every match + you won't track what specific day of the month each player updates). I doubt anyone has been scheduling ~80 games/season for their u21s/u18s.

It would also mean overloading the youth teams with players is a bad idea. It was already bad from a fitness perspective, but now it seems you would miss out on the attribute gains too.

I also wonder if this means there isn't a CA hard cap on player growth per season. Before I heard the cap was something like ~25 CA. Then someone said I think they got 30CA, which suggested there is no cap. The best monthly growth rate you got was +3.46 CA I think you're saying, so that would be ~38 CA/season? Whereas without reaching the Match XP threshold of 100, it tops out at ~20 CA/season.

0

Thanks for the questions, I'm really pleased to see people engaging with this. I had a worry at 2AM this morning that amounted to "maybe it's too close to FM 27 and nobody else cares about this." (Although the mechanics are probably largely unchanged.)

Jolt said: 1. To clarify, wherever you mention competition level, you're talking about the following equation: competition reputation / 10 am I correct?

Correct. Competition reputation is exactly what it sounds like; the "level" is what I'm calling that divided by 10.

Jolt said: 2a. When you mentioned "while he has fewer than 60 appearances at that level" in the level ratio part, what you're saying is, in this equation: (1.5 − apps/120) the "apps" function maxes out at 60? Meaning, if a player has appeared more than 60 times, it doesn't go over 60?

Let me restate this so it's clear (I probably made a hash of it in the original post and I'll have to go back over it):

The level ratio is the competition level / played level. (played level has a minimum of 1, so as not to divide by 0. If competition level >= played level (i.e. he's playing above his level) and he has fewer than 60 appearances at the played level, multiply by (1.5 − apps/120). Then clamp to 1 - 2.

So appearances is always < 60 in this scenario.

Also that above clamp, I'm now realising, is only for competitive matches. In non-competitive matches, it's clamped between 0.85 - 2.

Jolt said: 2b. What does apps count? Are they the apps per month? Per year? Per club? Per league? Do the subs count (as you've explained in the second quoted post)?

Per season. (Also I'm starting to think it might be an average of all of his seasons, meaning the value can go down if he is traded to lower leagues late on in his career, but don't even worry about that yet, I've not tested it).

Jolt said: 3. On your "minutes" section, you wrote this: "Played 45+ minutes: +1 if his team is stronger, −1 if weaker, and +1 for player of the match". Does this mean that only if the player plays for 45+ minutes, if the player's team is stronger (meaning, he's playing against weaker opposition) he gets a +1, and if the player's team is weaker (meaning, he's playing against stronger opposition) he gets -1? And if he plays less than 45 minutes, it does not matter if the opposing team is stronger or weaker for match points?

Your question has reminded me that I've got a big fat "team strength?? what?" next to this in my notes. I've just checked it by adding breakpoints to the game and it looks like you get +1 if your score is higher. So you gain a bonus 5 minutes play-time essentially if you win. Huh. Results do matter (but not personal performance).

And to answer your question, yes, this only occurs if you play at least 45 minutes. That check is done here. You can attach a debugger to this and see it yourself in real-time.



Jolt said: Now, to ensure me (and others) can follow the logic, let's make an example. Please correct as needed.

Let's imagine a player, John Doe, playing in Man Utd, against Liverpool (club rep 9000), for the Premier League (league rep 185). This season, John Doe has played in 14 games for Man Utd in the Premier League. He ends up playing 30 minutes vs Liverpool. The average CA of everyone that played the game is 150.

Minutes: (45/5)-1 (because Liverpool is stronger than his team Man Utd). This ends up calculating for a result of 8.
Match weight: (((150/10)+(185/10)+(9000/500))/40)+0.5. This ends up calculating for 1.7875.
Level ratio: (185/10)/185*(1.5-(15/120)). 185 because that's the reputation where John Doe was involved in 11+ games, and 15 because it was the previous 14 apps, plus this one against Liverpool where he played. This calculates for 0.1375, which gets brought up to 1, as the floor you mentioned.

So, it ends up being 8*1.7875*1 = 14.3 match points for the 45 minutes John Doe played against Liverpool.

Is this logic correct?

If everything remained the same, but his team played a weaker team, in the minutes equation, he'd have (45/5)+1, which would ultimately result in 16.0875 match points, correct?

So, playing weaker teams (presuming same league rep) and letting the player play 45 minutes or more gives more match points that hypothetically unlocks faster development.

EDIT: Edited the calculations to put the player playing 45 minutes.


Minutes

If John Doe plays for 45 minutes then the minutes calculation is correct. 45 / 5 = a step count of 9.
(I fear I might have sent you down a rabbit hole by carelessly saying the team strength is what causes the +/- 1; it is the result now, so to keep your maths correct I'll assume Man Utd lose. This makes his step count 8.)

If he played 30 minutes then step count is 6 and the result doesn't matter.

Match weight

Level is a whole number, rounded down. So 185/10 becomes 18.
I've just checked what the per-average player is since I was very lazy last night and didn't even follow up: it's the minutes-weighted average CA of every player who appeared in the match for either team. To get the weighted average: sum up the CA of every player who got minutes multiplied by their minutes, then divide the whole thing by the total number of minutes played.

So John Doe is 45 minutes * 150 CA = 6,750
His replacement is the same
21 other players (assuming nobody else was subbed) are worth 21 * 150 * 90

Divide all that by the total number of minutes played (22 * 90) and you get... 150. Because everybody has a CA of 150.

This final answer is then divide by 10 and also rounded down.

The revised equation is ((15+18+(9000/500))/40)+0.5 = 1.775. I should point out that the divide by 40 is _not_ rounded like the other two (otherwise the answer could only be 1.5 or 2.5).

Level ratio

I may have led you astray here but playedLevel is on the same divide-by-10 scale as level, so the base ratio is 18/18 = 1, not 18 / 185 (the divisions by 10 are always rounded down too).

Also the current season doesn't count for appearances made; only previous seasons. This means you have a full season of only needing ~3 games a month for your 19 year old newgens, not 11 games.

Result

I get minutes * 1.775 * 1.375. (You were right about ratio, just off by an order of magnitude).


| Minutes and result | Step | Points |
|---|---|---|
| 30 min, any result |  6  | 14    |
| 45 min, lost      |  8  | 19    |
| 45 min, draw      |  9  | 22    |
| 45 min, won        |  10  | 24    |

If he has 60+ Premier League appearances (ratio = 1): 10, 14, 15 and 17.

And because this values maxes out at 150, you can estimate how many minutes your kids need to grow (and even seniors need to maintain).

0

GeorgeFloydOverdosed said: You should give friendlies a test too, for the age 18< players. And what if it's a friendly against a big team rather than a small one.

I would think that friendlies have similar results to u18/21 matches, as they would share a similar competition reputation (I assume friendlies are '1' rep?).

I think this would be useful to know because there aren't 6 u21 matches in a month, but it can done with friendlies.

If I'm thinking about this correctly, it means that no one has actually been maxxing out their youth development. Assuming friendlies can be used as a substitute, that still means you'd need 8 friendlies a month (8 because the player wont play 90min every match + you won't track what specific day of the month each player updates). I doubt anyone has been scheduling ~80 games/season for their u21s/u18s.

It would also mean overloading the youth teams with players is a bad idea. It was already bad from a fitness perspective, but now it seems you would miss out on the attribute gains too.

I also wonder if this means there isn't a CA hard cap on player growth per season. Before I heard the cap was something like ~25 CA. Then someone said I think they got 30CA, which suggested there is no cap. The best monthly growth rate you got was +3.46 CA I think you're saying, so that would be ~38 CA/season? Whereas without reaching the Match XP threshold of 100, it tops out at ~20 CA/season.


I'll check both things now.

EDIT: I put Emi Martinez and Omari Kellyman on opposite sides of a U21 intra-squad friendly.

|          |      Side      | Steps | Points |        Counter        |
|---|---|---|---|---|
| Martínez | won 6–2, 90 min | 19    | +14    | 28 → 42 (3 matches)  |
| Kellyman | lost, 90 min    | 17    | +29    | 143 → 172 (6 matches) |

This points to a competition level of 1 for friendlies. But that's fine for youth players because that's their level anyway. Kellyman in a U21 league game games about 22 points so this is much better for his development (since the CA of your senior squad is much higher than an U21 team, even if the competition level would be slightly raised).

EDIT 2: These damn tables. What I wouldn't give for markdown.

TRIPLE EDIT: I have no reason to believe there is a limit on CA. CA is raised every month and attributes grow to fill it. I have never seen a player's CA adjust itself at the end of a season to counter excessive growth. Across 117,000 player-months I've got in exported development CSVs, I've seen the following (bearing in mind this is me _mostly_ just running the development function plainly, I'm not doing any wacky experiments):

│ CA change │ −2  │  −1  │  0    │  +1  │  +2  │  +3  │ +4  │ +5  │ +6  │
| Count    │ 106 │ 1,878 │ 59,355 │ 29,862 │ 18,947 │ 6,576 │ 935 │ 41  │ 0  │

Only young players hit 5; all 41 cases are the two youngest players I tested: Proctor (CA 66) and Kellyman (CA 99) with 150 match points and high professionalism. That happened approximately 1 in 3,000 months (remember, there's random variance in development, not just cold, hard numbers sadly).

0

Late bloomers

Is this already a known quantity in FM? I've never heard anybody speak about this but people must intuitively know it to be true already.

Anyway they're real and here's how they work.

Actually, first off, let me define the two "paths" a player can take when developing: Youth and Adult. The Youth path is the one where they grow something like 1.5 CA per month just for getting up in the morning. They don't need to play games, they just grow (but they grow faster if they play a lot too). The Adult path is the opposite; they need to play and training accomplishes very little for them.

I was digging in to the cut-off age whereby a player switches from one path to another (I think people always suspected it was 18/19) but it is 19, unless you're a late bloomer.

A late bloomer is a player with a value of 64 (or 0x40 in hex land) in their player+0x1BE memory slot. Feel free to verify this in Cheat Engine. If this flag is set, and I assume it's set on player generation, then their cut off point isn't 19 years old, it's 19 + an offset. The offset is 1-4 (I'll explain how it's generated later) and it means this:

- At age <= (18 + offset): always develop on the Youth path.
- (19 + offset) to (20 + offset): Youth path only if a roll of 0–19 is under Determination / 5 (1–20 scale). That's why a little growth remains at 19–20 in some cases.
- >= (21 + offset): always the Adult path.

Here's a visual:

|            Age            |  16  |  17  |  18  |  19  |  20  |  21  |  22  |      23      |      24      |    25+      |
| Kellyman                  | +1.26 | +1.46 | +1.46 | +0.28 | +0.26 | 0    | 0    | +0.14        | 0            | 0            |
| Proctor (keeper)          | +0.58 | +0.62 | +0.62 | +0.16 | +0.16 | 0    | 0    | +0.02–+0.06  | +0.02–+0.06  | 0 from 29    |
| Kellyman as late developer | +0.56 | +0.76 | +1.02 | +1.52 | +1.52 | +1.52 | +1.36 | +0.22        | +0.20        | ~0          |

(Proctor gained +0.02 to +0.06 at every age from 23 to 28.)

That's pretty cool, right?

As for what the Youth/Adult paths do: the Youth path guarantees a minimum match band every month, whether or not he plays. It's calculated using the higher of the following:

- From Professionalism: band 4 at 15 or more (band 3 if CA < 41), band 3 at 6–14, nothing extra at 5 or less.
- Overall: band 3 if the byte at player+0x265 (get ready for another formula) is >= 80 and he's 17 or younger (17 + offset for late developers), otherwise band 2. Under 15 (15 + offset) the band 3 only comes with a random roll that gets less likely the younger he is.
- Actual matches: actual match time is read in and will supercede the above if it's greater.

What it means in practice: a youth player is credited with 60–100 points of match experience a month without playing. Only match time above that adds any growth:

│ Professionalism │ Free band (worth) │    Match time helps from    │
|---|---|---|
│ 15+            │ 4 (100 points)    │ 125 points a month (band 5) │
│ 6–14            │ 3 (80 points)    │ 100 points                  │
│ ≤ 5, age 17    │ 3 (80 points)    │ 100 points                  │
│ ≤ 5, age 18    │ 2 (60 points)    │ 80 points                  │

Player+0x265?

It looks like a projected ability. It was hardly even worth digging this deep but here it is:

- for players 28 and over, it's your CA.
- under 28 it's CA + (28 − age) * max(3, CA * ((40 − age) / 20)^4 / 25)

So for Kellyman (age 17, CA 99) it's 99 + 76 = 175.
For Proctor (GK, age 16, CA 66) it's 66 + 65 = 131.

It's capped at 200, and then pulled toward a club ceiling of 8 * the club's competition level + 40 (level = the league's reputation / 10), which is 184 for the EPL and 40 for no club. It isn't a hard cap: anything above the ceiling keeps 35% of the excess (ceiling under 120), 55% (under 140) or 85% (140+), and it never drops below CA.

In practice the floor for the Youth route is band 3 for almost every 17-year-old, and only very weak ones get band 2. Jesus.

Oh yeah, later bloomer offset

Player UID % 4 + 1. So Kellyman's UID is 2000147523. Divided by 4 gives 500,036,880 remainder 3. 3 + 1 is 4. Kellyman, if he were a late bloomer (he isn't) would (and does, see above) be on the Youth path up to 22 (18+offset), with a chance of it at 23–24 and the Adult path from 25 (21+offset). His growth also ramps down below 19 (15+offset): about x0.67, x0.50 and x0.37 at 18, 17 and 16, which is why his late-developer numbers at 16–18 are lower than his normal ones.

I don't know if you can tell if you've got one of these people without firing up Cheat Engine and looking but, if you knew, you wouldn't need to start giving them game time for between 1 and 4 years after your other youth prospects.

I want a late bloomer!

Here's how they're generated. All the following have to be true on player creation:

- a random roll succeeds, with odds of 1 in (50 − 9 * level). That's 1 in 50 at level 0 and 1 in 4 at level 5;
- the player is no older than 21 + 7 * level / 5, so 21 to 28, plus 2 for goalkeepers;
- PA >= 80, and (PA − CA) >= 15;
- player reputation <= 6,500.

"level" is a byte stored at +0x1A2 on the competition (clamped to 0-5 for this check; the deepest league I found reads 11) of the player's club's first team. It looks like it increments the lower down the footballing pyramid you go (I assume at Sports Interactive they call this the Jamie Vardy Phenomenon). For example:

│                      Competition                      │  Reputation  │  0x1A2  │
|---|---|
│ Premier League                                          │ 185            │ 0        │
│ Sky Bet Championship                                    │ 134            │ 1        │
│ Sky Bet League One                                      │ 107            │ 2        │
│ Sky Bet League Two                                      │ 85            │ 3        │
│ Vanarama National League                                │ 72            │ 4        │
│ Vanarama National League North                          │ 46            │ 5        │
│ Bundesliga / 2. Bundesliga / 3. Liga                    │ 173 / 125 / 94 │ 0 / 1 / 2 │

Practically, it means these are your odds of a player being a late devloper:

│ Club's league tier │ Chance at the roll │ Must be no older than │
|---|---|---|
│ 0 (top division)  │ 1 in 50            │ 21                    │
│ 1                  │ 1 in 41            │ 22                    │
│ 2                  │ 1 in 32            │ 23                    │
│ 3                  │ 1 in 23            │ 25                    │
│ 4                  │ 1 in 14            │ 26                    │
│ 5 and below        │ 1 in 4            │ 28                    │

Goalkeepers can be two years older at each tier. The other conditions still apply: PA >= 80, at least 15 below PA, and reputation <= 6,500.

(The check runs when a player is generated. There's also a pass over every player, but it's a one-off save patch called "initialise_late_bloomers": it runs once, the first time you load a save that was started before the patch existed, and never in a game started on the current version. Once set, the flag is never cleared.)

1
Create an account or log in to leave a comment