tfausak / rattletrap

:car: Parse and generate Rocket League replays.
https://hackage.haskell.org/package/rattletrap
MIT License
150 stars 21 forks source link

Issues while decoding replays #115

Closed DangerIsGo closed 5 years ago

DangerIsGo commented 5 years ago

I know the title is vague but I'm running into 3 issues (potentially more, waiting on people to provide me more replays). They are:

rattletrap-6.3.0-osx: don't know how to get attribute value Str {strValue = "Engine.GameReplicationInfo:TimeLimit"}
rattletrap-6.3.0-osx: could not get name for index Word32le {word32leValue = 2929940634} rattletrap-6.3.0-osx: could not get name for index Word32le {word32leValue = 1140327211} rattletrap-6.3.0-osx: could not get name for index Word32le {word32leValue = 3751237810} rattletrap-6.3.0-osx: not enough bytes

I know the middle 3 are similar but I wanted to show them in case the word value mattered.

For the last one, I usually pipe to an output file, but I have also tried the -o argument, which produced the same output. I have over 10GB of memory free so its not a memory limitation.

I have also tried reverting to 6.2.2/6.2.3 but this produced the same result for all the replays.

The replays for errors above in order are: 7F79F0A7481E3EECC40B61AEC81057E1.replay C23B0F4045BE3E9000DE47BF5238059C.replay game2.replay game3.replay game1.replay

I'll comment if I receive any more replays with new errors. Thank you.

Replays.zip

tfausak commented 5 years ago

These sound like legitimate bugs.

The first one is some property that I haven't seen before. I'll have to update Rattletrap to handle it. Sounds like it's probably an integer of some variety.

The second one usually means that parsing some previous property went wrong. These are the most annoying ones to figure out because they require backtracking to the last "good" property and stepping forward until something looks fishy.

The last one isn't something I've really seen before. It means that the parser requested some more input but whatever section of the replay it was reading already ended. The ultimate cause is probably similar to the second bug, and it will be similarly annoying to suss out.

Thanks for the report! Hopefully I'll have some time to dig into these. If possible, you may want to try parsing these replays with other parsers, such as:

DangerIsGo commented 5 years ago

rrrocket is able to parse the header data, but is unable to process the network data which I need. There are several other replays which I gave to them that they can't process either. Has there been any progress towards a fix? Thank you kindly.

DangerIsGo commented 5 years ago

I'm sure you're busy with things but when you get a chance, would you be able to provide an update to this issue? For the RL org I'm developing for, we are amassing a backlog of replays running into this issue that we can't process. Thank you kindly!

tfausak commented 5 years ago

Sorry. Haven't made any progress yet.

For context, I've been working on Rattletrap in one way or another for around three years. It started off as a fun puzzle and grew into a fun project. It's become more of a grind these days. Rocket League's replay file format is not documented at all and changes all the time. In the past I didn't mind keeping things up to date because I played RL and wanted to parse my own replays. For a variety of reasons I don't play much RL anymore, so the personal motivation is gone. And because of the recent Epic acquisition, I've lost a lot of the intrinsic motivation too.

All that to say: I will happily continue to keep this project alive by merging PRs and publishing executables and whatnot, but I doubt I'll do much more development on it. You might have better luck pinging @jjbott or @nickbabcock; if they manage to solve this one I could (probably) integrate their changes into Rattletrap without too much trouble.

nickbabcock commented 5 years ago

I literally fixed it about an hour ago. The change was simple update to the PsyNet UniqueID logic: https://github.com/nickbabcock/boxcars/pull/41

But -- I know what you mean @tfausak

DangerIsGo commented 5 years ago

@nickbabcock is this fix possible to be applied to rattletrap? I ask because my program relies on the current format of rattletrap's JSON output and would require a massive re-write on my end if I were to use another parser program. I don't know Haskell well enough to apply this fix myself. Thank you

tfausak commented 5 years ago

Looks easy enough to port over.

tfausak commented 5 years ago

Thanks @nickbabcock! Fixed by #118. Will be available as version 6.3.2 just as soon as Travis CI is done building it.

DangerIsGo commented 5 years ago

I just tested this on all of our backlogged replays and it works great! Thank you very much @tfausak aned @nickbabcock !