**SYNC ERROR DISCUSSION** + Poll
Moderator: Moderators
**SYNC ERROR DISCUSSION** + Poll
I have found the true Champion of Spring, his name is SYNC ERROR.
He single handedly dominates on average 8/10 games ever played, and has claimed more units than the mightiest Krogoth.
Now down to the real question, HOW DOES THIS HAPPEN?
What is the culprit, how can we avoid it, or how can we fix it?
Most games over 4 players that last longer than 20 minutes seem to be overshadowed by a silent assasin that mysteriously appears whenever he chooses.
There has to be a good explaination as to what DE-SYNCs a game.
In my opinion, there are 4 top contenders for the secret of the SYNC ERROR.
#1. Players with slow computers or internet that throw off the prediction system in game.
#2. Over use of Construction units or any mass quantity of units causing the pathing routines to be flooded, limited by bandwidth or something and then causes the destabilisation in the network.
#3. Too much information being transfered that doesn't need to be sent out to all clients(windmills turning and simple animated units like buildings being synched to all players).
#4. Random anomoly present in some units that just throw it off by mere happenstance.
What do you guys think, and I don't mean some silly answer, I mean your educated guess.
And be honest.
He single handedly dominates on average 8/10 games ever played, and has claimed more units than the mightiest Krogoth.
Now down to the real question, HOW DOES THIS HAPPEN?
What is the culprit, how can we avoid it, or how can we fix it?
Most games over 4 players that last longer than 20 minutes seem to be overshadowed by a silent assasin that mysteriously appears whenever he chooses.
There has to be a good explaination as to what DE-SYNCs a game.
In my opinion, there are 4 top contenders for the secret of the SYNC ERROR.
#1. Players with slow computers or internet that throw off the prediction system in game.
#2. Over use of Construction units or any mass quantity of units causing the pathing routines to be flooded, limited by bandwidth or something and then causes the destabilisation in the network.
#3. Too much information being transfered that doesn't need to be sent out to all clients(windmills turning and simple animated units like buildings being synched to all players).
#4. Random anomoly present in some units that just throw it off by mere happenstance.
What do you guys think, and I don't mean some silly answer, I mean your educated guess.
And be honest.
1. In theory not possible, but maybe there are bugs in the network code.
2,3,4. Game simulation complexity can never cause desync, because game data (including windmill state) isn't actually send over the network. The only thing that is send are the user commands and global/group AI commands.
The most likely cause I think is bugs in the spring simulation. Bugs in the simulation don't neccessarily have to crash the game, but can cause changes and corruption in (synced) game data such as unit positions/resources/speed/other properties. When that happens there is no sync anymore.
A very massive battle might cause the bug(s) to happen earlier.
2,3,4. Game simulation complexity can never cause desync, because game data (including windmill state) isn't actually send over the network. The only thing that is send are the user commands and global/group AI commands.
The most likely cause I think is bugs in the spring simulation. Bugs in the simulation don't neccessarily have to crash the game, but can cause changes and corruption in (synced) game data such as unit positions/resources/speed/other properties. When that happens there is no sync anymore.
A very massive battle might cause the bug(s) to happen earlier.
multiplayer games
aviod anything bigger than a 4v4. because within 30 mins you will have a 'gtg' or a crash or a desync
aviod certain maps, the old shore to shore being a example. different vsns of maps -> errors
faster computers really help. don't ask me why, also aviod WLan because sometimes (not always, probably not even often) this causes crashes/desuncs/lag/errors
aviod anything bigger than a 4v4. because within 30 mins you will have a 'gtg' or a crash or a desync
aviod certain maps, the old shore to shore being a example. different vsns of maps -> errors
faster computers really help. don't ask me why, also aviod WLan because sometimes (not always, probably not even often) this causes crashes/desuncs/lag/errors
-
- Posts: 436
- Joined: 26 Aug 2004, 08:11
spring was not built with the ability to "resync", and even if that feature was put in, the sheer amount of data needed to be sent over the network to do the resyncing would be ridiculous. fixing this problem would require a rewrite of the core of spring imho, but lately that seems to be my solution to everything (currently rewriting the core of the application im working with atm at work cause i told my boss it was needed :) )
- Dr.InfernO
- Posts: 223
- Joined: 18 Nov 2005, 13:55
With the nForce Ethernet drivers, you have an interesting option, if you have a CPU slower than 2.0Ghz (or 2000+) you should try to set it to "Optimize for" - Throughput.
A fast CPU is really needed for big and/or metal map games. If you have 2.0Ghz or slower you will slow down such a big-war-traffic game.
If you got a fast 100Mbit host but a 1.2Ghz client it will slow down the whole match.
So the match is not faster than the slowest client.
if some has only 256MB RAM or less it will also slow down on bigger maps because of the swap file.
I also regonized some players are confused with the whole issue. They mistake their own low Frames per second with network lags.
So for your understanding:
low FPS is NOT lag, it's your connection, or a 100% used CPU which is also slowing down the network connection.
A fast CPU is really needed for big and/or metal map games. If you have 2.0Ghz or slower you will slow down such a big-war-traffic game.
If you got a fast 100Mbit host but a 1.2Ghz client it will slow down the whole match.
So the match is not faster than the slowest client.
if some has only 256MB RAM or less it will also slow down on bigger maps because of the swap file.
I also regonized some players are confused with the whole issue. They mistake their own low Frames per second with network lags.
So for your understanding:
low FPS is NOT lag, it's your connection, or a 100% used CPU which is also slowing down the network connection.
Small correction here:Dr.InfernO wrote:So for your understanding:
low FPS is NOT lag, it's your connection, or a 100% used CPU which is also slowing down the network connection.
Slow gameplay (ie, slower than normal game), someone, but not you, has a slow CPU
Low FPS, your CPU card cannot keep up.
Because of the way Spring is built, even if you are not receving alot of game updates, your FPS is still free to go as fast as it can. Its only when there are lots of caluculations/lots of smoke/units/ect that you start dropping in FPS. If you start dropping in FPS due to Gfx issues, you still wont lag the game. Only when the computer cant calculate everything in time will you lag the game. But, if you take ages to render the scene, this can impact on the time the CPU has to do its calculations (i think), so Gfx issues might upset and lag the game. Its all a bit confusing.
One of the more noticable lag creators in FPS is alot of those Yellow dot particles when something is being built, in AA its when you use NANOtower blocks, or Farks or any Construction assist unit.
Is there a way for the Spring team to reduce the ammount of visible Sprite-particle objects somehow?
When you have 30 con units all spraying nano particles, thats a buttload of particles being drawn and alot of objects to be kept track of.
That might be a good place to start.
Is there a way for the Spring team to reduce the ammount of visible Sprite-particle objects somehow?
When you have 30 con units all spraying nano particles, thats a buttload of particles being drawn and alot of objects to be kept track of.
That might be a good place to start.
Because you won't know what is out of sync.
Assume a resync means 2 network turnarounds and sending over between 20KB and 2MB of data, that means it takes at least around 3 seconds on a 100KB/s up+down connection (slowest client counts). Conclusion: you can't do it realtime.
Doing it like pause,resync,unpause is already on the todo list, and will sometime be implemented.
Assume a resync means 2 network turnarounds and sending over between 20KB and 2MB of data, that means it takes at least around 3 seconds on a 100KB/s up+down connection (slowest client counts). Conclusion: you can't do it realtime.
Doing it like pause,resync,unpause is already on the todo list, and will sometime be implemented.
- OverDamage
- Posts: 46
- Joined: 06 Mar 2006, 09:47
A resyncing routine is entirely possible in spring.
IMO the best way would be for the engine to see who desyncs and eliminate the error by compairing it to the other players in that game.
A 1 player resync could probably take place very fast and during that time the game could auto pause.
If 1/2 the players in the game or more desynced then I would think spring could refresh everyone based on the host's game. Some code would have to be added to check for sudden unit creation or metal/energy income (see hax) in this case but it's far from impossable.
I would say the the few min wait for a large game to resync would be EASILY worth the wait verses losing hours of play to a damn rounding error.
IMO the best way would be for the engine to see who desyncs and eliminate the error by compairing it to the other players in that game.
A 1 player resync could probably take place very fast and during that time the game could auto pause.
If 1/2 the players in the game or more desynced then I would think spring could refresh everyone based on the host's game. Some code would have to be added to check for sudden unit creation or metal/energy income (see hax) in this case but it's far from impossable.
I would say the the few min wait for a large game to resync would be EASILY worth the wait verses losing hours of play to a damn rounding error.
Note that 1 and 2 are theoretically impossible. Also, rounding errors are theoretically impossible unless your CPU is f*cked or your haxxoring spring and put some instructions to change FPU rounding mode in it. Most probably any sync errors occuring now are either bugs in the networking code causing lost packets not to be detected and resend or uninitialized memory reads of synced code.
And yes, a resync system definitely would be an advantage. It is already added to the todo list actually so there's no need to discuss about it.
And yes, a resync system definitely would be an advantage. It is already added to the todo list actually so there's no need to discuss about it.
So I have been having sync errors consistently on different maps, mods, even after re-installing TA Spring. They happen right at the beginning every time. My computer should be more than powerful enough with 3.4Ghz dual core, SLI graphcs, 1 gig RAM. Running off a DSL connection thats going through a wireless LAN to this computer. Any suggestions, or should I just wait for a new version to come out and hope it fixes itself?
Also, all firewalls are off.
Also, all firewalls are off.
Wouldnt it be possible, that all players recieve the "correct" game-state from the host, if the game gets out of sync?
The host would just have to send all unit postions and stuff, maybe also the heightmap.
Of course there might be problems (like units disappearing for some players) if you wait too long with the "re-sync."
Another similiar subject:
What would be usefull, if the game could notice when replays get out of sync.
I downloaded a (XTA) replay and after some time all units just stood around, constructed units exiting the factory just stood there.
The replay was probally from an older spring-version (dont remember, sorry) but this just should not happen.
There should be a check or something every few frames and a warning like "replay out of sync (outdated version?)"
I think replays also get out of sync when you fastforward too fast...
The host would just have to send all unit postions and stuff, maybe also the heightmap.
Of course there might be problems (like units disappearing for some players) if you wait too long with the "re-sync."
Another similiar subject:
What would be usefull, if the game could notice when replays get out of sync.
I downloaded a (XTA) replay and after some time all units just stood around, constructed units exiting the factory just stood there.
The replay was probally from an older spring-version (dont remember, sorry) but this just should not happen.
There should be a check or something every few frames and a warning like "replay out of sync (outdated version?)"
I think replays also get out of sync when you fastforward too fast...