id Tech 4 : création de niveaux

Tout permuter

=DarkRadiant (=DR)

=Interface

  • Raccourcis utiles

    • 0 : Cacher / afficher la grille dans la vue 2D
    • Ctrl + Entrée : lorsque l'outil Clipper est sélectionné, changer la brush qui sera supprimée lors de la séparation
    • Ctrl + T : outil texture
    • Ctrl + U : (tenter de) fusionner deux brush
    • F3 : permuter le mode Preview
    • P : Préférences
    • J : liste des entités
  • Liste de modèles utiles

    On ajoute un modèle à la map en faisant [clic droit dans une vue 2D] > Create Model...

    camera01.ase mapobjects > camera
    flatmonitor.lwo mapobjects > guiobjects
    mattress.lwo mapobjects > tables > bunkbed
    modconsole1.lwo mapobjects > com
    modconsole6.lwo mapobjects > com
  • Changer l'apparence de la grille

    Preferences (touche P) > Settings > Grid

=Matériaux

Les matériaux sont les images appliquées sur les surfaces des modèles et des éléments de géométrie (murs, sol, plafond). Ils sont composés d'une texture (une image) et parfois aussi de filtres spéciaux pour un air particulier.

Note sur les sprite : plusieurs matériaux contiennent un attribut nommé deform, avec la valeur sprite. Cela signifie que la texture devra toujours faire face au joueur (la technique s'appelle le billboarding). La façon la plus pratique de les utiliser est de créer un patch simple, d'appliquer le matériau dessus et de régler sa taille dans le Surface Inspector.

  • Emplacements de matériaux

    caulk textures/common/caulk

    Pour les surfaces extérieures du niveau qui ne seront jamais vues par le joueur.

    nodraw textures/common/nodraw

    Un matériau invisible.

    Note : Ce matériau ne doit pas être utilisé pour les surfaces extérieures du niveau, car il causera des problèmes de détection de collision. Il est préférable d'utiliser le matériau caulk.

    _default (par défaut) _default
    player_clip textures/common/player_clip
    visportal textures/editor/visportal

    Cette texture est définie dans materials/invisible.mtr. La définition du matériau fait référence à un fichier de texture (textures/editor/visportal.tga) qui ne semble pas exister parmi les ressources de Doom 3.

    Le Dark Mod quant à lui contient un fichier nommé visportal.tga, ce qui peut porter à confusion pour les utilisateurs de l'éditeur de niveau DarkRadiant.

    Note : l'effet des visportal ne sera visible que lorsqu'il y en a plusieurs dans le niveau. Un visportal seul est inutile et on peut prouver, à l'aide de la variable de console r_showPortals, qu'il ne sera pas pris en compte lors de la compilation du niveau.

  • Textures personnalisées

    1. Créer un fichier avec l'extension .mtr dans base/materials
    2. À la base, une texture peut être extrêmement simple :

      textures/masection/monmat
      {
          qer_editorimage textures/fichierImage
          diffusemap textures/fichierImage
      }

      On définit ici le matériau monmat qui se trouvera dans le « dossier » masection dans le gestionnaire de matériaux (Media Manager) de DarkRadiant.

      Noter que masection n'est pas un vrai dossier ; en utilisant cette nomenclature, on saura où trouver le matériau dans le gestionnaire de matériaux de DarkRadiant. C'est une méthode pour mieux catégoriser le matériel dans la fenêtre.

      • qer_editorimage est l'image qui représente la texture dans DarkRadiant
      • diffusemap est l'image qui sera vue dans le jeu

    On peut utiliser des textures en plusieurs formats, dont JPEG (pas seulement TGA). Indiquer l'extension du fichier n'est ni obligatoire, ni défendu.

    Note

    Pour une raison que j'ignore présentement, le premier matériau dans un fichier .mtr que j'ai fait moi-même n'est accessible que dans le dossier Other Materials dans DarkRadiant. Le matériau s'appelle textures/chose/navire, et dans DR, il se trouve ici : Other Materials/textures/navire.

    Le problème n'affecte que le premier matériau ; ceux qui le suivent (dans le même fichier) se trouvent au bon endroit : dans textures/chose.

  • Fichiers de définitions de matériaux

    • pak000/materials/lights.mtr : définitions des matériaux des lumières

=Fonctionnalités

  • Centrer une vue 2D sur la caméra

    1. Tout désélectionner
    2. Faire Ctrl + Tab trois fois
  • Sélection rectangulaire dans une vue 2D

    Tenir la touche Maj avant de cliquer-glisser la souris dans la vue 2D

=Édition d'un niveau

  • Compilation d'une map

    • Pour éviter les fuites, toujours placer tous les objets à l'intérieur de la map, même les entités non physiques (sons, trigger, target, peu importe).
    • Lorsqu'on répare une fuite dans une map, il faut recompiler la map pour que la réparation soit enregistrée (et pour que DarkRadiant arrête de signaler la fuite).
  • Transformer une brush en func_static

    1. Sélectionner la brush
    2. Dans une des vues 2D, [clic droit sur la brush] > Convert to func_static

      ou

      Dans une des vues 2D, [clic droit sur la brush] > Create entity... > darkmod > Func > func_static

  • Transformer une brush en patch

    Patch > Create Simple Patch Mesh

    Note : La fenêtre qui apparaîtra affichera deux valeurs, Width et Height. Ces deux valeurs font référence au nombre de sommets dans le patch. Plus il y a de sommets, plus le patch peut être plié en gardant une surface lisse.

  • Créer une échelle

    1. Créer une brush
    2. Lui appliquer la texture common/ladder, ET NON ladder_metal ou toute autre sorte d'échelle, car ces textures viennent de materials/tdm_misc.mtr, qui appartient au Dark mod
  • Créer un écran qui pourra afficher un GUI

    Utiliser un modèle :

    1. [Clic droit dans une des vues 2D] > Create model...
    2. Choisir un fichier .lwo approprié. Les entités pouvant afficher des GUI sont limitées ; il y en a sous mapobjects/guiobjects et mapobjects/com (modconsole1, 2, 3, etc.)

    ou

    Créer une surface plate pour l'écran :

    1. Créer un patch simple : Patch > Create Simple Patch Mesh
    2. Convertir l'objet en func_static
    3. Appliquer la texture textures/common/entitygui sur le patch
    4. Lui ajouter la propriété gui, avec comme valeur l'emplacement du gui voulu (format : guis/mon_interface.gui)

      Note : il est possible d'ajuster la taille du gui sur l'écran avec la fenêtre Surface Inspector.

  • Appliquer une vue de caméra sur un écran simple

    1. Construire une salle avec un info_player_start et une lumière
      1. Créer une func_securitycamera
      2. Choisir son modèle : models/mapobjects/camera/camera01.ase
      3. Choisir son nom
      1. Créer une brush, la sélectionner et faire Patch > Create Simple Patch Mesh (utiliser les paramètres par défaut)
      2. Dans une vue 2D, [clic droit sur l'objet] > Convert to func_static
      3. Dans le menu Media, appliquer la texture textures/cameraImg1, puis s'assurer que la texture est bien appliquée avec le Surface Inspector.
      4. Choisir son gui : guis/cameras/cam_on.gui
      5. Choisir son cameratarget (le nom de la caméra)
  • Appliquer la vue d'une entité func_cameraview sur un écran

    1. Sélectionner le modèle de l'écran (par exemple, models/mapobjects/com/modconsole1.lwo)
    2. Ouvrir le gestionnaire de textures (touche T)
    3. Shader : Media > textures > cameraView1
    4. Ajouter une propriété gui, avec le nom du func_cameraview comme valeur
    5. Ajouter une propriété skin, et lui attribuer la valeur skins/flatmonitorcameragui

    Note : dans le fichier DoomConfig.cfg, s'assurer que la variable image_downSize a la valeur 0 ; si ce n'est pas le cas, la vue de la caméra sera distordue.

    Note : la description de la classe C++ idCameraView décrit un problème potentiel avec l'application d'une vue de caméra sur un GUI.

  • Créer un ciel

    1. Sélectionner les brush qui afficheront la texture du ciel
    2. Leur appliquer un des matériaux dans textures/skies avec le Media Manager

    Note : Les matériaux de ciel sont dans pak000/materials ; les images qu'ils utilisent sont dans pak000/env.

  • Cibler un objet avec une caméra

    1. Créer une entité func_cameraview
    2. Créer une entité target_null et la placer où la caméra devra regarder
    3. Ajouter au func_cameraview une propriété nommée « target », avec comme valeur le nom du target_null

    Si la func_cameraview ne regarde pas dans la bonne direction, il suffit de lui faire subir une rotation sur l'axe de hauteur (l'axe z, dans DarkRadiant).

  • Construction et placement des vis portal

    La construction d'un vis portal se fait en trois étapes :

    1. On crée une brush qui fera la même taille que le passage entre les deux salles.

      Note : l'épaisseur du vis portal devra obligatoirement être inférieure à celle des murs qu'il touche ; ni le devant, ni l'arrière ne doivent s'aligner avec les murs. Si cela arrive, on risque d'éprouver des problèmes d'affichage, surtout dans une vue de caméra.

      S'il y a une porte, lui donner les mêmes dimensions que celle-ci, toujours à l'exception de l'épaisseur qui devra être plus petite pour que la nouvelle brush puisse s'y insérer sans dépasser d'un côté ou de l'autre.

    2. Dans une vue 2D, on fait un clic droit sur la brush, puis on choisit "Make Visportal" (il n'y aura aucun espace entre Vis et Portal dans DarkRadiant). La surface marquée « Vis-Portal » devra être orientée vers une des deux salles.

      VisPortal1

      (J'ai modifié ici la texture d'origine pour améliorer la lisibilité. Remarquer que le vis portal est plus mince que les murs.)

    3. Si c'est un passage sans porte, on peut placer une entité info_locationseparator de façon à ce qu'elle passe à travers le vis portal.

      Ainsi, la cadence sera plus sûre et les entités info_location passeront les bonnes données au joueur.

    Pour voir si les vis portal fonctionnent bien, taper ceci dans la console :

    • r_showTris 2 (ou 3) : afficher tous les triangles dans la scène ; 2 == seulement les faces orientées vers le joueur, 3 == faces arrières aussi
    • r_useScissor 0 : afficher tous les triangles rendus, pas seulement ceux qu'on peut voir
    • r_showPortals 1 : afficher les vis portal
  • Créer de l'eau (Dark mod seulement)

    1. Créer une salle
    2. Créer la brush qui représentera l'eau, à l'intérieur de la salle
    3. Appliquer la texture common/nodraw à la brush
    4. Sélectionner la surface du haut (Ctrl + Maj + clic) et lui appliquer la texture water_source/water_clear, par exemple

=Problèmes

  • DarkRadiant n'affiche pas les trois fenêtres orthographiques, même après avoir choisi l'option, puis redémarré le logiciel

    Le fichiers de configuration de DarkRadiant contiennent une erreur.

    • Naviguer au dossier AppData/Roaming/DarkRadiant
    • Supprimer tous les fichiers, puis redémarrer DR
  • Un matériau qu'on vient de créer et placer dans le dossier base/materials est introuvable dans DarkRadiant

    Ce problème peut affecter ceux qui auraient utilisé le code source d'id Tech 4 pour créer un mod de Doom 3 dans un autre dossier.

    Pour que DarkRadiant trouve un fichier, celui-ci doit être dans le dossier base/materials du répertoire qu'on a spécifié la première fois qu'on l'a exécuté, car c'est dans ce dossier que les ressources seront recherchées.

    • S'assurer que le fichier est bien dans le dossier indiqué. Pour changer le dossier racine du jeu : Edit > Preferences > Game > Engine Path.

    (Le champ de texte sera peut-être vide. Pour moi, c'est toujours le cas quand je le vérifie ; ça fonctionne quand même quand on le modifie.)

  • Le Media Manager n'affiche plus les onglets des matériaux

    Parfois, la fenêtre Media n'affiche les onglets que la première fois qu'elle est visionnée. Ensuite, les onglets deviennent tous blancs.

    • Cliquer sur un autre onglet dans la fenêtre (Entity, Script ou Console) et retourner dans Media.

      OU

    • Visionner les textures dans la fenêtre Surface Inspector (View > Surface Inspector) en cliquant sur le bouton à côté de Shader.
  • Les entités trigger sont affichées dans la map comme des cubes noirs au lieu d'être invisibles

    Lorsqu'une entité trigger est modifiée mais la map n'est pas recompilée, l'entité prend la forme d'une boîte noire.

    Noter que la commande de console testmap ne met à jour la map que s'il n'y a aucune fuite.

    Pour compiler la map et afficher les messages d'erreur, utiliser la commande dmap.

    • Si la map a une fuite, tout placer les objets à l'intérieur du niveau, y compris les entités non physiques, puis recompiler.
  • Après avoir rétabli une entité trigger en brush normale (avec Ctrl + Z), il n'est toujours pas possible de redimensionner la brush

    Il faut reconvertir explicitement l'entité en func_static.

    • [Clic droit sur la forme (dans une vue 2D)] > Revert to worldspawn
  • Une entité trigger n'a pas la même forme dans DarkRadiant et Doom 3

    Parfois, les nouvelles entités trigger ont des formes ou des tailles différentes entre DarkRadiant et Doom. Des fois elles fonctionnent mal pour aucune raison ostensible.

    Je n'ai aucune explication, mais on dirait que les entités trigger fonctionnent mieux en suivant l'approche suivante :

    1. Créer la brush dans la map, puis compiler
    2. Transformer la brush en trigger, puis recompiler
    3. Si l'entité doit appeler une fonction de script, ajouter la propriété call et recompiler

    Il est peut-être possible de jumeler les deux dernières étapes.

  • Certains types d'entité ne sont pas visibles dans DarkRadiant

    Il est possible que les éléments soient filtrés dans la vue.

    Filter > [désélectionner tous les éléments]

=DOOMEdit

Avant de passer à DarkRadiant, je m'étais un peu familiarisé avec l'éditeur de niveau natif de Doom 3.

Pendant un temps, je m'en servais aussi pour compiler des maps que j'avais créées avec DarkRadiant (Bsp > bsp)

=Notes générales

  • Réinitialiser l'interface

    Redémarrer DOOMEdit.

  • Transformer une brush en func_static

    1. Sélectionner la brush
    2. Dans une des vues 2D, [clic droit sur la brush] > func > func_static

=Problèmes

  • L'interface de DOOMEdit ne s'affiche pas bien (Windows 7)

    Désactiver le thème Aero de Win7 :

    1. Clic droit sur le bureau > Personnaliser
    2. Sélectionner un thème de base, comme Windows 7 Basic
  • Erreur lors de l'ouverture d'un fichier .map : No worldspawn in map

    1. Ouvrir le fichier avec un éditeur de texte
    2. Sous ces lignes :

      Version 2
      // entity 0

      ajouter ceci (y compris les accolades) :

      {
          "classname" "worldspawn"
          // primitive 0
      }

  • Avertissement lors de la compilation de la map : WARNING: Couldn't load image: _emptyname

    La cause de ce message n'est pas certaine. Le problème s'est réglé lorsque j'ai créé une map simple entièrement dans DOOMEdit plutôt que commencer dans DarkRadiant et utiliser DOOMEdit pour compiler.

    Ce message n'est malgré tout qu'un avertissement et ne semble pas empêcher la compilation de la map.

  • Erreur de compilation : fuite dans la map

    Il est possible que cette erreur apparaisse dans la console de Doom quand on utilise la commande dmap pour compiler une map :

             **********************
    WARNING: ******* leaked *******
             **********************

    • Il y a peut-être un trou dans la géométrie.
    • Il n'y a peut-être pas d'info_player_start dans la map.
    • S'assurer que toutes les surfaces extérieures du niveau ont un matériau avec collision (pas nodraw, ni même nodrawsolid). Le matériau caulk est utile dans ce cas.