I know this is a big technical engineering problem. But I just had an idea for one way to solve the problem of reliable connectivity when it comes to fast moving ships. And it involves relative positioning of course. I want to share this here.
Problem: When moving at very high speeds in an absolute coordinate space, small network connection issues can result in lost or to few positional information that can result in ships being displayed hundreds of kilometres from where they should be. Flying in tandem is very hard and unpleasant because of that. The faster the movement relative to the absolute frame, the more all the ship positions start to “wiggle”.
Relative to absolute:
My idea for a solution to this, and I’m sure someone else had this idea before me, is to use nodes instead of having ships use the absolute coordinate space, only allow nodes to use the absolute coordinate space. All other entities, like ships, stations, asteroids, planets only use coordinates relative to those nodes.
Movement:
When it comes to movement. Entities inside a node would have vectors relative to the node. A vector addition is then run every cycle, incorporating the movement of all entities in a given node (fancy multiplies can be used to determine the amount of influence entities can have on the resulting vector). This vector is then added to the movement vector of the whole node. This addition and not assignment of the resulting “member vector” to the vector of the node means that the node itself would mimic the movement behaviour of its members (e.g: Newtonian), because as soon as the node is accelerated due to the entities acceleration inside of it, it cancels out the relative vector of the node to the entities inside of it.
After one cycle the node would have adapted (updated) itself to what was going on inside of it and could reflect that by moving all the entities inside of it.
Transitions:
Nodes need to allow for entities to enter as well as exit. What is important to note is that no entity should exist without a node unless it will not ever move relative to the absolute space (e.g the Star, if the’s only one). If an entity leaves a nodes hard border and there isn’t another node close by, it will create a new node.
My idea for that, to allow the most smooth experience in those node changes, is to allow an entity to be in two nodes simultaneously by using a “fuzzy/smooth border” as well as a hard border and using an interpolation fading from 0-100% influence depending where the ship is inside the “fuzzy” border.
Size Change:
Nodes also need to change size to allow for more space if more entities enter. This can be done a number of ways that change gameplay more then performance. So testing would be in order for that.
How does that help?
What this doesn’t solve is the missing information. We can’t create information out of nowhere. There are ways to guess, those have been used often and are proven and still can be used below/on top of that. What this does is minimize the impact of that problem. If the problem isn’t that problematic if the ships move slow relative to the absolute coordinate frame, why not create a coordinate frame so that the ship will move slow relative to that? This does that. It allows for flying close to each other fast without connectivity problems making ships “blink” out of sight.
- This does help if you fly close to an orbiting station.
- This helps if you fly in a fleet.
- This doesn’t help if you fly alone.
Example:
- You approach a planet fast and want to suicide burn in the last second. You connection cuts out and you crash. With this system this still happens as the node can’t register your break manoeuvre if it isn’t reaching the server.
- You approach a planet fast in a fleet and want to suicide burn in the last second. You connection cuts out. Everyone else decelerates tough. You only drift a little from the fleet and don’t crash.
This does connect ships to each other and makes them influence each other. This the main purpose, but a side effect.
I don’t know if this would be too costly, computing resource wise, but I just wanted to share this.