id Tech 4 : astuces générales

Tout permuter

=Configuration

La configuration de Doom 3 se fait avec des fichiers avec l'extension .cfg. Ces fichiers règlent plusieurs variables comme la langue, la résolution, le mappage des touches, etc. Par défaut, ils se trouvent dans le dossier base. Le plus important d'entre eux est DoomConfig.cfg, qui est vérifié en dernier.

Pour exécuter un fichier .cfg personnalisé lorsque le jeu ouvert, ouvrir la console et taper exec suivi d'un espace et du nom du fichier .cfg. (Le fichier doit se trouver dans le dossier base.)

Note importante pour la création d'un fichier .cfg :

Dans les fichiers de configuration, il est possible de mettre une ligne en commentaire en la débutant avec //, comme en C++. Par contre, les commentaires multilignes (/* ... */) ne sont pas reconnus.

 

  • Notes générales sur le clavier

    Comme bien des jeux, Doom 3 assume qu'on utilise un clavier AZERTY si on choisit la langue française.

    Cela signifie que si on utilise un clavier QWERTY, appuyer sur la touche Q sera traité, dans le jeu, comme appuyer la touche A.

    Ce n'est pas un problème pour jouer, et la console quant à elle capte les bons caractères.

    Par contre, dans les fichiers de configuration (comme DoomConfig.cfg et default.cfg), les touches seront attribuées comme elles le seraient pour un clavier AZERTY :

    bind "z" "_forward" // au lieu de "w"
    bind "s" "_back"
    bind "q" "_moveLeft" // au lieu de "a"
    bind "d" "_moveRight"

  • Modifier le fichier de langue

    Tout texte dynamique dans Doom 3 utilise un code numérique qui fait référence à une chaîne de texte dans le fichier de langue.

    • Pour l'anglais, le fichier consulté est dans pak007.pk4 ; il s'agit de strings/english.lang
    • Pour le français, le fichier est dans zpak003.pk4 : strings/french.lang

    Note importante : Si on cherche à ajouter des nouvelles chaînes de texte au fichier, il faudra suivre la nomenclature acceptée ; le nom de la chaîne doit commencer par #str_ et finir par un nombre. Les noms de chaînes contenant des lettres (après le préfixe) ne seront pas acceptés et Doom ne démarrera pas.

  • Choisir la langue

    La langue de l'application est gérée dans neo/sys/sys_local.cpp. La variable importante est une idCVar nommée sys_lang.

    Il y a plus d'une façon de régler la langue, en voici quelques-unes :

    • Régler la variable dans base/DoomConfig.cfg :

      seta sys_lang "french"

      Voir la CVar sys_lang dans les astuces de console.

    • Créer un raccourci et ajouter une variable à la ligne de commande
      1. Créer un raccourci vers Doom3.exe
      2. Dans le raccourci, ajouter à la fin de la cible :

         +set sys_lang "french"

        Il n'est peut-être pas nécessaire d'ajouter un espace au début, mais c'est recommandé.

=Fonctionnalités

Notes :

  • Dans le jeu, F12 == capture d'écran (l'image est sauvegardée dans base/screenshots)
  • Doom 3 est capable de jouer des demos, c'est-à-dire de réafficher, en temps réel, des parties déjà jouées qui ont été enregistrées dans un fichier .demo. Il n'y en a qu'une par défaut, que le jeu utilise pour faire le test de performance. Le fichier, demo1.demo, se trouve dans pak000/demos.

=Ressources

Toutes les ressources dans Doom 3 se trouvent dans le dossier base, dans des fichiers .pk4 (parfois appelés paks). Ces fichiers ne sont que des .zip avec une extension modifiée, et peuvent être ouverts avec une application comme WinZip ou 7-Zip.

Quand le jeu doit trouver un fichier, il cherche exclusivement le dossier base. S'il y a des sous-dossiers dont il reconnaît le nom (maps, materials, script, etc.), il passera par le dossier pertinent. Si le dossier ne contient pas le fichier voulu, Doom passera ensuite aux .pk4.

Les paks seront examinés en ordre décroissant : les fichiers « zpak » seront cherchés avant tout, et le fichier pak003.pk4 sera traversé avant pak002.pk4.

L'avantage de ce système est qu'il permet de remplacer des fichiers compressés avec des versions plus récentes, sans devoir effacer l'original. Toutefois, l'inconvénient principal, évidemment, est que plusieurs fichiers de ressources seront dupliqués, ce qui est le cas pour Doom 3.

Seules les versions les plus récentes des ressources seront indiquées ci-bas.

Où trouver certaines ressources :

  • pak000

    • le dossier script contient la plupart des scripts d'intelligence artificielle, de map et d'armes
    • damage.def : définitions de types de dégâts
    • weapon_handgrenade.def
    • entités (.def)
    • maps (.map, .proc)
  • pak002

    • modèles (.md5mesh, .md5anim)
  • pak003

    • sound/musical/d3theme.ogg
    • sound/metal/1shot_metalhit_04.wav
  • pak006

    • guis/hud.gui

