No one's suggesting compromising save stability -- that's the whole point of an unalterable snapshot.
Same thing they're going for with a full freeze in the current flow.
I'm proposing that freeze can be backgrounded, and Imperial Good's doing their best to shoot holes in said proposal
As to the 5 hours -- there's at least 10 other saves in there.
Especially experimenting with new loadouts -- I'll quick save after queuing up each set of ships across various shipyards (early game that is, until I've built up shipyards/blueprints).
That's another downside.
I find I save a lot less in a game that's a couple hundred hours in than in a fresh roll where resources are still limited and small mistakes make for big setbacks.
In other words, one needs to save more when they're trying to make the quickest progress.
The long saves were admittedly far more frustrating as a new player. I pushed through because I really enjoy the overall experience.
But generally speaking, new players are far less forgiving than invested players, and dev teams spend copious amounts of time on the "first time user experience".
Good good, that's what I was saying I expected was the case with prioritized locality timing.Imperial Good wrote: ↑Tue, 4. Jan 22, 22:27The skipping on the map is intentional and not related to performance. Low attention objects such as those far away from the player's ship update less frequently. This is how X4 can scale to tens of thousands of ships.
What's hacky about allocating sequential blocks? That's not at all arch-dependent.Imperial Good wrote: ↑Tue, 4. Jan 22, 22:27Any sort of hacky approach like this for something fundamental decreases maintainability. It is effectively coupling the code to architecture. Although currently X4 is x86-64, it is possible that ARM ports or even other ports could be desirable in the future.
It's just allocating space for, say, two int values in a sequential block instead of one -- read pointers still point at the same block.
Then the offset descriptors are simply adjusted to account for the extra X bits, same as would be done if an extra int value were added into the binary block.
A standard int read would return the same active value it does now from the same position.
Only difference would be, if a save flag's set, then the second block's checked and the first one's loaded over it (if it's not defined) via an OR operation and a bitshift -- operations with near zero overhead (and certainly aren't arch-dependent).
When it's done with a type union, you don't even need to worry about big/little endianness.