The savegame implementation is a nightmare.
I'm working with Savior, which is a great plugin in and of itself, but the documentation for it was written for version 2, however version 4 was released, that contains different nodes, and different extensions (even though the majority of the functionality is the same as in 2.0).
But a huge issue is the compatibility with UE4's UI system. In order for the UI system to be controller compatible, I had to make a bunch of changes and create custom button blueprints when I originally set it up. Savior's demo and save slot BPs however are based on the standard UE4 widget system and these two things don't go well with the custom system I have created.
And that's not even the worst part:
In order to save changes to an open world game, the game needs to constantly be aware of what type of changes took place in the world. There is a conundrum here: If you leave items and interactables in their original state, it will eventually take up more and more memory space over time. Loading times will increase, FPS will start to go down and so on ... but if you spawn them in and destroy them again with dummy spawners (like I do), it becomes a lot more complicated for the engine to save changes made inside the world beyond loading zones.
Savior uses GUID variables in order to identify changes made to individual objects and actor classes. But they need to be set up correctly and when you have multiple blueprints that spawn each other based on bool variables, it becomes waaaay more complicated.
The second a player enters a loading zone, the previous maps are "unloaded" and the new maps are "loaded". When this occurs, the old map states together with their blueprints, interactables and items are not saved.
Savior contains the functionality to save those map states, but it looks like Savior is not equipped to deal with maps that are made "non-visible" at the time of play. When I save world states or a specific level, it only saves levels that are visible to the player and it will only load levels visible to the player at the time. This creates another massive issue, because in order to reduce hickups and FPS drops in UE4 I circumvented the standard world composition and created a custom system that loads all levels during loading zones and then hides them depending on where the player is located (and also to avoid Async level loading, where entire maps just suddenly spawn in 2 minutes after you have arrived in a barren landscape - I'm looking at you Subnautica!!!!!)
The savegame implementation is one of the biggest and most disgusting and complicated issues I have faced so far. Never in a million years did I imagine would it turn out to be so complicated, especially since most tutorials on youtube are only 5-20 minutes long. However those tutorials have barebone game systems, that are conveniently set up as linear progression games, with isolated levels and isolated environments, save points that reset the game world a.s.o.
Next weekend I'll go into "experimentation mode" to test Savior's individual nodes and how they react under different circumstances, so that I know exactly what each node will do beyond just its written description and the outdated documentation.