GPSaveConverter
GPSaveConverter copied to clipboard
Forza Horizon 4 - No Non-Xbox Profile
Hi @Fr33dan! I am having an issue where I cannot transfer files for FH4 from the Microsoft to Steam location and it is giving me this error. I have set the save file location manually but I think it also needs a non-Xbox profile. Any help is appreciated.

You didn't do anything wrong, this is a bug. Even though you set the save location manually, the system is still checking against the database profile. I'll need to fix this, prehaps I'll get some time over this long weekend.
The other problem is that the database profile is incorrect which is why you needed to select the location manually at all. I copied it from FH5 but they are slightly different. The name are the same but FH5 has a folder for each Xbox profile whereas FH4 does not. I've just discovered as I'm attempting to attach it that github doesn't allow .json files as attachments so you'll have to download Forza Horizon 4.txt and rename it changing .txt to .json. Then use File > Load Game Profile within the converter.
Then the converter can find your steam game installs by selecting your profile instead of doing so manually, bypassing the bug getting you up and running for now. Plus it will confirm that this profile works so I can update the library for the next release.
I tried the file and it worked. However, when I transferred over the files, it gave me this ui glitch where everything is doubled. Also when loading into Forza on steam it errored saying the Forza Horizon profile you are trying to load is no longer available.

That is strange as the UI should be listing the folder contents with no real changes but that would mean multiple files with the same name which doesn't make sense.
What does the steam save location look like in windows explorer?
It looks like this:

Well this means the UI doubling is a bug I need to investigate, but doesn't explain why the does not like the converted files.
Two things stand out to me about the file listings.
- The Xbox versions lack a UserPurchasesTelemetry file. Since we can't conjure up one from nowhere try removing it entirely. If we are lucky it's incompatable as it is now, doing this will make game will rebuild it.
- The VersionFlags file still has the 4:27PM timestamp in explorer, it should now match the 4:54 of the xbox version. Change log level to Trace in the preferences and try copying just this file. If it does not update the timestamp please attach your log file here so I can determine why this file isn't getting updated.
Ok. Made the change and tried it again and it worked. The double file bug in the ui is still present. Here is the structure before opening the game on steam now:
After launching the game, it gives me the same error. Here is the file structure after:
What's interesting is that the UserPurchasesTelemetry file still has the old date attached to it even though it was deleted. My guess is steam would be restoring the old file somehow.
In the end, it is still giving me the account error when pressing start.
You are right in that it is probably Steam restoring the file. Maybe you could disable Steam cloud saves in the game's properties menu within Steam?
If it's not this telemetry file then I'm afraid I'm out of ideas on what the problem could be with the game. :-(
So I disabled steam cloud saves and deleted the file. Now loading into the game only the 4 other files are in the steam saves folder. Unfortunately, upon pressing start, the error is still there, and the game crashes. Looking back at the steam save folder, a new UserPurchasesTelemetry file was not generated.
I'm sorry but I've exhausted all the ideas I have. The files seem to have been moved/converted correctly, so they must have some internal difference between them. Something one of the entries on this page seems to imply (there is no such entry for FH5 which is known to work)
If this the case then I'm afraid the converter will never work for this game.
I'll post an update here if I have any further ideas. If anyone stubbles across this and has some relevent info, please chime in.
Alright. Thank you for your help.
Hey @Fr33dan I think I found something. Looking at a completed game save file for steam, it looks like all the files from the Xbox save need to be transferred over, not just the user data folder.
Here is the completed steam save file structure:
And this is what I get when I try to move all the files from xbox to steam:
This may be the key to why it was not working.
This could be a factor. FH5 didn't need the Liveries/Car configurations to migrate the user profile (which is all that is supported for that game), but maybe FH4 chokes when they don't exist. I'd be shocked if this was the case though.
The error is because there is no file translations for those files. The file translation built into the library purposefully does not support these files because these would only work going from Xbox -> Steam and not from Steam -> Xbox because it would involve the creation of containers which is not supported at this time.
To test your theory try this game profile: Forza Horizon 4.txt. It has with a file translation that should work for all the files. You will need to remove the old file translations as the behavior is to merge translations when a profile is imported (which is intentional as I don't want someone mad their work on a translation disappeared because they tried to import a profile).
I tried it and am getting a new error:

Your file translation should look like this (The name in the listbox may be different but the conents of the parameter table should match):

I think your log level is still set to trace from an earlier attempt. If so please attach the log file, otherwise set it to trace and then make the error occur before attaching it.
Here it is:
GPSaveConverter.log
And these are the translations:

You need to remove all but the last one by using the minus button while they are selected.
I tried and am getting the same error:

Here is the log file GPSaveConverter.log
Oh butts, I made a stupid tiny mistake. Rather than attach a whole new profile, change the second Named regex (GroupNumber) to add an underscore: (?<GroupNumber>[\w]+) -> (?<GroupNumber>[\w_]+)
Tried it and am still getting an error:
Something i noticed is that you put to change
(?<GroupNumber>[\w]+) -> (?<GroupNumber>[\w_]+)
but the way it was in my file and the change i made was
(?<GroupNumber>[\w]+) -> (?<GroupNumber>[\w_]+)
There is an extra slash.
Here are the logs too:
GPSaveConverter.log
I was thinking you would be editing it within the converter application, not the file. The extra slash is added when what is in the shown dialog is saved and is removed when the translation is imported. You can see that it is gone in the converter itself.
Ohh I'm a dumb dumb, this file extension includes an underscore, the FileExtension named group doesn't allow for this. Change that one to match. (?<FileExtension>[\w]+) -> (?<FileExtension>[\w_]+)
A bit more of an explanation is that the null error is occuring because a file translation is not matched for that file. So far these have all been regex errors resulting in a match not occurring. (I'm not that fluent in regex, sorry but I'm figuring it out)
Still getting the error:
Logs:
GPSaveConverter.log
Lets try a simpler regex pattern: Forza Horizon 4.txt
Still not working:
Logs:
GPSaveConverter.log
So I dug into the code and realized there was a problem that was signifigant enough I patched it right away. I'm less confident about the game profile so I'm holding that back until we have something that is known to work so you will need to import that again.
Try the version just released.
New error:

The text in that error looks like it's not using the most recent simplified file translation correctly as I replaced GroupName and GroupNumber with a unified Group item.
Are you sure you're using the right profile?
The fact that neither have been replaced seems a little odd.
Thats the error I got without the last json you posted. When I use the last profile you made I get this error:

I don't know if I messed up that file or if it messed to loading it but I'm on my phone right now making it difficult to check but I can see in the screenshot it's not right. In the converter change the non - Xbox file name to ${Group}.${FileExtension}