Aller au menu - Aller au contenu

Icône La compilation (B : débogage)

Mise à jour : 22/07/2009
1 414 visites depuis 7 jours, dont 8 sur ce chapitre classé 94/786
Ennemis jurés des mappeurs, les erreurs de compilation nous en ont tous fait baver à un moment ou à un autre...

Certains d'entre vous ont même menacé de se suicider si on ne les aidaient pas pour corriger leurs erreurs ! Vous êtes prévenus !
Alors bon, j'ai décidé de leur venir en aide grâce à ce chapitre, parce que j'ai pô envie de me faire accuser d'homicide involontaire :lol:
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Quand ça plante...

Voici le scénario typique : vous venez de terminer votre première map, et vous êtes impatient de la tester. Qu'à cela ne tienne : vous lisez le chapitre sur la compilation (chapitre précédent), et vous suivez les instructions à la lettre.

Oui mais voilà : à un moment sans crier gare, tout s'arrête brutalement.
  • vous compiliez avec le GUI (et si ce n'était pas le cas vous devriez), le programme s'arrête et affiche un message comme celui-ci :

    hlcsg renvoie une erreur !

  • Si vous compiliez toujours à l'aide de Worldcraft (allez vite apprendre à vous servir de ZHLT Compile GUI), Half-Life se lance quand même mais ne peut pas charger la carte :

    map nomdelamap.bsp not found on server

    Ce message est normal puisque le fichier bsp n'a pas été créé à cause de l'erreur de compilation...
A ce moment là vous commencez à croire que votre travail était inutile et que toute votre belle map est perdue. C'est une erreur, car on peut toujours corriger ce genre de problème avec un peu de patience et de méthode...

Ah là là, heureusement que je suis là quand même ;)
Nous n'allons pas dans ce chapitre analyser toutes les erreurs qui existent une par une. Nous allons voir les erreurs les plus courantes, en les classant par groupes.
Tout d'abord, il y a une fenêtre de Worldcraft à connaître absolument : la fenêtre "Check Map for Problems". Vous pouvez y accéder en faisant la combinaison de touches Alt + P ou bien en allant dans le menu Map / Check for Problems.

Image utilisateur

Cette fenêtre est censée afficher les erreurs que Worldcraft a détectées... Si elle ne s'affiche pas, alors c'est qu'il n'y a pas d'erreur détectée par Worldcraft
Worldcraft sait reconnaître les erreurs les plus courantes, mais il y en a beaucoup d'autres qui lui échappent. Pour être sûr que votre map ne comporte pas d'erreur, il faut faire une compilation normale en lançant tous les 4 compilateurs (hlcsg, hlbsp, hlvis et hlrad).
Si un compilateur vous affiche un "Error" ou un "Warning", alors là vous avez un problème.
Nous allons maintenant voir comment repérer et corriger les erreurs de compilation les plus courantes. Ce sont les méthodes de résolution qui vont nous intéresser...

Les blocs invalides

Qu'est-ce que c'est ?
Bon, un bloc vous devriez quand même savoir à quoi ça ressemble lol. Si par hasard ce n'était pas le cas, je vous conseille fortement de lire les premiers chapitres de ce cours.

Mais un bloc invalide ? C'est un bloc qui n'a pas une forme correcte. Sa structure est anormale, irréelle, improbable, elle n'existe pas dans notre dimension. Bref, vous avez créé un bloc que Half-Life ne comprendra pas.

Pour résoudre ce problème, la plupart du temps on ne cherche pas à comprendre : on supprime le bloc qui fait foirer.
Cependant, j'aimerais quand même que vous compreniez vos erreurs, donc nous verrons aussi pourquoi ça plante. Le plan que nous allons suivre ressemble donc à ça :
  • Les différentes erreurs de blocs invalides
  • Comment retrouver et supprimer le bloc qui foire
  • Mais pourquoi ça foire ?


1\ Les différentes erreurs de blocs invalides



Lorsqu'un de vos blocs a une structure invalide, les ZHLT ne vous sortent pas à tous les coups la même erreur. Le but ici est donc de voir quelles sont les erreurs qui se rapportent à un bloc invalide, pour que vous sachiez si vous avez ou non une erreur de ce type.

Tout d'abord, il faut savoir que seul hlcsg peut vous donner des erreurs de blocs invalides. C'est lui qui s'occupe de les traquer. Voyons quelques-unes de ses erreurs favorites :

