stop bloating up this real suggestion with fake slop. to clear up your wrongs:
Many developers believe that server authority somehow changes the economics of data access.
yes it does. attribute access is very expensive compared to normal property access. innately it’s slower just by virtue of call overhead, but that’s not even what makes it slower as a whole (not an engineer).
and then you end up funneling yourself into a state where you have to deal with average-case O(n) space complexity and that’s not even getting into cross-referencing, accessing the data, let alone restoring the data on-rollback. barring the non-sequiturs, the same limitations you experience with attributes you end up having to deal with in the same way but with a different guise. you’re still going to have to pack large datasets, and you’re going to have to keep track of the payload size when you’re snapshotting data to not blow up weaker devices (or lock up the main thread on restoration).
as someone that does use all of these tricks (and more), i still frequently have to worry about payload size and attribute count:
_airPack, _kdPack, and _stunPack are packed attributes responsible for 15 attributes. and by virtue of me having to pack these attributes, these are forcefully limited to bytes: maximum 255 for 8b and 65536 for 16b.
moving attributes means completely changing the implementation in the worst case; it entails having to move to managing snapshots which therefore means figuring out how to implement reconstruction for what depends on live attribute state (e.g. per-frame runners) and also managing space and compression.
the problem isn’t just doing it. the problem is doing it safely, without regression, and while also limiting negative performance tradeoffs.
unfortunately, i’m thinking of the infrastructural changes that make this difficult. hosting rollback is essentially hosting a “micro” streaming service per authoritative-server (which roblox has a lot of). on the average case (for my game), i’m sending 30-40KB/s and receiving about the same and this will only scale with the amount of simulated objects (and scripted simulated objects) there are, which that scaling is also scaled by the amount of per-player network artifacts which require a back-and-forth “how about now? am i correct?” communication between the client and the server. that is a lot, the average fighting game takes about 20-50KB/s and they’re simulating just two entities on a battlefield. how does that scale with an environment where the world itself can mispredict? in my eyes: far too much, far too fast. in a lossless environment, that’s really hard and likely impossible.
but at the end of the day, i’m not an engineer. so i could be wrong. but logistically, it seems disproportionately tough.