I spotted a potential issue with replays where the custom versions that are used while serializing packets aren’t properly exported.
TL;DR: all the custom versions used by packets are never stored in the replay so it fallbacks to the current version, breaking backwards compatibility.
I made a parser for fortnite replays some time ago which also included the ability to parse FActorInstanceHandle in gameplay cues. That class recently got an update which now uses the FFortniteValkyrieBranchObjectVersion custom version. So I added the check and looked at the versions I got from the meta and header but as it turns out: the custom version doesn’t exist.
From what I’ve seen in the UE code it looks like that the custom versions in the header and meta are written when the replay recording is started and I assume it only exports versions that were used at that point. That means when a gameplay cue that contains a FHitResult is replicated to the replay it cant add the custom version to the header or meta so its never stored.
To be fair I’ve only tried this with fortnite and fortnite doesn’t focus on replay backwards compatibility and I don’t have access to fortnites source code to see if something is off there but I didn’t see anything in the EU source code that would allow this issue to be fixed and neither could I find any documentation that mentioned custom versions in combination with replays. And this would be a huge issue if pretty much all the structs that use custom versions in replicated properties are broken for games that actually have backwards compatibility.
A potential solution for this could be every time a chunk is exported that contains a new custom version just export an event chunk that contains all new custom versions at that point. This would allow all custom versions used in the replay to be exported while not having to change the meta and header.
The versions I used as reference are
Fortnite: ++Fortnite+Release-28.10-CL-30835064
UE Source: ue5-main (latest commit: a4f8b85727eeb01bbaaca8b524044d7566ea8a0a)