hlcsg: Error: Entity 0, Brush 12: outside world(+/-4096):
(-248,-10016,-276)...


Un bloc sort des limites du monde (et pourtant vous avez de la place pour votre map !). En général, on ne voit rien de spécial sous Worldcraft, mais les coordonnées d'un des points du bloc se trouvent vers l'infini (ce qui est impossible, donc ça plante).

hlcsg: Error: Entity 0, Brush 47, Side 16: plane with no normal

Une des faces du bloc, c'est-à-dire un plan, n'a pas de normale. Une normale est une droite perpendiculaire au plan. Tout plan doit avoir une normale, et apparemment le vôtre n'en a pas... Bref ça plante !

hlcsg: Error: Entity 22, Brush 3, Side 10: has a coplanar plane
at (81, -225, -7), texture LAB1_PANEL1D


Mmh... Là encore c'est un des plans du bloc qui est la cause de l'erreur. Ici, il semble qu'il soit coplanaire à un autre plan, c'est-à-dire que deux plans sont situés au même endroit. Et Half-Life semble ne pas l'apprécier.
Dans le dernier cas, sachez que la texture n'a rien a voir avec l'erreur : c'est juste une indication utile pour retrouver le bloc qui foire...
Et justement, on va maintenant s'intéresser aux moyens qui existent pour réparer ces fichus blocs invalides :)


2\ Comment retrouver et supprimer le bloc qui foire



En fait, si un bloc est invalide, vous avez deux possibilités : soit vous le supprimez, soit vous "essayez" de corriger l'erreur. Autant vous le dire de suite : la plupart des mappeurs ne cherchent pas à corriger le problème, ils suppriment carrément le bloc qui foire et ils recommencent.

Mais bon, ce que nous devons faire dans un premier temps, c'est retrouver le méchant bloc dans votre map. Imaginez que votre map contient plus de 2000 blocs (et c'est possible), vous risqueriez de passer un moment à retrouver le bloc qui plante.

Heureusement il existe un moyen très simple de retrouver le bloc :)
Tout bloc (aussi appelé brush) de votre map possède un numéro unique. Et les ZHLT vous donnent ce numéro à chaque fois que vous avez une erreur de ce type ! Voyez par vous-même sur cette erreur :

hlcsg: Error: Entity 0, Brush 47, Side 16: plane with no normal

Ici, c'est le bloc numéro 47 qui est la cause du problème. Bien, maintenant que l'on connaît son numéro, on va pouvoir aller l'identifier sous Worldcraft.

Allez dans le menu Map/Go to brush number, la fenêtre suivante devrait s'ouvrir :

Image utilisateur

Comme vous pouvez le voir, c'est très simple : rentrez le numéro 47 en face de "Brush #", et cliquez sur OK. Worldcraft centre alors les 4 vues sur ce %#$##*$ de bloc : ça y est vous l'avez coincé !
Veillez dans ce cas à laisser le champ "Entity #" à sa valeur 0. C'est très important, sinon ça ne marchera pas.
Par ailleurs, si les ZHLT vous donnent un numéro pour "Entity", il faudra alors que vous renseignez aussi ce champ pour que ça marche.
Bon tout ce qu'il vous reste à faire maintenant, c'est d'appuyer sur la touche "Suppr", pour en finir une bonne fois pour toutes avec ce bloc ;)