=Shader sonores

Les shader sonores sont des définitions de sons qui joueront dans la map. À partir d'un fichier audio, on peut créer un son en spécifiant s'il doit jouer en boucle, s'il s'agit d'un son global, quel sera son volume, etc.

Notes :

  • Note sur la déclaration d'un shader sonore

    Quand on définit un shader sonore, toujours mettre un espace entre le nom du shader et l'accolade, à défaut de quoi DarkRadiant considérera l'accolade comme une partie du nom. Les sauts de ligne sont aussi acceptés.

    mon_shader {
    sound/fichier_audio.ogg
    }

    Quelques shader dans Doom 3, comme marscity2_comp_vidconnect_req, ont été écrits sans espace. Voici le résultat dans DarkRadiant :

     DarkRadiant_shader_sonore

=Skins

Les skins modifient les matériaux des modèles. Ils permettent de remplacer un matériau défini dans le fichier du modèle par un autre. Les fichiers .skin vont dans le dossier base/skins.

Exemple de skin :

skin skins/flatmonitorcameragui {
model models/mapobjects/guiobjects/flatmonitor/flatmonitor.lwo
textures/common/entitygui textures/cameraimg1
}

Ce skin change la texture du modèle (entitygui) à cameraimg1. La première ligne est optionnelle ; lorsqu'on cherche à ajouter ou modifier la propriété skin du modèle flatmonitor.lwo, ce skin apparaîtra dans le dossier Matching skins dans DarkRadiant.

=Terminologie

  • Bilinear interpolation (bilerp)

    Interpolation d'une valeur à une autre, mais sur deux axes (x / y) ; il s'agit donc d'une grille de valeurs, plutôt qu'une ligne simple. Le résultat final pour une valeur est affecté par les deux interpolations.

  • Scissor rectangle

    MSDN : a user-defined rectangular sub-section of the render target

    Ce terme signifierait une zone de l'écran (ou d'une texture destinée à recevoir une image rendue) définie par l'utilisateur.

  • Vis portal

    Pour assurer une cadence (framerate) constante, il est nécessaire de séparer logiquement toutes les salles, en vue de calculer le rendu de ce que verra le joueur, et rien de plus.

    De plus, chaque salle peut contenir une entité info_location afin d'indiquer son nom dans l'affichage tête haute, mais il faut pour cela la séparer de toute salle adjacente.

    Ceci n'est possible qu'avec les vis portal, qui ne sont en fait que des brush avec des textures spéciales.

    Comment construire des vis portal

=Problèmes d'exécution

  • Lorsque Doom est démarré en mode fenêtré, la fenêtre est étirée

    Si la CVar r_mode a une valeur entre 0 et 8, la résolution sera réglée automatiquement en fonction du chiffre, chacun correspondant à une résolution prédéfinie.

    Ce n'est que si r_mode a une valeur de -1 qu'on peut utiliser une résolution personnalisée. Le cas échéant, on peut régler la largeur et la hauteur de la fenêtre avec r_customwidth et r_customheight.

    • Dans la cible du raccourci, entrer le chemin vers Doom 3, suivi des CVar. Par exemple :

      "C:\Program Files (x86)\Steam\SteamApps\common\Doom 3\Doom3.exe" +set r_fullscreen 0 +set r_mode -1 +set r_customwidth 1024 +set r_customheight 768

  • Un son devant jouer au début du niveau n'est pas audible

    Quand on ouvre Doom 3 à l'aide d'un raccourci qui charge directement un niveau (avec la commande map), les sons seront démarrés juste avant qu'on puisse jouer.

    Il est donc possible de ne pas entendre un son qui doit jouer une seule fois au départ. Si on recharge ensuite le niveau en utilisant la commande map dans la console, le son sera audible.

  • Boîte de dialogue : Run-Time Check Failure #0

    Il est possible de rencontrer cette erreur durant l'exécution :

    Debug Error!

    (...)

    Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

    (Please Retry to debug the application)

    La Calling convention est semblable à la signature d'une fonction ; ça détermine les paramètres qu'elle peut accepter.

    Ce problème fait surface pour des fonctions de script lorsque les paramètres pour une fonction de script diffèrent entre ses définitions. Par exemple :

    • Si la fonction est définie avec un paramètre float dans doom_events.script :

      scriptEvent void freeze( float showPlayer );

    • et l'événement de la fonction est définie avec le même paramètre dans neo/game/script/Script_Thread.cpp :

      const idEventDef EV_Thread_Freeze("freeze", "f");

    • mais la fonction C++ reliée à l'événement ne prend aucun paramètre :

      void Event_Freeze();

    Alors la boîte de dialogue apparaîtra, au lieu de l'autre fenêtre à l'arrière-plan bleu qui explique que la fonction de script et la fonction C++ ne sont pas pareilles.