joda.bot wrote:Gets me really scared if everything is soo depended on it
If you can explain how to write a realtime game where the not everything depends on some timer, I'm all ears
Ok, the whole problem explained: it was one of the weirder floating point problems. I basically did
Code: Select all
float a = something;
float b = a * a;
float c = a * a; // (using a different code path)
float d = 0;
if ( c > b )
return d/( c - b );
else
return something_very_large;
And this returned -NAN. I do understand that sometimes c != b, but the fact that c > b does not imply c - b > 0 with floats really surprised me. (Of corse, with the code used in different ways, b had a real chance of being smaler than c.)
Anyway, the returned value was then used in the timer calculation and made the current time -NAN, too. The blank screen was caused by the game code: it does not render the scene for the first second or so, because I expect small glitches during that time (timer skipping, cycles popping into existence) and I want them hidden. An educated guess of what you would have seen here without the protection: the cycles would have been frozen in place for the first second of the round, but would have started to jump around frantically, even worse than during a lag bomb or the timer bug in beta3. You see why I prefer a blank screen, this is less freaky for our average user, and it gives bug reports more clarity.
I don't know whether your previous problem is related to the timer problems we had lately, the code has changed a lot over the last few months.
The described problem is fixed completely, and there is emergency recovery code in place for the case the timer ever gets set to NAN or worse again; it will get a complete resync then.
Philippe: No, that's just how long the server waits maximally for clients to sync before it goes on with the next round.