Ce document définit à pour but de donner tout les éléments permettant de comprendre les effets et les concéquences de l'option Unlagged de Tremulous
Unlagged est une option pour des serveurs Tremulous, qui peut être activée ou désactivée (activé par défaut).
Elle est apparue environ 4 mois après la sortie de la version 1.1, et était utilisable avec une version SVN de Tremulous.
Elle sera (jusqu'à preuve du contraire) intégré à la version 1.2 de Tremulous.
Lors de la réception d'un paquet d'un client Tremulous (qui donne un ordre tel que “avancer”, “tirer”, etc…), elle utilise le temps de jeu au moment de l'envoit du paquet pour déterminer l'effet de la commande, plutôt qu'utiliser le temps actuel du serveur. Cela permet de diminuer la sensation de lag.
Les connexions réseau d'internet se font par le biais d'une grande quantité de relais (nommés “routeurs” pour la plupart.)
Un paquet (l'envoit d'une page web par un serveur, une instruction pour le jeu tremulous, un petit bout du dernier bidule que vous téléchargez sous eMule…) pour aller d'un point à un autre (ex: votre ordinateur jusqu'au serveur tremulous) doit passer un certain nombre de ces relais, tout en changeant de support.
Votre paquet part de votre modem ADSL (ou cable ou ce que vous voulez :p), et traverse votre ligne ADSL. Elle y perd beaucoup de temps, les informations mettent du temps à parcourir une ligne téléphonique. Cette durée varie principalement en fonction de la distance entre vous et votre terminal téléphonique. En général, elle varie entre 10ms et 80ms. Pour cet exemple, nous allons dire 50ms.
L'information arrive ensuite au terminal téléphonique, et rejoint alors les lignes de fibre optique. Donnons 5ms à l'information pour arriver jusqu'au serveur en passant par les divers routeurs qui peuplent le net.
Un paquet met donc 55ms pour aller de votre ordinateur jusqu'au serveur, vous avez 55 de ping.
En LAN, la distance a parcourir est minime, aussi le ping est quasi-inexistante (0.15ms de ping environ sur mon réseau local)
Ceci présente, en gros, le fonctionnement d'un jeu en réseau. Je n'ai jamais regardé comment fonctionnait spécifiquement Quake 3, aussi, il peut y avoir quelques informations erronés. Mais globalement, vous devriez pouvoir vous y fier. En outre, j'ai simplifié et je n'ai pas pris en compte pas mal de technique d'optimisation pour la communication serveur/client. Je pense qu'il y en a assez avec ça pour comprendre comment fonctionne unlagged, et je n'ai de toutes façons pas les connaissances nécessaires pour aller plus loin sans dire de conneries
Le jeu Tremulous est en fait deux programmes différents:
Sur le serveur, on enregistre l'état de chaque entité: joueurs, building, portes, etc… C'est le serveur, et le serveur uniquement, qui détermine où je me trouve actuellement dans la map, c'est le serveur qui sait combien j'ai de points de vies, quelle arme j'ai, qu'est ce que je suis en train de faire, et le serveur seul est capable de modifier ces informations. C'est l'acteur omniscient et omnipotent.
Le client n'est finalement que deux choses:
Une interprétation visuelle des informations envoyées par le serveur. Il reçoit du serveur des éléments qui définissent le jeu (ici y'a un joueur qui est équipé d'un shotgun, la bas y'a un alien qui est en train de se déplacer en avant, la bas y'a un alien qui saute, etc…). Il ne reçoit donc que ce que le joueur a besoin de savoir : inutile de dire qu'il y a un joueur derrière le mur si on ne voit pas derrière ce mur (c'est théorique, en pratique, le client en sait en général un peu plus)
Un contrôleur, capable d'envoyer des instruction au serveur sur le comporterment que désire avoir le joueur. Lorsque le joueur appuie sur la touche “avancer”, le client envoie au serveur un message qui dit “mon client veut avancer”, et le serveur détermine si oui ou non le client peut avancer (ex: il n'y ait pas un mur ou un autre joueur en face ?). Quand le client dit “je veux tirer”, le serveur regarde l'angle actuel du client, et envoit une balle selon l'orientation actuelle du joueur. Puis la balle avance (c'est parfois instantané, parfois un peu long, selon si c'est un rifle ou un pulse :) ). Si à un quelconque moment la balle touche un alien, cet alien est blessé. Le serveur envoie alors au client un message demandant d'afficher du sang et un petit bruit d'alien blessé.
Voilà un exemple schématisé d'un humain qui tire sur un petit dretch qui va à fond, dans les trois situations qui peuvent être illustrés (en LAN, à distance sans unlagged, à distance avec unlagged). En rouge l'humain, on voit son angle de vue, et le trait en pointillé est le centre de son viseur.
Aucune échelle dans les suivant schémas n'est respectés.
En haut la position réelle de l'alien, en bas, l'endroit où le client voit l'alien avec 1ms de ping.
Au niveau serveur, l'alien est face au viseur. Au niveau client, pas exactement, mais quasiment.
Le client tire, l'alien est au centre de son viseur. Au niveau du serveur, l'alien est quelques millimètres plus loin.
Le serveur reçoit la demande de tir du client. L'alien a encore fait quelques millimètres, mais est toujours sur la trajectoire de la balle. L'alien est touché.
En haut la position réelle de l'alien, en bas, l'endroit où le client voit l'alien avec 50ms de ping
Au niveau serveur, l'alien est face au viseur. Le client ne le sait pas encore
Le client voit l'alien face au viseur et tire. En réalité, sur le serveur, l'alien est déjà passé depuis 50ms.
Le serveur reçoit la demande de tire du client. Entre le temps où le client à envoyé le tir et le temps où le serveur le reçoit, 50ms de plus se sont écoulé. L'alien est passé depuis longtemps, l'alien n'est pas touché. L'humain aurait du tirer plus à droite et anticiper le mouvement alien pour le toucher.
En haut la position réelle de l'alien, en bas, l'endroit où le client voit l'alien avec 50ms de ping
Au niveau serveur, l'alien est face au viseur. Le client ne le sait pas encore
Le client voit l'alien face au viseur et tire. En réalité, sur le serveur, l'alien est déjà passé depuis 50ms.
Le serveur reçoit la demande de tire du client. Entre le temps où le client à envoyé le tir et le temps où le serveur le reçoit, 50ms de plus se sont écoulé. Le serveur regarde l'état du jeu quand le client a envoyé son paquet. L'alien est donc toujours bien au centre de la hitbox, et il est touché !
Pour observer le comportement lors d'une esquive humaine face à une attaque alien, vous n'avez qu'a reproduire ce schéma, le principe est exactement le même. Si vous avez bien compris comment ça marche pour les tirs, vous comprendrez pourquoi l'esquive avec unlagged est plus difficile que sans, et vous comprendrez pourquoi les conditions idéales d'esquives en LAN sont exactement entre le unlagged on et le unlagged off.
Vous me direz: mais alors, si un client télécharge a fond sur eMule qu'il a 500 de ping et qu'il voit donc tout le monde rester au même endroit pendant une demi secondes à chaque fois, il devient un dieu du Mass Driver ! Il a une demi seconde pour viser, c'est énorme quand on voit la vitesse d'un dretch !
Et bien non. Si un paquet date de plus de 200ms, le serveur n'utilisera pas unlagged, et donc traitera le paquet avec le temps serveur actuel, et pas le temps serveur d'il y a 500ms. du flanc, la limite décrite çi-dessous est à 1000ms
Au sein de la communauté francaise, l'utilisation d'unlagged est très contreversé.
Il rapproche de la situation de jeu en lan : quand on tire sur quelque chose, ça le touche.
Il supprime le problème de l'esquive des humains totalement abusive : on tape quelque chose, il n'est plus là depuis un moment. Comment peut on toucher un truc alors que visuellement on ne sait pas où il est, et qu'il change constemment de position et de direction ? la chance, principalement.
Il réduit le déséquilibre au détenteurs de connexions lentes, sans quoi c'est pour eux difficilement jouable (entre ceux qui ont 10 de ping et ceux qui en ont 90, le 90 de ping skillé sera bien désavantagé face au 10 de ping, même moins skillé !)
Il facilite l'utilisation de certaines armes (basilik, lasergun, massdriver) inadaptés aux latences engendrés par les pings.
Je crois que coté argumentation de bonne foi c'est tout, si vous avez des autres arguments valables, je les ajouterais
On l'accuse d'accorder un avantage injustifié aux détenteurs de connexions lentes, qui sont capable de certaines prouesses telles que tuer un alien qui est déjà caché derrière un mur (le client le voyait encore visible, il tire, au niveau du serveur l'alien était déjà caché, mais il touche quand même…)
Il accroît aussi indirectement la porté des armes de corps à corps aliens lorsqu'un humain recule pour l'éviter (le client le voit un peu plus près que ce qu'il est réellement)
Il rend l'esquive difficile, puisque même après avoir esquivé sur notre client, on peut se faire toucher par un client qui nous voyait à un autre endroit
Je crois que coté argumentation de bonne foi c'est tout, si vous avez des autres arguments valables, je les ajouterais
A priori vous avez maintenant tout les éléments pour juger unlagged à sa juste valeur. Réfléchissez, jouez avec et sans unlagged sur des serveurs en comprenant le fonctionnement interne du bazar, imaginez ce que ça pourrait donner en LAN avec un ping inexistant, pour ne plus jamais accuser unlagged de comportements dont il n'est absolument pas responsable !
Ok ce n'est pas l'endroit pour en parler mais je souhaite être lu (au moins une fois) sans m'inscrire à tous les forums de tremulous. Unlagged a deux défauts supplémentaires
Il segmente les joueurs de tremulous déjà pas nombreux (ex: il n'y a plus que des serveurs unlagged a ping valable pour moi vers 3h du matin. J'arrête de jouer
Pourquoi les quakeurs ne s'attardent pas sur unlagged? Ca fausse le jeu completement. Quand j'ai un alien près de moi, j'anticipe ses mouvements au quart de seconde. Avec unlagged, c'est impossible. Tremulous devient un jeu de tir pur et aucune stratégie de déplacement n'est permise. L'esquive n'est pas un élément central? Ne réduisez pas son importance : le mouvement différencie un quake-like d'un tir aux pigeons. Comment aussi planifier ses mouvements (car un quaker les planifie au quart de seconde dans une melee) si les portées des ennemis sont hasardeuses? Moi quand un alien est a coté, même si pas sur mon écran, je sais exactement ou il est (autour de moi), la marge dont je dispose sans quoi il me chomp, etc. Adieu tout cela avec unlagged.
La communauté trem l'accueille avec plaisir car vous êtes plus ouverts sur le dev (mod, maps, admin de serveurs, etc…) que sur le tweaking et le gaming pur et dur (gestion de config, optimisation du jeu..). En particulier, les admins de serveurs sont souvent de mauvais joueurs et d'excellents devs… et ne peuvent juger efficacement la valeur d'un mod pareil. Belle erreur de l'avoir accepté.