LightningFlik
I figured someone else would have gone digging before now. Cheers.
I was digging around in the simatch.fmf file and found the attributes which are used to determine how often a player succeeds at a given task. I don't know if this is useful to anybody but it does present the opportunity for a fun experiment where you mod the file to replace everything with something like "Flair" and then give yourself a bunch of Flair: 20 players to see if that makes you incredibly OP. (If not, then it probably means this data can't be trusted anyway).

| Statistic | Encoded attributes |
| --- | --- |
| Passes attempted | Passing, Work Rate |
| Pass completion | Passing, Decisions |
| Key passes | Passing, Vision |
| Crosses attempted | Crossing, Work Rate |
| Cross completion | Crossing, Vision, Technique |
| Tackles attempted | Tackling, Positioning, Work Rate |
| Tackle completion | Tackling, Positioning |
| Interceptions | Anticipation, Positioning |
| Blocks | Anticipation, Positioning, Bravery |
| Clearances | Positioning |
| Headers attempted | Positioning, Jumping |
| Header completion | Heading, Strength, Jumping |
| Fouls made | Dirtiness, Aggression |
| Dribbles | Dribbling, Flair, Pace, Acceleration |
| Offsides | Movement, Work Rate, Acceleration, Concentration |
| Distance run | Work Rate, Stamina, Pace |
| Sprints | Work Rate, Stamina |
| Pressures attempted | Work Rate, Anticipation |
| Pressure completion | Work Rate, Anticipation, Acceleration |
| Progressive passes | Passing, Vision |
Are there CA-hungry attributes that people feel don't really contribute to actual results (e.g. dual-footedness)?

I have a theory that a player's CA is a multiplier for all other attributes when it comes to determining their overall strength. So given two players whose only difference is CA + whatever inconsequential attribute bumps it takes to justify the increased CA, the player with the higher CA will perform better.

An entire team of such players should outperform the same team without boosted CA. That is, a team of 99 CA players should be consistently outperformed by a team of 100 CA players even if their attributes are almost 100% identical.

If I'm wrong then bumping a useless attribute to the point where it increases CA by 1 should make no difference.
I want to share something of potential interest.

I've been disassembling the "fm.exe" application for FM 24, which means I've turned the machine code back in to something resembling C so that I can look at it. I'm doing this because I want to find where shortlists/search results are stored in RAM so I can read them in my scouting tool but I might have found something else.

There's a function beginning at memory address 0x0144b40180 (at least in my Windows, Steam copy of FM 24.4.2+2081827), which appears to be grouping together player attributes and scoring them. I'll share the approximated C code here (feel free to ask Chat GPT what it means) as well as what I think it's doing. If you do feed this in to an LLM to decipher, give it this file too. That will map the offset codes (e.g. 0x23d, Pace) to the player's actual attributes.

From what I can see, this code is reading player attributes in groups, multiplying them together and creating a score for each group. It then returns the highest scoring group and the group itself.

For example, starting on line 65 of the code snippet:

Spoiler sVar1 = (short)((uint)(*(char *)(param_1 + 0x239) * 0x6667 + 0xccce) >> 0x10);
  uVar8 = (sVar1 >> 1) - (sVar1 >> 0xf);
  if ((short)uVar8 < 2) {
    uVar8 = 1;
  }
  uVar6 = (uint)uVar8;
  if (0x13 < uVar6) {
    uVar6 = 0x14;
  }
  sVar1 = (short)((uint)(*(char *)(param_1 + 0x23d) * 0x6667 + 0xccce) >> 0x10);
  uVar8 = (sVar1 >> 1) - (sVar1 >> 0xf);
  if ((short)uVar8 < 2) {
    uVar8 = 1;
  }
  uVar11 = 0x14;
  if (uVar8 < 0x14) {
    uVar11 = (uint)uVar8;
  }
  if ((int)(short)uVar2 < (int)((uVar11 + uVar6) * 5)) {
    uVar2 = (short)(uVar11 + uVar6) * 5;
    *param_2 = uVar2;
    uVar3 = CONCAT71((int7)((ulonglong)uVar3 >> 8),9);
  }


