Blog des développeurs | Les distances dans NXT

Blog des développeurs | Les distances dans NXT

Voici un blog des développeurs à l'occasion de la sortie prochaine de NXT, le tout nouveau client de RuneScape.

Ouvrez l'œil dans les semaines à venir et restez à l'affût de nouvelles concernant les week-ends de bêta-test de NXT.

Lisez le récit de Mod Philip sur les défis auxquels l'équipe de NXT a fait face pour vous apporter ces points de vue spectaculaires.


Avec le nouveau client de RuneScape, vous pouvez voir bien plus loin qu'avec le client de Java existant. Cela veut dire que nous pouvons améliorer les graphismes de Giélinor comme jamais auparavant, mais cela implique aussi que nous réglions les problèmes qu'une telle possibilité soulève. Initialement, le jeu n'a pas été conçu pour que les joueurs puissent voir si loin, ce qui nous a mené à « d'intéressantes » conversations sur la distance qui sépare les éléments dans l'univers du jeu.

Le premier problème était que certains endroits du jeu semblent plus proches qu'ils ne le devraient, thématiquement parlant. C'est surtout le cas des îles comme Karamja par exemple, qu'il semble maintenant possible d'atteindre rapidement à la nage plutôt que via un long voyage.

L'île de Karamja vue depuis une côte pas si lointaine

Je suis certain de pouvoir faire ça à la nage...

C'est, en fait, très compliqué pour nous de déplacer une île comme Karamja. Il y a de nombreux lieux en jeu qui référencent les coordonnées exactes de certains emplacements sur l'île, et ce d'une manière qui n'est pas facilement détectable et qu'il est impossible de mettre à jour automatiquement. Les efforts nécessaires pour déplacer des lieux ainsi sur le monde de la surface sont bien trop considérables. Nous avons donc trouvé une autre solution.

Tout d'abord, nous avons caché l'île pour qu'elle n'apparaisse pas dans votre champ de vision quand vous ne vous trouvez pas sur l'île (et nous avons caché le reste du monde quand vous êtes sur l'île) pour pouvoir ensuite remplacé l'élément caché par autre chose.

Pour y parvenir, nous avons ajouté une fonctionnalité nous permettant de compartimenter le monde en différentes zones que nous avons chacune marquée à l'aide d'un « identifiant ». Ceci nous permet de rendre ces zones visibles ou invisibles en fonction de leur corrélation et de leur attribuer des propriétés à l'avenir.

Chaque couleur ci-dessous représente une zone. Il risque d'y en avoir plus que ce que vous imaginez !

Carte de couleurs de zones
1. Sous la surface de RuneScape 4. À la surface de RuneScape
2. Donjons 5. Citadelles de clan
3. Assaut de donjon

La deuxième partie du processus consiste à utiliser ces identifiants de zones pour ajouter des éléments « imposteurs » à la place des éléments que nous y supprimons. Par exemple, nous pouvons construire un bout de carte contenant une zone de mer et l'utiliser pour remplacer l'île et la rendre désormais invisible. Cela veut dire que où que vous soyez, vous verrez uniquement les parties du monde que vous êtes censé voir.

Toutefois, jusqu'à présent, nous n'avons pas beaucoup utilisé notre processus d'identifiants de zones pour cacher les îles des continents (et les continents des îles). En revanche, nous l'utilisons beaucoup dans d'autres circonstances, notamment dans le cas où la ligne d'horizon prolongée implique que vous pouvez voir des choses que vous ne devriez pas voir.

Les donjons « non-instancés » sont stockés dans le même espace de coordonnées que « l'overworld » dans RuneScape, avec les modèles que nous avons utilisés pour créer des éléments de contenus « instancés » (enfin, disons plutôt leurs copies pour que plusieurs personnes ou groupes de personnes puissent jouer dans la même zone sans se voir ni interférer entre eux). Comme nous n'avions jamais pensé que nous pourrions voir assez loin pour que cela soit un problème, beaucoup de ces donjons/modèles sont très près les uns des autres et produisent un effet visuel un peu discordant quand vous visitez ces zones !

Tuska visite la demeure de la Faucheuse

Eh bien, Tuska est mort...