Je comprends que vous vouliez en savoir plus sur votre erreur, et que vous aimeriez la comprendre... Je vais donc vous faire un petit speech sur la structure des blocs invalides (mais rapide, parce qu'on pourrait y passer des heures).

3\ Mais pourquoi ça foire ?



Vous êtes vraiment sûrs de vouloir savoir ? Si je vous dis que ça nécessite de bonnes connaissances en maths, et plus particulièrement en géométrie dans l'espace, êtes-vous toujours sûrs de vouloir savoir ? ;)

Bon alors voilà quelques trucs à connaître absolument :
  • Un Morphing (outil "Vertex") est très souvent la cause d'un problème de forme. En effet, c'est un outil très libre qui risque de vous amener à faire un peu n'importe quoi... et donc à créer une forme impossible qui dépasse les lois de la géométrie. Vous êtes plus forts que votre prof de Maths ? :p
  • Si vous avez intégré un Prefab foireux dans votre map, eh bah ça sera la faute du créateur du Prefab. A cause de lui votre map a buggé !
  • Un mauvais Carving aussi peut vous causer des problèmes... Essayez par exemple de carver avec un bloc de forme "Arch". Vous allez immédiatement voir le résultat, je vous le garantis !
Et à quoi ressemblent ces formes invalides ?
Bon alors là, je ne peux m'adresser qu'aux habitués du "Morphing Tool". Ce n'est qu'avec cet outil que je pourrai mieux vous montrer les causes des problèmes.

Prenons cette caisse qui a une forme très simple :

Image utilisateur

Là, tout est à sa place, tout va bien.

Imaginons que je déplace une des faces et que je la fasse passer à travers une autre, comme ceci :

Image utilisateur

Vous voyez que les arêtes s'entrecroisent, et ça c'est pas bon du tout. Ca provoquera forcément un plantage.

Image utilisateur Autre exemple : celui du polygone concave (allez chercher la définition dans un dico si ce mot ne vous rappelle rien). Les polygones de Half-Life sont tous convexes, et si vous voulez en faire un concave, les ZHLT vont planter à tous les coups !
Sur une vue de dessus, ça pourrait donner le résultat de gauche.
Un angle formé par 2 faces se trouve à l'intérieur du bloc, qui devient alors "creux" à l'intérieur : c'est cela un polygone concave.

Les Leaks

Autre méchant problème très courant : les Leaks. Tout le monde en a eu un jour ou l'autre. Vous obtenez une erreur qui ressemble à cela :

hlbsp: Error: Stopped by leak.

A quoi ressemble un Leak ?
Image utilisateur

Nous avions déjà vu cette image dans le chapitre sur les textures... La zone en rouge est la cause de l'erreur.

Un Leak est un trou dans votre map. Vous voyez le vide noir que vous avez lorsque vous commencez une nouvelle map sous Worldcraft ? Eh bien c'est votre pire ennemi : il ne faut jamais montrer ce vide au joueur !
Concrètement, cela veut dire que vous allez devoir en fait créer une sorte de pièce hermétiquement fermée. Dans le cas ci-dessus, pour corriger le problème c'est très simple : il suffit de raccorder les murs pour que le vide ne soit plus visible et le tour est joué !
Oui mais voilà, dans la réalité c'est parfois très difficile de retrouver son Leak : ici le Leak était bien visible, mais l'épaisseur de l'ouverture peut être beaucoup plus petite (1 unité de Worldcraft suffit !). Et alors là c'est le gros bazar pour retrouver le Leak !

Rassurez-vous, il existe des méthodes pour retrouver la position de son Leak : c'est justement ce que nous allons voir...

1\ La bonne méthode



On commence par la meilleure méthode : celle du pointfile. Un pointfile est un fichier à l'extension *.pts qui contient des informations sur des coordonnées de points. Ce type de fichier (avec les *.lin) est automatiquement généré par hlbsp en cas de Leak.

Grâce au pointfile, vous allez pourvoir repérer votre Leak en quelques secondes ! :)

Pour lire les pointfile et les retrouver sous Worldcraft, je vous conseille fortement le logiciel LeakMarker, que vous pouvez télécharger ci dessous :


Pour l'installer, c'est très simple : copiez le programme dans n'importe quel dossier de votre disque dur (comme celui de Worldcraft) et créez un raccourci dans le menu Démarrer ou carrément sur le bureau si vous aimez l'encombrer d'icônes :p

Le programme ressemble à ceci :

Image utilisateur