- The lines beginning sVar1 = (short)((uint)(*(char *) read a different attribute from the Player entity (Acceleration and Pace in this example (0x239 and 0x23d)).
- The lines uVar8 = (sVar1 >> 1) - (sVar1 >> 0xf); divide the attribute by 2, rounding down.
- The next two if conditions ensure the number is between 1-20 inclusive.
- The final if condition sums uVar11 (which is Pace / 2) and uVar6 (which is Acceleration / 2) and then multiplies the value by 5. If that result is > uVar2 (which is the highest rating it has seen so far), then it sets that to be the highest rating (*param_2 = uVar2) and sets the return value of the function to be the category ID (9 in this case).

Now here's the exciting part: the attributes it groups together and how it scores them.

Group 1: Set pieces

((Corners + Free Kicks + Penalties + Long Throws) * 10) / 4

Group 2: Attacking technique

(Crossing + Finishing + Long Shots + Passing + Technique) * 2

Group 3: Attacking intelligence

((Anticipation + Vision + Decisions + Positioning) * 10) / 4

(Yes, positioning.)

Group 4: Leadership

((Bravery + Work Rate + Teamwork) * 10) / 3

Group 5: Defensive intelligence

((Tackling + Marking + Concentration + Positioning) * 10) / 4

Group 6: Technical control

(Flair + Dribbling + First Touch + Composure + Balance) * 2

Group 7: Aerial Ability

(Heading + Jumping Reach) * 5

Group 8: Physique

((Strength + Natural Fitness + Stamina + Agility) * 10) / 4

Group 9: Speed

(Acceleration + Pace) * 5

Now I'm not saying that the game uses the same aggregation/scaling in the match engine--the only place that I've found it make a difference is the coach report (see below; this is me hacking the return value from the function so it thinks groups 9, 8 and 3 are this player's best)--but it's worth bearing in mind. I'm going to keep this line of enquiry up and I'll report back anything I learn.



@GeorgeFloydOverdosed As part of your season-long experiments, would it be valuable to see at a glance all teams in a given league with the average rating of their players?

I'm thinking something like this:

| Man City  | 84.75% |
| Liverpool | 83.60% |
| Arsenal  | 82.13% |
| Chelsea  | 80.44% |

And so on.

I'm not sure what your tests look like but I assume you'd expect the final order of computer-controlled teams in your leagues to roughly correlate to the ratings of the players inside? or else it would mean a tweak is needed to the ratings? Right now it seems like you're testing tactics but this way you could test your weights with all the teams in the league, not just one.
GeorgeFloydOverdosed said: Yes, I'm still keen to see your go at it. The more options the better.

I guess with FM27 coming soon, its 50/50 whether people will move on entirely from FM24 or not. But if FM27 turns out to be crap 2.0, then I think these new tools will help keep FM24 alive by injecting a bit of novelty into it.


With that in mind, how flexible a weighting system do you think is needed to really assess players? Is a simple Pace: 20, Acceleration: 19.2 system sufficient or do you need interdependence between attributes?
@GeorgeFloydOverdosed Are you in the market for an FM 24 scouting tool with customisable weights? or do you have one already? Mine is nearly done but there's been so many released recently, I can't even keep track.
OpticFawn said: please make a version for mac, only one i can use is fmrte and its kinda bad imo for scouting
This is the one version I can't reliably make. I don't have a Mac. It would require porting about 7 OS-specific functions but I can't test them. It'll be open source though if someone else wants to add the feature.

**EDIT:** maybe I could send you test builds but it would be slow going.
@mavali

I wanted to alert you to something I'm currently developing. It's yet another FM scouting tool. It's for FM 24, written in C, open-source and free forever. It doesn't use any of your code but I have heavily relied on your tool as far as look-and-feel go (since I don't have a visually creative bone in my body and I am hamstrung by design any time I create anything.)

This is actually a tool I've been making on and off for a while (see a post here from May where I showed off the Node version of it, before deciding to rewrite it in C because shipping a Node app for people to use would be an awful experience).

I mention all this by way of asking for your blessing to rely so heavily on your app's aesthetic. I don't want you to hear about another scouting tool that looks similar to yours and wonder if you've been ripped off.

I did consider putting this down and porting your tool to FM 24 (the only one I play) and then adding in missing features I care about, but when I saw that your backend bindings were written in C#, I decided to leave it alone.

Let me know if you're all right with this; if not then I guess we'll figure something out.

EDIT: I meant to attach a screenshot.
skawkclsrn said: But I'm 100% sure he has all matches simulated with QME (Quick Match Engine) instead of the actual ME (Match Engine).
Is QME the engine that "Instant Result" uses? or does it only come down to level of detail?
Are you taking feature requests? Or could I raise a PR and do it myself? I'd love a button which took all the players in your search results and calculated the best XI from them, given a specific formation.

You could have a bunch of preset formations (maybe even allow custom ones to be defined at run-time or in the config at compile-time) and then determine the best combination of available players to fill out your starting XI. (You'd do this using the Hungarian algorithm (shortest-augmenting-path / Jonker–Volgenant variant)).

EDIT: Ahh, I thought this supported FM 24 too. Apologies, there are so many versions of these apps flying about now (including one I'm making myself) that it's hard to keep track. I only play FM 24 so I wouldn't be able to test any PRs I contributed.
GeorgeFloydOverdosed said: Premier League 2.1 weights

FMST26 weights (copy paste this into statistics > custom metrics (advanced)):

Outfield:

(acceleration * 90.5 + pace * 94 + jumping_reach * 43 + pressure * 17 + dribbling * 14.3 + work_rate * 66.5 + agility * 16.0 + anticipation * 40 + composure * 26 + stamina * 50 + consistency * 14.05 + determination * 43.5 + balance * 14.25 + strength * 5.0 + concentration * 45 + finishing * 2.0 + important_matches * 10.1 + natural_fitness * 6.45 + professionalism * 15.0 + ambition * 2.0 + loyalty * 1.0 + aggression * 10 + vision * 0.5 + left_foot * 6 + right_foot * 5 - (injury_proneness * (48 / (natural_fitness * 0.75))) - (dirtiness * 32 * (aggression * 0.1))) / 113.2


Why is the left foot worth more than the right?
keithb said: Something Lockjaw cant do and then falsely claims that genie scout is bugged. However he wont say how its bugged. Just another excuse from a long list to cover his rather turgid tracks.
I explained this earlier; changing weights in Genie Scout changes the results in unpredictable ways, as described in my edit in this post.

I used the Blended weights from this post and calculated the ratings for players manually. In Genie Scout they produce this list:

1. Mbappe
2. Vinicius
3. Haaland
4. Osimhen
5. Thuram
6. Nunez
7. Jesus
8. Isak
9. Messi
10. Martinez

Manually, they produce this one:

1. Erling Haaland
2. Mohamed Salah
3. Kylian Mbappé
4. Lautaro Martínez
5. Marcus Rashford
6. Victor Osimhen
7. Robert Lewandowski
8. Lionel Messi
9. Randal Kolo Muani
10. Romelu Lukaku

This is what I meant when I said Genie Scout was doing something unanticipated on top of the weights you give it, or it's just not using a straightforward weighted average.
keithb said: How exactly is genie scout bugged? It clearly isn't. Just your ratings are awful and you don't understand how to use it. So you make a claim that it's broken as it couldn't possibly be anything to do with you.
I don't have access to Genie Scout so I've been calculating ratings manually using weights from different people. I multiply each attribute by its coefficient (assuming the attribute has a coefficient, sum the values and divide by a scaling value.

Doing this, I found the order of resultant players if different to the order Genie Scout presents, leading me to believe maybe it's factoring in footedness or height or positional familiarity, or maybe just not normalising personality values.

It's clearly doing something right because people have used it for years to build winning teams, I just noted that if you've taken care to tweak the weights then GS is going to do something you can't predict with them.
Hello, @Orion, sorry if you've moved on from this but I had a question about your weights on page 1 (normal match engine). Using the striker weights as an example, I get the following players listed as the best strikers in the world at the start of FM 24 (of all the player who are at least accomplished at the position) (calculated manually, not using Genie Scouts calculations):

1. Erling Haaland: 92.74%
2. Kylian Mbappé: 85.31%
3. Victor Osimhen: 84.37%
4. Alexander Isak: 83.07%
5. Robert Lewandowski: 82.71%
6. Harry Kane: 82.16%
7. Randal Kolo Muani: 81.96%
8. Mohamed Salah: 81.6%
9. Vinícius Jr: 81.57%
10. Romelu Lukaku: 81.42%

Is this about what you would expect?
White Europe said: i like all testing and ideas but just looking at 4 attributes allowed me to win the league with burnley med pred 18, everyone over 14 pace/accel central mids jumping and dribbling above 11, central defs jumping at least 14
What was your media prediction for the following season?
keithb said: Hi and many thanks for your interaction. I don't need to do my own testing when others have done it for me. Harvest green and the testing done by FM arena is good and reliable.
Where are HarvestGreen's weights? I found his latest Goalkeeper weights in an untranslated spreadsheet but could only find multi-step formulae for outfield attributes that involve doing different things if attributes are between thresholds.
GeorgeFloydOverdosed said: I think you said you used the original version 'FM26 Player Scoring System' is derived from but worked out how to read direct from memory.
Yeah version 1 was using their same penalties and goals rating system (or whatever the non-standard mode is called) except without the need to export stuff. Then I switched to your blended weights.

I'll make it possible to edit the weights used in my app too so people can use it to find players and you can use it to experiment.
GeorgeFloydOverdosed said: Unfortunately there is no proper substitute for Genie Scout. I've been considering FMRTE, but the free version doesn't allow you to save weight changes, and only some people will be willing to pay money for FMRTE.
I've just bought a house and after I get myself situated I'll have access to my Windows PC again so I can port the tool I've been developing on my laptop. It'll let you read your team from in-game memory and search the player database based on a number of constraints.

No fee, no weird start-up time.

It'll just take a little bit longer.
@GeorgeFloydOverdosed I've been thinking recently about an experiment to measure the importance of attributes for a given role (e.g. Striker); could you tell me if you think this is worthwhile?

Create a test league (maybe 10 or so teams) with identical coaching staffs (Assistant Manager is probably sufficient, since he'll be the one managing games), and identical players in all positions. That is, all the teams' goalkeepers are identical (copied from a real player), as are their fullbacks, their centrebacks and so on. None of the players ought to be able to play the position you're testing (e.g. Striker).

All teams are set up to play the same formation (if this can't be done in the pre-game editor, it would require ten human managers on holiday, hence identical Assistant Managers). All players have their attributes and conditions frozen.

The experiment is taking real-world strikers (e.g. Haaland, Mbappe, Vini, Goncalo Ramos) and putting multiple copies of them on to different teams, meaning all teams are identical except for their different strikers. If they're all playing the same tactics with the same coaches, the only variation will come from their strikers.

And I don't even think you necessarily need to look at the league table at the end of the experiment to determine which striker is better, since games can be won and lost by other players too. I'd look at the goals scored by the strikers, their assist count and possibly their average match ratings (or other things like key passes, xG, if you don't trust how match ratings are generated).

From here, you would perform a linear regression to assess what attributes / personality values are important in affecting the things we care about. I have to think that if was useful, someone would have done it by now but I can't see what's wrong with it.