TechniqueÉquilibrageOutils

Des guides de build calculés, pas estimés

On voulait publier des fiches de build sur le site. Plutôt que d'estimer les chiffres à la main, on a écrit un simulateur qui appelle les vraies formules du serveur. Dès son premier passage, il a montré que quatre emplacements d'armure sur six ne servaient à rien.

·6 min de lecture ·L'équipe de Valenya

Tous les jeux du genre ont leurs guides de build, et ils ont tous le même problème : les chiffres sont écrits à la main. Justes le jour de la publication, approximatifs la semaine suivante, faux après le premier patch d'équilibrage. Et personne ne s'en aperçoit.

On voulait des fiches de build sur le site, alors on a commencé par l'outil : un simulateur headless qui rejoue les formules réelles du serveur et dont la sortie alimente directement la page. Ce détour a coûté plus cher que d'écrire les fiches à la main. Il s'est remboursé avant même la première publication.

La règle qui tient tout

Le simulateur a une règle dure, et c'est la seule chose à retenir de ce billet :

Le simulateur ne recopie aucune constante d'équilibrage.

Pas une. Les dégâts, les seuils de progression, les coûts de sorts, les synergies, les règles d'armure par classe... tout est lu depuis les classes du serveur qui font foi en jeu. Si une formule change, le simulateur change avec elle sans qu'on touche une ligne.

La tentation inverse est forte, parce que recopier une constante prend trois secondes et importer un module de combat dans un outil de génération de site en prend trois heures. Mais une constante recopiée est une divergence programmée : elle sera juste jusqu'au jour où elle ne le sera plus, et ce jour-là rien ne le signalera.

Les seules valeurs propres au simulateur sont ses hypothèses, c'est-à-dire ce que les formules ne déterminent pas : combien de cibles se trouvent dans une zone d'effet, quel taux de réussite on suppose pour les sorts qui demandent de viser, quelle proportion du combat le personnage passe au contact.

Ces hypothèses sont affichées sur chaque fiche. Un chiffre de dégâts par seconde ne veut strictement rien dire sans elles ; les cacher aurait fait de la fiche un argument d'autorité plutôt qu'une mesure.

Ce que le simulateur mesure

Six métriques, sur neuf archétypes répartis sur quatre classes, à quatre paliers de niveau :

MétriqueCe qu'elle répond
Dégâts par seconde mono-cibleEst-ce que ça tue un boss ?
Dégâts de zoneEst-ce que ça tient un pack ?
Temps de descente d'un bossCombien de temps sous pression ?
Kills par minuteEst-ce que ça farme ?
SurvieEst-ce que ça encaisse ?
SoinsEst-ce que ça tient le groupe ?

Un détail de méthode dont on est content : la durée d'un combat n'est pas une fenêtre arbitraire. Elle se déduit par point fixe. Les points de vie de la cible divisés par les dégâts par seconde donnent une durée, mais les dégâts dépendent eux-mêmes de la durée puisque la réserve de mana s'épuise, alors on itère jusqu'à convergence. C'est ce calcul qui décide si la réserve tient, et c'est dans le même point fixe que se résout l'uptime de Fureur du barbare.

Prouver que le simulateur ne ment pas

Un simulateur qu'on ne confronte jamais au serveur est une deuxième implémentation du jeu, avec ses propres bugs. Il fallait un test qui compare les deux.

Ce test de fidélité fait frapper le vrai code de combat du serveur sur un joueur et une créature construits pour l'occasion, puis compare le résultat à celui du simulateur. Tolérance : 2 %, avec un plancher d'un point et demi de dégât, parce que le serveur arrondit à chaque étape là où le simulateur arrondit une fois.

Le test a trouvé trois erreurs le jour de son écriture :

  1. Les passifs de soin du clerc s'empilent multiplicativement (+43,75 %), pas additivement.
  2. Un passif anti-boss était compté comme un bonus permanent alors qu'il a un verrou par tour.
  3. Le sélecteur d'équipement ignorait les règles d'armure par classe et habillait les barbares en plaque et les bardes en maille, ce que le serveur refuse.

Trois erreurs qui auraient produit des fiches crédibles, cohérentes entre elles, et fausses.

Ce que l'outil a révélé sur le jeu

C'est là que le détour s'est remboursé. Le simulateur avait été écrit pour publier des guides ; il a d'abord servi de détecteur de trous.

Quatre emplacements d'armure sur six ne servaient à rien

Jambières, bottes, gants et capes des paliers sombracier, argent, mithril et dragon sortaient toutes à zéro armure, sans le moindre bonus. Chaque pièce au-dessus du niveau 7 était donc strictement inférieure à son équivalent en acier, et un personnage optimisé au niveau 30 gardait ses pièces de niveau 7 jusqu'au bout.

Personne ne l'avait vu. En jouant, on ramasse une pièce de meilleur palier, on l'équipe, on continue. Le simulateur, lui, cherche le meilleur équipement disponible : il a immédiatement rendu des builds de haut niveau chaussés en acier.

La cause était dans le générateur, pas dans les données. Il calculait l'armure du plastron et du casque, et zéro pour les quatre autres emplacements. La règle vit maintenant dans une table unique où les emplacements secondaires s'expriment en fraction du plastron du même archétype, donc ils héritent de la progression par palier sans qu'on ajoute une seule constante.

Les boucliers ne protégeaient de rien

Du niveau 7 au niveau 20, aucun bouclier ne comptait. Le test « est-ce un bouclier ? » regarde une colonne de catégorie d'armure, et les boucliers de palier avaient été insérés sans cette colonne. Leur valeur d'armure, de 7 à 13, était purement décorative. Seuls les quatre boucliers de niveau 1 fonctionnaient.

Le plafond de niveau ne tenait pas debout

Avec un simulateur, on peut poser des questions qu'on ne pouvait pas poser avant. Trois mesures ont suffi à condamner le cap de niveau 200 : le niveau 40 représentait 0,45 % du trajet vers le cap, passer de 199 à 200 coûtait à lui seul quatre fois tout le parcours du niveau 1 au 40, et un personnage au cap atteignait 5 044 points de vie face à un bestiaire dont la créature la plus résistante en a 2 983.

Le cap est descendu à 100, la valeur pour laquelle les constantes du serveur sont calibrées. Le code le disait déjà en commentaire, d'ailleurs. Les onze paliers d'équipement ont été réétalés sur toute la courbe : chacun règne huit à dix niveaux au lieu de deux à cinq. Il faut dire que l'argent et le mithril se démodaient en deux niveaux alors qu'ils coûtent un cœur de boss, le pire rapport coût/durée de toute la progression.

La chaîne, de bout en bout

Un build part d'une description en français, « barbare de mêlée à deux mains, priorité Force », qui ne contient pas un seul nombre. Un sélecteur l'habille avec le meilleur équipement réellement disponible en jeu à son niveau, le simulateur le fait combattre, et les six métriques atterrissent sur la page. Après un changement de formule ou de sort, les fiches se régénèrent d'un bloc. Aucune n'est mise à jour à la main, donc aucune ne peut rester en retard sur les autres.

La morale

On a écrit un outil pour remplir une page web et il a servi d'audit d'équilibrage. Rien d'étonnant, au fond : un simulateur est le premier joueur qui essaie vraiment de jouer optimalement, sans se lasser, et sans supposer que si une pièce de haut palier existe, c'est qu'elle doit être meilleure.

Les fiches sont dans l'onglet Builds du guide. Les hypothèses sont affichées en haut de chaque fiche. Commencez par elles.