-
Notifications
You must be signed in to change notification settings - Fork 6
ZONES
##Encodage des zones
Les zones sont utilisés dans le client (au moins 1.25) pour les changements de musiques de fond, le serveur fait aussi appel à un autre encodage de zone sur les cartes du monde afin de définir les type des lieux (Mur, pvp, non-pvp, ...).
Il existe différents formes mise en œuvre pour l'encodage des zones. Ces différentes méthodes ont pour but de facilité un type d'utilisation de ces zones.
##Sommaire
-
1 Les zones rectangulaires
-
2 Les zones irrégulières
-
2.1 Vecteur
-
2.2 Division par secteur
-
2.3 Compression RLE
##Les zones rectangulaires
Ce système est souvent utilisé à l'intérieur du code source du jeu (par conséquent elles sont compilées). Leur avantage est de pouvoir être calculées très rapidement par l'intermédiaire d'intersections et de différences. Leur désavantage est qu'il est nécessaire d'avoir un grand nombre de zones pour obtenir des cartes précises.
A l'heure actuel il n'existe pas d'éditeur permettant de modifier ce type de zone suite au fait que cela nécessite de changer le code assembleur de manière automatique. La meilleure approche pour éditer ces données est de fournir un patch pour lire un fichier externe afin de charger les informations au démarrage et de substituer le code assembleur par un système plus générique.
##Graphique représentant les zones rectangulaires.
Ce type de zone est relativement simple a encoder car elles nécessitent que peu d'informations. (borne minimum, borne maximum, orientation) Ces zones sont ordonnées afin de définir des priorités entre elles, ainsi, si une zone recouvre la même surface, la dernière zone "active" sera prise en compte.
Ce type de zone est utilisé dans le client pour déterminé le type de musique de fond. Les coordonnées du joueurs sont exprimées de la même manière que les cotés afin de pouvoir être comparé. A chaque cotée correspond une constante exprimé sur le graphique précédent.
Si type = 0 Alors
Si x >= x0 && x <= x1 && y >= y0 && y <= y1 Alors
// Dans la zone
FinSi
Sinon
Si x + y >= x0 + y0 && x + y <= x1 + y1 && x - y >= x0 - y0 && x - y <= x1 - y1 Alors
// Dans la zone
FinSi
FinSi
##Les zones irrégulières
Ce type de zone est utilisé dans le fichier T4C Worlds.wda pour l'encodage des cartes du monde. Bien que plus volumineux que le précédent format il offre une meilleure précision en spécifiant la valeur pour chaque triplet de coordonnées. (monde, x, y) Ainsi dans le précédent fichier a chaque coordonnées correspond un quartet (un demi octet) qui indique le type de zone.
Les cartes irrégulières peuvent être soit diverses formes selon leur but.
##Vecteur
Généralement ce type de format est utilisé pour favoriser un chargement rapide, sous réserve d'avoir suffisement de mémoire pour contenir l'intégralité de la carte afin de ne plus avoir à lire à nouveau le fichier contenant la carte. Ce type de format est très consommateur d'espace disque.
##Division par secteur
La division par secteur, comme utilisé dans les fichiers MAP, a pour but de pouvoir chargé un petit nombre de données en mémoire tout en permettant une fluidité des déplacements sur les cartes. Les fichiers MAP sont découpés en blocs de 128x128 car la mémoire était un problème important lors de la sortie des premières versions de la 4ème prophétie.
Ce type de découpage permet de charger plusieurs secteurs simultanément afin de masquer les transition entre les secteurs. Ainsi le client charge 4 blocs de 128x128 afin d'assurer la fluidité du défilement de la carte sur votre écran. Les 4 blocs chargés sont les blocs correspondant aux zones où vous avez la plus grande probabilité d'aller.
Ces explications permettent d'expliquer en partie le risque de déconnexion lié au changement de zone. En effet, un changement de zone entraine une ré-initialisation des 4 blocs, ce qui est couteux en temps sur d'ancienne machines.
##Compression RLE
La compression RLE est utilisé pour réduire la taille de donnée redondante dans un vecteur. Cette compression compte le nombre d'éléments consécutifs ayant la même valeur. Ce compteur est ensuite échappé avec une valeur qui ne doit pas être pouvoir identifir comme étant la valeur de l'un des éléments.
C'est pour cette raison qu'il y a un nombre limite d'identifiant d'objets statique.