Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can't convert some save files #2

Open
williamjcm opened this issue Oct 3, 2020 · 2 comments
Open

Can't convert some save files #2

williamjcm opened this issue Oct 3, 2020 · 2 comments

Comments

@williamjcm
Copy link

williamjcm commented Oct 3, 2020

I don't know if you still work on this project, but I have an issue converting save files made by the game M.A.S.S. Builder (which uses UE4 version 4.25 as of the current version).

Here's the output for one of the save files:

D:\Downloads\gvas-converter-master\GvasConverter\bin\Release\netcoreapp2.2>dotnet GvasConverter.dll Profile76561197986396475.sav
Parsing UE4 save file structure...

Unhandled Exception: System.FormatException: Offset: 0x0000050d. Expected terminator (0x00), but was (0xa0)
   at GvasFormat.Serialization.UETypes.UEIntProperty..ctor(BinaryReader reader, Int64 valueLength) in D:\Downloads\gvas-converter-master\GvasFormat\Serialization\UETypes\UEIntProperty.cs:line 18
   at GvasFormat.Serialization.UESerializer.Deserialize(String name, String type, Int64 valueLength, BinaryReader reader) in D:\Downloads\gvas-converter-master\GvasFormat\Serialization\UESerializer.UETypes.cs:line 19
   at GvasFormat.Serialization.UETypes.UEArrayProperty..ctor(BinaryReader reader, Int64 valueLength) in D:\Downloads\gvas-converter-master\GvasFormat\Serialization\UETypes\UEArrayProperty.cs:line 34
   at GvasFormat.Serialization.UESerializer.Deserialize(String name, String type, Int64 valueLength, BinaryReader reader) in D:\Downloads\gvas-converter-master\GvasFormat\Serialization\UESerializer.UETypes.cs:line 38
   at GvasFormat.Serialization.UESerializer.Read(Stream stream) in D:\Downloads\gvas-converter-master\GvasFormat\Serialization\UESerializer.cs:line 31
   at GvasConverter.Program.Main(String[] args) in D:\Downloads\gvas-converter-master\GvasConverter\Program.cs:line 31

And here's the one from another save file:

D:\Downloads\gvas-converter-master\GvasConverter\bin\Release\netcoreapp2.2>dotnet GvasConverter.dll Unit0076561197986396475.sav
Parsing UE4 save file structure...

Unhandled Exception: System.FormatException: Offset: 0x00000439. Expected struct ID 00000000-0000-0000-0000-000000000000, but was 6e68095c-1b7f-4e52-abb7-821239f4fffd
   at GvasFormat.Serialization.UETypes.UEStructProperty.Read(BinaryReader reader, Int64 valueLength) in D:\Downloads\gvas-converter-master\GvasFormat\Serialization\UETypes\UEStructProperty.cs:line 15
   at GvasFormat.Serialization.UESerializer.Deserialize(String name, String type, Int64 valueLength, BinaryReader reader) in D:\Downloads\gvas-converter-master\GvasFormat\Serialization\UESerializer.UETypes.cs:line 35
   at GvasFormat.Serialization.UESerializer.Read(Stream stream) in D:\Downloads\gvas-converter-master\GvasFormat\Serialization\UESerializer.cs:line 31
   at GvasConverter.Program.Main(String[] args) in D:\Downloads\gvas-converter-master\GvasConverter\Program.cs:line 31

Judging by those outputs, it seems the converter has issues with the array and struct property types.

Here are the saves I used: saves.zip

@GMPranav
Copy link

+1

I am having the same issue. This code is 2 years old and was probably written for a older version of unreal engine. The site https://www.saveeditonline.com/ also has the same issue, its only able to detect integer types.

Seems like the newer versions of UE still doesnt have that much encryption though (the property names and stuff are still viewable by just opening the sav as a text), should be able to get it to work with some tweaking of the code, unfortunately I am too noob to do it. Hopefully someone can pick it up and do it :)

@RudolfJan
Copy link

I also have an issue with arrays. I do not believe it is caused by a newer Unreal version. I noticed that after de-serializing a log data structure in an array the converter ends up at the wrong level. I thought I might write a very simple example, which does nothing but has an array with two strings in it. The deserializer recognizes the array correctly, but then it does something I do not understand. It tries to read something with length -1, which it should not do, because the ArrayProperty has a payload length. With this wrong length it finds that the payload consists of strings, but then it only reads the type and puts that into the value part. This clearly is wrong, it should do a full string read.

It may be that the game I try to analyze is not OK, but it also may be an error in the GVAS converter. I must say that I do not fully understand the logic that is used. I would be interested to see the specs for the datafile that is used to build the GVAS converter and the way this specific part is built. I would be happy to help solving the issue, but I cannot do it on my own.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants