April 10th 2020 by SDGNelson

4.20.6.0 update continuing work on saving and loading.

I had actually been planning to work on melee this week. Yet here we are! Lots of nice improvements to share. In case you would like to share your melee suggestions here is the current status: https://trello.com/c/Ns9jDz2r

Newly Saveable

Eventually it would be great to be able to quicksave and then immediately quickload without any noticeable changes. In this direction, many more objects are now integrated with persistence:

Firing Range

All of the firing range props use the blueprint functionality. Target distances, clay trap speeds and even the in-flight pigeons are stored.

Vehicles

Car placement and most of the components e.g. signals, engine, window up/down, etc are stored. Passengers are loaded into their seats - though in the future there should be a distance cap on this.

Other

Holographic optic colors, aim direction, and a few other assorted pieces of data are saved.

Object References

Passengers being loaded back into their seats is the first form of saved objects referencing each other. 3 did not support this whatsoever, and it should open a lot of interesting possibilities. For example, using the car keys to beep the paired car like you might when trying to find your car in a parking lot.

This does bear some more work to do however. It uses unique names at the moment, but this will not work well if transferring savedata between servers. It will probably be replaced with GUIDs.

Background Tasks

IO is now handled asynchronously, and falls back to blocking IO during an "emergency save" like when the game window is closed. This allows singleplayer to run periodic autosaves in the background (every 5 min) without stuttering.

One unexpected challenge here was that the autosave screenshot had to be made asynchronous as well. This had the nice benefit of speeding up normal screenshots too. Similarly the screenshots do a quick forced render and blocking IO during emergency save.