Le principe est le suivant : vous donnez votre map qui a un Leak à ce programme, et il va créer une entité factice (fausse, inutile, qui n'existe pas, qui ne sert à rien), enfin, une entité de nom inconnu mais placée tout près du Leak... En cherchant cette entité dans Worldcraft, vous vous retrouverez nez à nez avec votre Leak !
  • En haut apparaissent les noms des fichiers que vous avez sélectionné en cliquant sur le bouton "Select Files". Ici, il s'agit d'une map de tests appelée "tests2" que j'ai créé spécialement pour avoir un Leak (je suis un peu maso je sais).
    Notez que l'on doit utiliser 2 fichiers : celui de la map (*.map) et celui du pointfile (*.lin) qui contient des informations sur le Leak.
  • Ici, vous pouvez choisir le nom de la texture de l'entité qui sera créée. Je vous conseille de laisser RED, comme ça vous pourrez pas la louper ;)
  • C'est la classe de l'entité (le type d'entité, au même titre que func_wall par exemple). LeakMarker fait exprès de mettre un nom d'entité qui n'existe pas : comme ça Worldcraft dira qu'il y a une erreur et vous montrera directement cette entité (et donc le Leak qui se trouve à côté).
    Le fonctionnement est tordu, je suis bien d'accord, mais lorsque ce programme vous aura aidé à résoudre votre Leak, vous le bénierez croyez-moi :p
  • C'est le nom de l'entité : laissez-le tel quel.
  • Ce sont les coordonnées des points données par le fichier *.lin qui déterminent la position du Leak.
  • Ce bouton est la première chose que vous devez faire : donnez le nom du fichier pointfile (nomdelamap.lin) et celui du fichier de map (nomdelamap.map) pour que le programme sache sur quoi il doit travailler.
  • Enfin, si tout est bon, cliquez sur le bouton "Mark Leak" : le programme va alors modifier votre fichier .map et y ajouter une entité près du Leak.
Le fichier *.lin n'a été créé que si les ZHLT ont rencontré un Leak au cours de la compilation. Sinon ce fichier n'existe pas.
Le fichier *.lin se trouve dans le même répertoire que votre map.
A partir de là, vous allez retravailler sous Worldcraft. Ouvrez votre fichier *.map.
N'ouvrez pas le *.rmf car il n'a pas été modifié ! Seul le fichier *.map contient la nouvelle entité, c'est donc lui que vous devez ouvrir.
Bon, si votre map est grosse, il va être assez difficile de retrouver l'entité de LeakMarker à l'aveuglette. Ce serait d'ailleurs complètement débile puisque ça reviendrait à chercher le Leak que vous ne trouvez pas :euh:

Heureusement, il existe un moyen pour retrouver l'entité. Allez dans le menu Map/Entity report, ce qui aura pour effet d'ouvrir cette fenêtre :

Image utilisateur

Cette fenêtre recense toutes les entités de votre map. Vous allez ainsi pouvoir repérer en 2 secondes l'entité de LeakMarker.
Et là, cliquez sur le bouton "Go to" : Worldcraft sélectionnera alors l'entité.

Maintenant que vous savez où est votre entité, vous n'avez plus qu'à chercher et à boucher le Leak : il est normalement tout proche de l'entité ! :)

Pensez à supprimer l'entité lorsque vous aurez corrigé votre Leak, parce qu'elle ne vous servira plus à rien. Et n'oubliez pas d'enregistrer votre map en *.rmf et en *.map pour être sûr de ne conserver aucun fichier qui contiendrait toujours le Leak !

2\ La mauvaise méthode



Le (très) mauvais truc que l'on a tendance à faire, c'est "d'entourer" la map de murs géants... L'idée que vous avez est simple : "Puisque je n'arrive pas à trouver mon Leak, je vais créer un très grand cube hollowé autour de la map, comme ça il n'y aura plus de Leak".
Le problème, c'est que cette technique marche... et c'est là tout le danger !
Pourquoi ? A cause de quelque chose dont nous allons beaucoup parler dans les prochains chapitres : les r_speeds.

Je ne vais pas vous expliquer ce que c'est maintenant. Vous devez juste savoir qu'avec cette très mauvaise méthode, votre map va ramer même si vous avez la toute dernière GeForce ! Le nombre d'images par seconde (fps) va chuter lamentablement, et votre map deviendra vite injouable !

Bref, je vous recommande fortement d'utiliser LeakMarker comme nous venons de voir : ça c'est une méthode propre :)

Le sky bug

C'est un bug assez méconnu de Half-Life car il est assez rare... Et pourtant, ça m'est arrivé un beau jour, et je dois avouer que j'étais assez désemparé !
A quoi ressemble le "sky bug" ?
Pour vous faire une idée, il vaut mieux avoir un bon screenshot... J'ai donc créé une map dans laquelle j'ai fait en sorte que ce bug apparaisse.
Voilà ce que ça a donné :

Image utilisateur

Vous voyez le problème maintenant ? ;)

Je me trouve à l'extérieur et il y a donc du sky autour de moi. Je viens de sortir d'un bâtiment par la porte, je me retourne et que vois-je ?
L'intérieur du bâtiment ! Le sky est devenu transparent et du coup maintenant je vois tout ! Pour bien comprendre l'origine de ce problème, il nous faut la vue de dessus ("Top"). Voici ce qu'elle affiche :

Image utilisateur