Précédemment, nous avions déjà travaillé à l'élaboration de tous ces identifiants de zones (ou du moins de beaucoup d'entre eux) pour que ces zones puissent apparaître sur différentes images de cartes dans la mappemonde. Mais nous ne pouvions pas juste nous servir de ces données pour cacher automatiquement certaines zones par rapport à d'autres puisqu'il existe de nombreux lieux où on peut marcher d'un point à l'autre tout à fait légitimement, même quand ces points se trouvent dans différentes zones. Ce serait problématique de ne pas pouvoir voir vers quoi vous marchez ! Exemple d'une zone de transition divisée

Attention à la marche !

Pour nous, la démarche la plus sûre à adopter consistait, d'un point de vue programmatique, à empêcher de définir les zones entre lesquelles les joueurs et PNJ peuvent marcher dans le jeu. Alors nous avons conçu un outil capable de prélever les informations provenant des cartes de zones du jeu (comme nous l'avons vu avec la mappemonde en jeu) et de générer automatiquement l'image des zones qui doivent être vues depuis tel ou tel endroit, en plaçant des murs invisibles pour empêcher tout déplacement entre ces points.

Ça peut sembler un peu dangereux... Eh bien, ça l'était effectivement ! Nous savions déjà qu'il y avait des lieux où cela diviserait en deux des routes qu'il est normalement possible de traverser. Mais en essayant, nous avons découvert bien d'autres choses encore.

Après bien des tergiversations avec Mod Helen (responsable en grande partie du dur labeur des modifications des cartes), j'ai ajouté des données de sortie à l'outil permettant de générer une carte complète avec les nouveaux murs tracés en magenta, pour que nous puissions analyser plus facilement en quoi cette approche avait échoué.

Tant de murs...

Tant... De.. Murs...

Au bouts de quelques jours d'ajustements, les modèle de donjons et d'instance étaient séparés les uns des autres (enfin, pour la plupart). Après avoir implémenté nos changements, nous avions encore quelques bugs à résoudre où des parties du monde apparaissaient toujours séparées là où cela n'avait pas lieu d'être, mais nous avons pu y remédier facilement.

L'autre cas où le prolongement de la ligne d'horizon nous a posé problème, c'était dans les instances elles-mêmes. Quand des instances ont une apparence acceptable dans un monde ouvert, elles sont programmées pour que les joueurs ne puissent pas s'approcher suffisamment du bord et voir le néant qui gît en-dessous. Dans le nouveau client, ce n'est plus vraiment le cas.

Toutefois, on peut placer quelque chose autour du bord pour masquer le néant. Dans les contenus « instancés », l'environnement est construit en fonction de ce que lui dicte le serveur, ce qui devrait donc être techniquement assez simple à réaliser. Mais les fragments de contenus « instancés » sont très nombreux, donc pour le moment cette fonctionnalité n'a été utilisée qu'à peu d'endroits.

Il y a aussi les endroits où différentes parties de la même instance ne devraient pas être visibles les unes des autres, comme par exemple l'aquarium dans une maison de joueur. Nous n'avons pas encore mis en place tout ce qu'il fallait pour remédier à ce problème, mais en utilisant les techniques que nous avons décrites plus haut, ça devrait être assez simple à régler.

Toutes ces solutions impliquent des efforts manuels : arpenter le jeu, trouver les parties qui nécessitent ce type d'intervention et l'appliquer. Nous nous occuperons en priorité des lieux principaux qui sont les plus évidents. Mais la tâche est d'envergure. Nous aurons besoin de vous au cours du bêta-test de NXT pour nous aider à nettoyer ce qui reste !

En augmentant la ligne d'horizon, nous avons aussi augmenté la distance d'apparition des autres joueurs qui était transmise aux clients de jeu, car c'était assez bizarre de voir les autres joueurs et PNJ apparaître et disparaître alors qu'ils sont en réalité assez près de votre personnage. C'était chouette, mais nous redoutions des problèmes d'équilibrage de jeu dans certaines situations PvP. Pour combattre ceci (jeu de mot voulu), nous avons ajouté des éléments de code permettant de désactiver les objets à fonction décorative dans certaines situations PvP où cela pourrait causer problème, restituant ainsi une distance d'apparition des joueurs identique à celle du client Java.

Ligne d'horizon au Grand Marché

Ils sont partout !

Tout ce travail en valait la peine. C'est vraiment génial de pouvoir voir plus loin dans Giélinor. Fini le brouillard près de la caméra pour moi !

Mod Philip
Directeur technique

Haut de la page