Format
.MAP |
|
|
Le
fichier map standard est utilisé par les éditeurs pour les
jeux basés sur le moteur de Quake et ses dérivés. |
|
C'est
un format qui permet d'enregistrer un niveau dans un format non compilé
qui permet d'être utilisé par divers éditeurs et pour
divers jeux. |
|
C'est
un fichier texte séparé en deux parties distinctes, la partie
consacrée aux polyèdres fixes du monde
du jeu "worldspawn" et une autre partie consacrée
aux entités placées dans la carte.
En fait le worldspawn est une entité lui-même. |
|
Le
commentaires ou les informations propres à l'éditeur sont
précédées de //,
ces informations ne sont pas prises en compte pour la géométrie
réelle du niveau. Ces informations servent à classer les polyèdre
par groupe par exemple. |
Chaque
élément de la map est défini comme une entité
avec un classname qui est le nom de l'entité,
par exemple worldspawn ou light etc... |
Chaque
élément est contenu entre deux parenthèses {
}, chaque polyèdre dans un élément est contenu
également entre deux parenthèses { }. |
|
Chaque
polyèdre ou "Brush" est défini
par les surfaces qui le composent, chaque surface
est définie par 3 sommets, par le nom de la texture, l'offset
de la texture, l'angle de la texture et son échelle sur les deux
axes. Il y a encore des valeurs possibles pour des informations sur le contenu,
les flags, et une autre valeur. |
|
|
Si
on regarde les valeurs des trois sommets on sera surpris car seul le premier
correspond à un véritable sommet du polyèdre. En effet,
chaque surface n'est pas définie par tous ses sommets comme la logique
le voudrais, mais par trois sommets seulement. Pour définir une surface
plane, on a besoin en fait que de trois sommets, c'est l'éditeur
de map qui va ensuite calculer les intersections entre tous les plans du
polyèdre et définir tous les sommets. |
Je
pense que ce choix a été fait pour limiter au maximum la taille
des fichier map et simplifier leur manipulation. |
Mais
simplement définir trois points n'est pas suffisant, car il faut
également définir quel est l'extérieur du polyèdre,
sinon l'éditeur ne saura pas comment créer ce polyèdre. |
C'est
l'ordre dans lequel les sommets sont définis qui fait basculer la
normale de la surface. La normale étant un vecteur perpandiculaire
à la surface, si la normale pointe vers l'extérieur du polyèdre
la surface sera visible et le polyèdre sera fermé et valide. |
|
Il
faut bien rappeler que seules les surfaces planes sont valides et seuls
les polyèdres convexes le sont également. Un polyèdre
convexe est un polyèdre où chaque point qui le constitue peut
avoir tous les autres point en vue directe depuis l'intérieur. Par
exemple dans une sphère on peut voir nimporte quel autre point de
la sphère, mais si on lui fait une bosse certains endroit ne seront
plus visibles de partout et le volume ne sera plus convexe. |
|
Le
premier sommet défini est toujours un sommet du polyèdre,
les deux autres sont simplement calculés pour être dans le
bon plan et dans l'ordre voulu pour que la normale soit dans le bon sens. |
|
Pour
connaître l'ordre dans lequel placer les deux autre sommets, on commence
par définir la normale à la surface, cette normale est obtenue
par calcul vectoriel simple. En effet un polyèdre doit absolument
être un voulme convexe, ce qui signifie que pour trouver le sens de
la normale à un sommet, il suffit de se référer au
centre du polyèdre. |
On
trace un vecteur du sommet vers le centre, et on le compare avec le produit
vectoriel obtenus avec les deux vecteur qu'on obtient à partir des
trois sommets de la surface. Si les deux vecteurs ont des directions opposées
on sait dans quel ordre placer les sommets, l'ordre est une question de
convention du format map. |
|
Le
reste des informations sur la surface, c'est le nom de la texture, puis
les coordonnées de placement de la texture sur la surface. |
On
a tout d'abord l'offset (décalage) (x, y)
entre l'origine de la surface et l'origine de la texture (basé sur
le premier sommet) |
Puis
on a l'angle d'orientation de la texture (-180°
à 180°) |
La
troisième information, c'est l'échelle
de la texture sur les deux axes. |
|
Les
dernières valeurs ne sont pas communes à tous les jeux, il
peut y avoir une information sur le contenu (par exemple de l'eau) ou sur
des flags divers qui vont donner des indication sur le comportement de la
surface selon les conditions du jeu. |
|
Les
jeux les plus anciens avaient recours à ces valeurs qui ne sont plus
utilisées aujourd'hui avec Quake 3 et l'introduction les shaders
qui contiennent ces informations. C'est bien plus pratique, car on peut
modifier les shaders sans avoir à toucher au fichier map polyèdre
après polyèdre et on peut même modifier le comportement
d'une surface sans avoir à recompiler la map. Le shaders sont lus
par le moteur du jeu et peuvent être modifiés en tout temps
une fois le niveau terminé. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|