Le netcode ? Kezako ?
Vous avez peut-être entendu sur certains jeux (et pourquoi pas sur TF2) en pleine partie par exemple une personne qui disait : « Hey toi, règles tes rates, tu lag ». C'est par ce cliché que je vais vous introduire ce petit tutoriel qui concerne donc le netcode de notre jeu.Le netcode, qu'est-ce que c'est ? Il s'agit tout simplement d'un ensemble de CVARs (configuration VARiable) qui permettent d'améliorer sensiblement la connexion entre vous et le serveur auquel vous vous connectez lorsque vous jouez.
Mais avant tout, autant que l'on soit bien clair. Seuls les joueurs cherchant le gain de performance pour mieux jouer en compétition voudront s'accaparer ses informations. Je ne les conseille pas pour les personnes jouant occasionnellement en FFA et dont le résultat de leurs frags n'ont pas d'incidence sur la fin de la partie (mis à part de vous taper la honte si vous avez un score vraiment minable
![Très content :D](./images/smilies/icon_e_biggrin.gif)
Pour pouvoir faire ces modifications, nous allons devoir modifier, ou plutôt créer un nouveau fichier CFG (un fichier texte de configuration contenant des commandes qui influent sur le jeu) qu'on appellera autoexec.cfg. Ce fichier doit bien porter l'extension .cfg (sinon il ne sera pas considéré comme tel par le jeu). L'avantage de ce fichier est qu'il se lancera directement au lancement du jeu (mais on ne s'en rend pas compte, l’exécution du fichier étant instantanée). Ce fichier est à placer dans votre dossier cfg du dossier racine de votre jeu. Exemple : C:\Program Files\Steam\SteamApps\votre-nom-de-compte\team fortress 2\tf\cfg. (Voir screenshot) Une fois cela fait, prenez un petit instant pour lire ce qui va suivre, ça devient important.
Vous n'êtes pas sans savoir qu'un jeu tourne grâce à un moteur, un peu comme une voiture, et que ce moteur a justement des mécanismes très précis qui sont assez difficiles à comprendre. J'ai donc fait des recherches dans le but de comprendre le fonctionnement de ce moteur et surtout les éléments qui sont en rapport avec la configuration internet, éléments qui font partie intégrante du netcode.
Je vais donc vous définir rapidement quelques termes génériques en rapport avec ce netcode. Je vais vous donner des définitions basiques, je vous renvoie à mes liens en fin de paragraphe pour des informations beaucoup plus complètes et précises :
Le choke : Le fait que le jeu n'ai pas assez de bande passante disponible pour échanger les paquets de données à la fréquence voulue. Ce problème peut être dû à un netcode mauvais, ou encore à un serveur de mauvaise qualité.
Le loss : Lorsque vous jouez, votre jeu envoie des informations au serveur et en reçoit également sous forme de paquets. Avoir du loss signifie que certains de ces paquets se perdent en route causant ainsi des lags. Ce problème est généralement dû à la qualité de votre connexion internet. Un coup de fil à la hotline de votre FAI devrait pouvoir résoudre ce problème.
L'interpolation : Peut-être un des passages les plus difficiles à comprendre du moteur source, l'interpolation consiste à fluidifier le jeu (non pas aux niveau des FPS, quoique si, un peu aussi, mais au niveau surtout de la connexion client/serveur). L'interpolation va "inventer" des points du joueur situés entre deux positions. Ainsi, si vous avez 85 images par seconde lorsque vous jouez et que le joueur que vous regardez change 20 fois de position par seconde, 65 points seront "inventés" par l'interpolation pour fluidifier son mouvement. Bien sur, rien n'est fait au hasard, ces points sont calculés par des algorithmes et suivent les trajectoires du joueur. L'interpolation induit donc forcément un décalage de temps entre la vue du client et les mises à jour que celui-ci reçoit, compensé par le lag compensation. Attention néanmoins, certaines personnes définissent l'interpolation comme un décalage entre vous et la hitbox (= boite de tir : ce qui permet de calculer si vous avez touché ou non votre adversaire. Elle permet aussi de calculer si votre tir était dans la tête ou non lorsque vous jouez sniper ou si vous avez poignardé dans le dos un ennemi en spy) : Ceci est strictement faux. L'interpolation n'a rien à voir avec la hitbox !
Le lag compensation : Le gros problème des jeux en réseau est la latence aussi appelé « ping ». Elle/il se traduit par un temps (généralement en milliseconde qui peut monter en secondes pour certains joueurs). Le gros problème que cette latence occasionne, c'est que lorsque ce temps est trop long pour un joueur X, il se retrouve obligé de faire des pré-shots (= action consistant à anticiper son tir avant d'avoir son curseur sur l'adversaire) pour espérer toucher sa cible. Grâce au lag compensation, ce besoin ne se fait plus sentir. Comment ? En revenant en arrière ! En effet, le moteur calcule (grâce à des algorithmes) l'instant T précis où le joueur a cliqué et le répercute sur le jeu.
Je vous renvoie à ma documentation, celle qui m'a apprit tout ce que je vous dit aujourd'hui. Je remercie au passage toutes les personnes qui ont travaillé sur le moteur pour nous donner ces définitions claires :
- http://www.siteduzero.com/tutoriel-3-38504-optimiser-le-netcode-de-source.html
- http://www.e-t172.net/articles/srcnetcode/
- http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking (En anglais)
C'est bien beau tout ça, mais comment je fais pour savoir si j'ai du choke ou du loss ? Et bien figurez-vous que ce n'est pas compliqué, il nous suffit d'utiliser un outil remarquable : la console des développeurs. Pour l'activer, il y a plusieurs solutions, mais je vais vous livrer celle qui me paraît la plus simple.
Lancez steam, et allez dans vos options de lancement (comme je vous l'ai apprit dans la première leçon). Une fois la boite de texte ouverte, entrez l'option de lancement -console dedans. (Voir screenshot). Au lancement du jeu, vous pourrez ainsi admirer une nouvelle fenêtre qu'on appelle « console ». Elle permet principalement d'entrer des commandes. Vous allez pouvoir entrer la première qui vous permet de lié à la console à une touche. Pour cela, dans la zone de texte, vous allez taper : bind « p » « toggleconsole ». (Voir screenshot : Vous pouvez observer que mon menu est différent de celui de base, je vous en parlerais dans une prochaine leçon, ne vous inquiétez pas). Ainsi, à chaque fois que vous appuierez sur « p » en jeu, la console s'ouvrira. Vous pouvez bien sur utiliser une autre touche, pour ça, remplacez le "p" par une autre lettre sur la ligne de commande.
Revenons à nos moutons, c'est à dire comment voir le choke et le loss en jeu. Pour ça, c'est très simple, vous entrez sur un serveur (je vous conseille de tester votre choke/loss sur un serveur de match, les configurations de ceux-ci étant optimales pour le jeu en ligne) et dans la console, vous tapez « net_graph 3 » . Vous verrez alors apparaître un tableau très exhaustif dans un coin de votre écran vous montrant 3 valeurs très importantes en temps réel : le ping, le choke et le loss et la durée d'interpolation (Voir screenshot).
Comment optimiser ce netcode alors ? Il existe en fait plusieurs CVARs qui permettent d'améliorer ce netcode. Les voici :
- - la CVAR « Rate » qui permet de limiter justement le netcode. En fait, elle définit le débit maximal d'octets par seconde que vous pouvez envoyer au serveur de jeu. Il est recommandé de mettre cette CVAR à sa valeur maximale (qui est de 1048576) pour profiter pleinement de votre connexion mais les serveurs restreignent généralement cette valeur. Par exemple, sur les configurations de ligue, la valeur maximale est de 60000. En revanche, si votre connexion est connue pour être médiocre, je vous conseille de ne pas dépasser 40000.
- Les CVARs cl_updaterate et cl_cmdrate. La valeur maximale de ces deux commandes sont bridées par le moteur du jeu à 66 toutes les deux, ceci dû au moteur de l'orangebox qui ne permet pas aux serveurs de jeux de dépasser le tickrate 66. Normalement, ces deux variables se règlent en fonction du serveur de jeu sur lequel vous jouez. Si vous voyez que vous avez du choke, il faudra généralement les diminuer jusqu'à qu'il n'y en ai plus ou presque plus. Généralement, vous n'aurez aucun problème en mettant ces deux commandes à 66 (la valeur maximale) si vous avez une bonne connexion. Petite astuce : Mettre la cl_cmdrate à 5 vous permet d'avoir un « faux ping » qui stagnera à 5 (mais, ça reste complètement inutile)
- La CVAR cl_interp. Celle-ci permet justement de contrôler le temps (en secondes) d'interpolation. Là, c'est à vous de voir. Par défaut, cette commande est à 0,1 (ce qui correspond à 100 millisecondes). Le problème, c'est que plus cette durée est élevé, et plus le décalage entre vous et le serveur est grand. Mais l'avantage est que le jeu paraît plus fluide (puisque beaucoup plus de points d'interpolation sont créés). Cette commande se règle donc à votre guise. Certains préfèrent avoir un temps d'interpolation minimal et se rapprocher d'un jeu plus fidèle et règlent donc cette commande à 0,0152 (la valeur minimale) mais perdent en fluidité en fonction de la connexion des autres joueurs. D'autres la laissent par défaut, et arrivent à jouer correctement avec. Pour ma part, je l'ai laissé à 0,1 sur les classes comme le scout et le sniper, et je l'ai mise à 0,030 sur les classes qui balancent des engins explosifs comme le demoman/soldier. Si elle a tendance à virer au jaune sur le net_graph sur certains serveurs, il est néanmoins conseillé de remonter la variable jusqu'à qu'elle vire à l'orange (voire même au blanc). Cette CVAR est aussi géré par une autre, la CVAR cl_interp_ratio qui par défaut est à 1, elle vous permet notamment de définir la valeur minimale de cl_interp. Je vous conseille de la laisser à 1, de toutes manières, la plupart des serveurs la bride à 1, 2 au maximum (divisant ainsi le temps d'interpolation par deux et permettant un temps d'interpolation encore plus petit). Les configurations de ligue, elles, la bloquent à 1.
- La CVAR cl_lagcompensation qui comme son nom l'indique permet d'activer le lag compensation.
En effet, un anglais connu sous le pseudonyme de Chris (Son site web : connu aussi pour ses CFG's High FPS dont je vous parlerais sûrement dans une prochaine leçon) a eu la brillante idée de faire deux configuration de netcode toute prêtes en fonction de la qualité de votre connexion internet.
Si vous avez donc « une bonne connexion » internet, il serait préférable d'utiliser ces réglages. N'hésitez pas néanmoins à les adapter en fonction de ce que je vous ai dit plus haut.
Code : Tout sélectionner
cl_cmdrate "67"
cl_interp "0.0152"
cl_interp_ratio "1"
cl_lagcompensation "1"
cl_pred_optimize "2"
cl_smooth "0"
cl_smoothtime "0.01"
cl_updaterate "67"
rate "60000"
Code : Tout sélectionner
cl_cmdrate "40"
cl_interp "0.025"
cl_interp_ratio "1"
cl_lagcompensation "1"
cl_pred_optimize "2"
cl_smooth "0"
cl_smoothtime "0.01"
cl_updaterate "40"
rate "35000"
Dernière astuce du jour : Il est conseillé de brider ses FPS à une limite maximale (ceci pour éviter les retombées trop astronomiques qui peuvent provoquer des freezes). Pour cela, rien de bien difficile, il vous suffit d'ajouter la commande fps_max à votre cfg en lui ajoutant une variable définie par votre rafraîchissement d'écran (fréquence x2 + 1). Ainsi, si votre écran fonctionne à une fréquence de 85 Hz, il est conseillé de mettre fps_max « 171 ». Pour une fréquence de 75 Hz, mettez fps_max « 151 » et enfin pour une fréquence de 60 Hz, mettez fps_max « 121 ».