It seems stable enough and most pointers seem to be correct so I'm release it for now. I'm still play testing so save early and save often and make backups and don't expect too much. I cannot promise to update for each beta but hopefully not too much work and I can get around to it.
Here is list of features in the current build:
- Edit Person (Player, Staff, Manager) attributes
- Edit Club attributes
- Edit National team attributes
- Edit Competition attributes
- View Match attributes
- Dynamic Lists for Clubs to show Teams and players/staff in the teams
- Dynamic Lists for Bonus & Clauses in Contracts
- Dynamic Lists for Relationships
- Helper Scripts that either run immediately or periodically to:
- Set Happiness, Fitness Condition/Sharpness, Training Happiness for all squad members of a Club
- Set Favourability to Max for all members of a club
- Set Fitness Condition/Sharpness for all squad at the National team (if you are coaching one)
- Set budgets to high number periodically to allow free spending for recruiting
- Set contract dates to current day (or back to join date) to help stop offers. (Better to add high value "Minimum Release Fee" to stop offers but both can be used)
- Prevent Player or Staff Attributes from decreasing during monthly updates
Details about Table
Here are some random details about the table for advanced users trying to edit or update the table. (Not tips for cheating).
The core injection script which updates when focus changes seems to call an virtual function for any object being selected. This is useful except that everything goes through it is hard so to differentiate objects (i.e. players, clubs, teams, matches, etc) from each other. I use the C++ class vtable pointers. This makes it very accurate when vtable is known but makes it hard to update when not known. I added Selected Object and Vtable to Allocated Pointers area which should make it easier to locate pointers by observing those changes as these cannot be AOB scanned easily.
For players, I use the compiler hints around the vtable for C++ multi-inheritance classes to guess where the data blocks begin for shared data in classes.
How to update the table (as of 20.0.4):
The core injection script which updates when focus changes seems to call an virtual function for any object being selected. This is useful except that everything goes through it is hard so to differentiate objects (i.e. players, clubs, teams, matches, etc) from each other. I use the C++ class vtable pointers. This makes it very accurate when vtable is known but makes it hard to update when not known. I added Selected Object and Vtable to Allocated Pointers area which should make it easier to locate pointers by observing those changes as these cannot be AOB scanned easily.
For players, I use the compiler hints around the vtable for C++ multi-inheritance classes to guess where the data blocks begin for shared data in classes.
How to update the table (as of 20.0.4):
- Edit Script for "[X] <--- Football Manager 2020 ..."
- Change "expectedExeVersion" to new version number
- datTimeRoot
- Before loading any game search for "01 00 00 00 20 ?? 00 00 01 00 6c 07"
- Pointer is address for 01 00 6c 07
- datPlayersList (optional)
- Search for "25 00 00 00 ff 3d 00 00 00 ff 0f 84 42 05 00 00 81 e1 ff ff 7f 00 81 f9 ff ff 7f 00 0f 84 30 05 00 00"
- pointer is in the MOV instruction below this
- lblManagerRoot
- Search for "4c 89 74 24 58 48 89 74 24 30"
- pointer is in the MOV instruction 2 instructions above this
- Activate the "[X] <--- Football Manager 2020 ..." script
- Edit Script for "[X] <----- Update On Focus Change or Hover Tooltip ..."
- Search for "49 8B 0F BA 72 64 70 72 4C 8B 49 10"
- Update define for iniSelect to match
- Search for "48 8B 06 BA 6F 6E 52 44"
- First entry is iniTooltip to match
- OK to close
- Activate the "[X] <----- Update On Focus Change or Hover Tooltip ..." script
- Select Persons and monitor the Allocated Pointers > VTables > Selected Object
- Update vtables in the "[X] <--- Football Manager 2020 ..." script with this vtable address
- Edit Code Modification Scripts
- Search for datXXX
- update iniXXX to match
- These can be AOB but that is slow and this entire table cannot be AOB yet due to manual update of vtables and clock
- OK to close
- Deactivate all scripts. Then reactivate them so that new defines are in use.
Change Log
08-Nov-2019 (v1): Initial release
09-Nov-2019 (v2): Fix Staff General Attributes offsets
09-Nov-2019 (v3): New Manager Pointer since previous started pointing at different manager at some point. Added 2 new Staff Attrs
10-Nov-2019 (v4): Add Code Modification Scripts area. Included script to prevent attributes from decreasing on players for members of the same club as the manager.
11-Nov-2019 (v5): Update pointers to 20.0.4. Document table update procedure.
13-Nov-2019 (v6): Update to 20.1.0. Also fix bug with time display.
15-Nov-2019 (v7): Add Prevent Staff Attributes from Decreasing script. Fix the "Agreed Play Time" drop down to match play time values.
16-Nov-2019 (v8): Bug fix for Staff Attr causing crash when called from non-Staff related object. More protective checks added. (Will not work for coach/players for now and maybe other non-standard staff)
18-Nov-2019 (v9): Updated to 20.1.2
19-Nov-2019 (v10): Updated to 20.1.3
20-Nov-2019 (v11): Updated to 20.1.4
3-Dec-2019 (v12): Updated to 20.2.0. Set max status to 12191 so does not decrease during games. Add reduce injury script.
3-Dec-2019 (v13): Upload non-corrupted version of CT.
12-Dec-2019 (v14): Update to 20.2.1
19-Dec-2019 (v15): Update to 20.2.3
28-Dec-2019 (v16): Add Loan Contract (enabling changing end date of loan)
5-Jan-2020 (v17): Add Selected Player Updates and more periodic updates like happiness and training happiness
7-Feb-2020 (v18): Update to 20.2.4. Mark some attrs as not working. Move some scripts to "advanced"
20-Feb-2020 (v19): Update to 20.3.0.
21-Feb-2020 (v20): Fix Manager Data size from 468 to 480 to fix scripts
5-Mar-2020 (v21): Update to 20.4.0. Add Experimental set nationality, training nation, training club scripts for player
7-Mar-2020 (v22): Use getPlayerNation vs getPlayerNationContract correctly after renaming function
12-Mar-2020 (v23): Fix some stadium/club values
26-Mar-2020 (v24): Update to 20.4.1. Add the Chinese Trainer Scripts (v1.4.2 By:不知应该当讲否)
27-Mar-2020 (v25): Fix Prevent Decrease scripts which were not activating
17-Sep-2020 (v26): Update to 20.4.2. Move table script to "_GlobalScripts". change how attach works for exe other than fm.exe (untested). Remove the chinese/korean cheats.
19-Sep-2020 (v27): Update to 20.4.2 (patch which didn't update version!!!)
23-Sep-2020 (v28): Update to 20.4.3
25-Sep-2020 (v29): Update to 20.4.4
4-Nov-2020 (v30): Merged in tdg6661 fixes
09-Nov-2019 (v2): Fix Staff General Attributes offsets
09-Nov-2019 (v3): New Manager Pointer since previous started pointing at different manager at some point. Added 2 new Staff Attrs
10-Nov-2019 (v4): Add Code Modification Scripts area. Included script to prevent attributes from decreasing on players for members of the same club as the manager.
11-Nov-2019 (v5): Update pointers to 20.0.4. Document table update procedure.
13-Nov-2019 (v6): Update to 20.1.0. Also fix bug with time display.
15-Nov-2019 (v7): Add Prevent Staff Attributes from Decreasing script. Fix the "Agreed Play Time" drop down to match play time values.
16-Nov-2019 (v8): Bug fix for Staff Attr causing crash when called from non-Staff related object. More protective checks added. (Will not work for coach/players for now and maybe other non-standard staff)
18-Nov-2019 (v9): Updated to 20.1.2
19-Nov-2019 (v10): Updated to 20.1.3
20-Nov-2019 (v11): Updated to 20.1.4
3-Dec-2019 (v12): Updated to 20.2.0. Set max status to 12191 so does not decrease during games. Add reduce injury script.
3-Dec-2019 (v13): Upload non-corrupted version of CT.
12-Dec-2019 (v14): Update to 20.2.1
19-Dec-2019 (v15): Update to 20.2.3
28-Dec-2019 (v16): Add Loan Contract (enabling changing end date of loan)
5-Jan-2020 (v17): Add Selected Player Updates and more periodic updates like happiness and training happiness
7-Feb-2020 (v18): Update to 20.2.4. Mark some attrs as not working. Move some scripts to "advanced"
20-Feb-2020 (v19): Update to 20.3.0.
21-Feb-2020 (v20): Fix Manager Data size from 468 to 480 to fix scripts
5-Mar-2020 (v21): Update to 20.4.0. Add Experimental set nationality, training nation, training club scripts for player
7-Mar-2020 (v22): Use getPlayerNation vs getPlayerNationContract correctly after renaming function
12-Mar-2020 (v23): Fix some stadium/club values
26-Mar-2020 (v24): Update to 20.4.1. Add the Chinese Trainer Scripts (v1.4.2 By:不知应该当讲否)
27-Mar-2020 (v25): Fix Prevent Decrease scripts which were not activating
17-Sep-2020 (v26): Update to 20.4.2. Move table script to "_GlobalScripts". change how attach works for exe other than fm.exe (untested). Remove the chinese/korean cheats.
19-Sep-2020 (v27): Update to 20.4.2 (patch which didn't update version!!!)
23-Sep-2020 (v28): Update to 20.4.3
25-Sep-2020 (v29): Update to 20.4.4
4-Nov-2020 (v30): Merged in tdg6661 fixes
Acknowledgements
This was based on tdg6661's table for FM 2019 and updated by me for 2019 and 2020.
How to use this cheat table?
- Install Cheat Engine
- Double-click the .CT file in order to open it.
- Click the PC icon in Cheat Engine in order to select the game process.
- Keep the list.
- Activate the trainer options by checking boxes or setting values from 0 to 1