Bon, ok je l'ai un peu modifiée parce que sinon c'était pas très compréhensible...
Enfin, le problème vient de là : le bloc sky est "collé" au mur, et du coup si le joueur est à l'extérieur et qu'il regarde dans la direction indiquée par la flèche, le sky et le mur disparaissent : on voit l'intérieur du bâtiment ! Et ne croyez pas qu'il suffirait d'espacer le bloc sky et le mur ! Non non, ça serait trop facile...

Alors, quelle est la soluce ?

Elle est longue à réaliser... très longue même selon le cas. Il s'agit d'entourer toute les surfaces externes de sa map par des blocs sky. Au-dessus, au-dessous et sur tous les côtés.
Ces blocs sky doivent être impérativement collés aux autres blocs pour que cette technique fonctionne ! Si vous oubliez d'entourer un seul bloc de votre map par un bloc sky, le sky bug recommencera !
Bien, dans notre exemple, voici comment on aurait dû agir et ce dans toute la map :

Image utilisateur

Des blocs de skys enveloppent tous les murs extérieurs de la map. De cette manière, si vous n'avez oublié aucun mur et si vous avez bien collé vos blocs skys, le sky bug devrait disparaître !
J'espère que vous avez trouvé ce chapitre intéressant, et surtout qu'il vous aura aidé ;)

Si vous avez une erreur de compilation qui n'est pas donnée ici, deux solutions :

  1. Allez voir l'annexe qui recense toutes les erreurs de compilation (prochainement disponible).
  2. Allez sur le forum et expliquez votre problème. Pensez à copier votre erreur de compilation !
Chapitre précédent Sommaire Chapitre suivant

Partager

8 commentaires pour "La compilation (B : débogage)"
Note moyenne : 3.81 / 4 (47 votes)
Pseudo Commentaire
Hors ligne zallaire # Posté le 28/07/2008 à 15:48:00
design
Avatar

Études : AFPA Champs sur Marne

trop fort le site vraiment very very very ....pff comment ca ..... tout le temps avec ma profondeur j'en ai marre mais vraiment very very , mais bon trop fort


Travailler c'est dur , mais alors tous seul c'est vraiment trop dur
allez de l'avant c'est sur mais peut recommander ,à l'usure.
 
Hors ligne kira1403 # Posté le 15/04/2009 à 16:11:50

salut j'ai fais une map sur hammer pour cs et pour la compiler sa me mais sa comme rapport d'erreur :
Error: Could not open wad file \program files\valve\steam\steamapps\kira1403\counter-strike\cstrike\cstrike.wad
Error: Could not find WAD file
Description: The compile tools could not locate a wad file that the map was referencing.
Howto Fix: Make sure the wad's listed in the level editor actually all exist

Error: Could not open wad file \program files\valve\steam\steamapps\kira1403\half-life\valve\decals.wad
Error: Could not open wad file \program files\valve\steam\steamapps\kira1403\half-life\valve\halflife.wad
et sa :
Warning: could not find wad configurations file
Make sure that wad.cfg is in the Half-Life directory or the current working directory
Using mapfile wad configuration

j'ai crue comprendre qu'il arrivais pas a ouvrir les fichier wad et ses petre normal car dans le dossier de counter je ne lais avais pas et je lai ai telecharger

aider moi
Hors ligne Vladiri # Posté le 30/08/2009 à 22:24:25
Counter-Strike 1.5
Avatar

Excuser moi j'ai fait une amap et ca marche pas message d'eereur:
Error: ReadSurfs (line 393): 32 > MAXPOINTS
This is caused by a face with too many verticies (typically found on end-caps of high-poly cylinders)

Et quand je fais alt+p il n'y a aucune erreur c quoi lke probleme svp

Image utilisateur

 
Hors ligne khalilaz # Posté le 29/11/2009 à 16:52:35
Avatar

slt les ami je suis anoir
j'ai un problem sur hammer quand je veut lancé le map i me dit :
"BSP generation successful, writing portal file 'C:\Program Files\Counter-Strike 1.prt'
Warning: No entities exist in hull 1, no filling performed for this hull
Warning: No entities exist in hull 2, no filling performed for this hull
Warning: No entities exist in hull 3, no filling performed for this hull
0.05 seconds elapsed"
svp quelequn peut m'aide
plllllzzzzzzzzzzzzz :(
commont je peut le créer é jouer dans ma map
Hors ligne khalilaz # Posté le 18/12/2009 à 00:06:51
Avatar

mec matieu tu é le best for everrrrrrrrrrrrrrrrrrrr jai fais jusqua mainten 40 map LOL

Voir tous les commentaires