Aranaktu
Club Supporter
Hey guys. Since I'm playing FIFA (2003) I was always curious why there isn't any save editor for this game? A few months ago I've decided to start reverse engineering a save file format in order to make a fifatracker website. I'll post here what I've found so far. FIFA 18 is pretty much already dead, but I'm sure it will be still useful in next game edition. Already I've managed to edit some basic stuff like transfer budget and player form. The biggest achivement is probably adding "Future Star" to current career. I'm also too lazy to make complete save editor, but I'm still open for cooperation, so if you want to make that kind of tool just PM me.
First of all, FIFA saves are stored in "Documents\FIFA 18\settings". File name must start with "Career" keyword, and after that we have date of last save in format "yyyymmddHHMMss".
Now let's open game save in hex editor and take a look at file format. Note that all values are stored in little-endian byte order.
File Header - 0x66 bytes
After file header we can distinguish 3 main career file sections .
1. SaveType section - Sizeof: 0x338A3
The most important thing here is CRC32 checksum located after "SaveType_Career\0". You need to recalculate it if you want to change anything in your career save. CRC32 checksum if calculated from offset 0x92 until the end of the whole file.
Image:
Tbh. I've no idea what is the rest of the data in this section. 99% of it are null bytes.
2. Databases section - Sizeof: 0x5D4CB4
In this section we have 3 fifa databases.
First one contains tables with "career_" prefix.
The second one contains more common and well-known tables like "players" and "teams"
And the third one contains just a single table called "teamsheets"
If you want to take a look at what's inside these databases you can use my https://gist.github.com/xAranaktu/96e40cb2287372bbbe405408485a87e4 to unpack them from career save. And then just open .db files with https://www.moddingway.com/file/45991.html. You will probably also need https://pastebin.com/sH1B3WVe file. So far I've not managed to run the save with edited database.
3. Career data section - Sizeof: 0x48F80C
Here we can find stuff like transfer budget, player statistics/morale/form, info about injuries. Basically, everything which is not stored in the databases. Most of the structures here have their own signatures.
Structures that I've reverse engineered a little bit:
tf003 - PlayersForm:
rlctrk - Release Clauses
pmit1 - Competition Prize money
um001 - UnlockablesManager:
ubp01 - Club Finances
sm015 - StoryManager?
tm003 - mPlayerMoraleAlloc
mp002 - MonitoredPlayersAlloc? - 0x650
fm001 - FitnessManager
rm001 - RetirementManager?
dd002 - DeadlineDayTransferList
tpm002 - TrainingProgressManager
mi001 & ti001 - total shirts sold?
se001 - avg attendance this season?
fm001 - Injuries
First of all, FIFA saves are stored in "Documents\FIFA 18\settings". File name must start with "Career" keyword, and after that we have date of last save in format "yyyymmddHHMMss".
Now let's open game save in hex editor and take a look at file format. Note that all values are stored in little-endian byte order.
File Header - 0x66 bytes
After file header we can distinguish 3 main career file sections .
1. SaveType section - Sizeof: 0x338A3
The most important thing here is CRC32 checksum located after "SaveType_Career\0". You need to recalculate it if you want to change anything in your career save. CRC32 checksum if calculated from offset 0x92 until the end of the whole file.
Image:
Tbh. I've no idea what is the rest of the data in this section. 99% of it are null bytes.
2. Databases section - Sizeof: 0x5D4CB4
In this section we have 3 fifa databases.
First one contains tables with "career_" prefix.
The second one contains more common and well-known tables like "players" and "teams"
And the third one contains just a single table called "teamsheets"
If you want to take a look at what's inside these databases you can use my https://gist.github.com/xAranaktu/96e40cb2287372bbbe405408485a87e4 to unpack them from career save. And then just open .db files with https://www.moddingway.com/file/45991.html. You will probably also need https://pastebin.com/sH1B3WVe file. So far I've not managed to run the save with edited database.
3. Career data section - Sizeof: 0x48F80C
Here we can find stuff like transfer budget, player statistics/morale/form, info about injuries. Basically, everything which is not stored in the databases. Most of the structures here have their own signatures.
Structures that I've reverse engineered a little bit:
tf003 - PlayersForm:
Code:
6 bytes - 'tf003\0' - Signature
4 bytes - TeamID
4 Bytes - Squad Size
{
4 Byess - playerid
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown
4 Bytes - Unknown DATE
};//Player array - Size=0x58
rlctrk - Release Clauses
Code:
7 Bytes - 'rlctrk\0' - sign
4 Bytes - Number of players with release clause
{
4 Bytes - PlayerID
4 Bytes - TeamID
4 Bytes - Release Clause
};//Player array - Size=0x0C
pmit1 - Competition Prize money
Code:
{
4 Bytes - Unkown
4 Bytes - Date
4 Bytes - Money
4 Bytes - Unkown
4 Bytes - competition id?
char pad[0x0C];
};// Tournaments array - Size=0x20
um001 - UnlockablesManager:
Code:
future star
{
1 Byte(?) - Unknown
1 Byte(?) - Boolean?
4 Bytes - Arrival DATE - yyyymmdd
}
ubp01 - Club Finances
sm015 - StoryManager?
tm003 - mPlayerMoraleAlloc
mp002 - MonitoredPlayersAlloc? - 0x650
fm001 - FitnessManager
rm001 - RetirementManager?
dd002 - DeadlineDayTransferList
tpm002 - TrainingProgressManager
mi001 & ti001 - total shirts sold?
se001 - avg attendance this season?
fm001 - Injuries