Je vais faire une hypothèse : la maniabilité merdique et les délais imposés qui sont grosso-modo toujours de un à deux dixièmes de seconde sont en fait là pour couvrir les latences de ping dans des parties qui engagent des joueurs localisés sur le globe à des endroits très éloignés les uns des autres.
Si le jeu devait être ultra réactif et passer outre les animations (ce qui serait très simple programmatiquement), alors un joueur ressentirait nettement plus violemment d'avoir un ping à 250 plutôt qu'à 150. L'affaire étant que dans un jeu créé avec de la programmation répartie, l'élément qui calcule l'état global (qui rassemble toutes les positions des joueurs en fonction de la dernière action qu'ils ont faite) doit calculer c'est à dire déterminer la position théorique à un instant donné de joueurs dont il n'a peut-être pas eu la position depuis 0,087, 0,2 et 0,13 secondes.
Ce module lisse le jeu, en quelque-sorte. S'il n'était pas là, le héros dirigé passerait brutalement d'une position à une autre, en intriguant le joueur (ce qui arrive dans les situations extrêmes, quand la connexion réseau se dégrade).
Cet état global calculé (le joueur 1 est ici, le deuxième devrait être là, le troisième ici, le quatrième sans doute là...), elle est échangée entre ordinateurs participants au jeu : mon ordinateur met à jour la position réelle ou théorique des autres joueurs selon les données qu'il a reçues. Et entre-temps, pour simuler le comportement des joueurs distants, il fait une simple règle de trois - ou pas loin de ça - pour que l'ensemble m'ait l'air fluide.
Tout les combien de temps le jeu reçoit-il des informations sur les positions des joueurs ? Environ toutes les 200 millisecondes. Il ne peut pas aller plus vite que le ping, de toutes façons. Et il se trouve que presque toutes les actions prennent 1 à 2 dixièmes de secondes pour se répercuter sous le couvert d'une animation. Une belle coïncidence, non ?
Ce que je veux dire c'est que l'animation serait plus rapide, le héros réagirait plus vivement à l'écran, que pour autant ce qu'il ferait ne serait pas exact pour les autres ordinateurs. Cela ne leur serait pas connu ! Si vous aviez la possibilité de faire trois actions distinctes en 150 ms à l'écran, par exemple : je marche en zigzag, aucun ordinateur adverse ne pourrait en retenir plus d'une, à cause du délai minimal de communication imposé. Le joueur s'étonnerait alors de s'être fait intercepté à mi-chemin de la ligne droite qui va du point A au point C, alors qu'il avait donné une directive pour se trouver au point B, écarté, à ce moment-là. Au lieu de dire : "Mais ce jeu n'est pas réactif !", il dirait : "Mais ce jeu déconne !".
Dernière modification par Caniveau Royal ; 10/02/2013 à 08h33.
|