--------------------------------------------------------------------------------
2 Introduction
2.1 Connaître les spécificités du moteur de Quake 3
2.1.1 Une explication sommaire du processus de compilation
Avant de mettre les mains dans le cambouis, il serait bon de rappeler les spécificités-clé du moteur de Quake III Arena.
Trois phases sont nécessaires au niveau de la compilation pour que les maps soient d'une part reconnues par le moteur et d'autre part agréables à jouer et à regarder par les joueurs.
La première phase, obligatoire, est appelée l'étape BSP.
L'on part du format .map lisible sous GTKRadiant pour arriver au format .bsp après compilation. Que ce passe t'il pendant cette phase ? En fait, les brushes composant la map sont simplement découpés en triangles et les textures sont appliquées avec leur caractéristiques (alignement et shaders).
La seconde phase, optionnelle, est appelée l'étape VIS.
Cette étape est ici pour des fins d'optimisation. La map étant divisée en triangles, la méthode consiste à ne pas afficher les triangles qui ne sont pas visibles par le joueur. Si la map est bien conçue, cette économie se traduit par un gain assez net en termes de performance.
La dernière phase, optionnelle, est appelée l'étape LIGHT.
Comme son nom l'indique, cette partie s'occupe simplement de l'éclairage de la map. Elle n'est uniquement dédiée qu'à l'embellissement de la map.
Si les deux dernières phases sont optionnelles, c'est qu'elles ne servent qu'à améliorer la jouabilité d'une map (Fluidité et Eclairage). En conséquence, lors de compilations de tests, pour vérifier l'agencement des brushes, il est souvent utile de n'effectuer que l'étape BSP, les temps de compilation seront d'autant plus courts.
Ces explications sont très sommaires mais suffisantes pour ce que nous allons étudier par la suite. Toutefois, pour avoir des informations détaillées sur le processus de compilation, vous pouvez lire le tutorial 'Q3Map Explanation' par Small Pile of Gibs, dont une version en français est disponible aux éditions Game-Lab.
2.1.2 A propos des shaders
Sur une face d'un brush est appliqué une texture avec ses coordonnées et son shader. Un shader est TOUJOURS associé à au moins une texture.
Par abus de langage, lorsque l'on dit que l'on applique un shader sur un brush, on applique également la texture correspondante.
Pour des informations exhaustives sur les shaders, lisez le Shader Manual (Disponible dans la dernière release de GTKRadiant). Désolé pour les anglophobes, il n'existe actuellement aucun équivalent complet et potable en français.
2.1.3 Coordonnées ST et UV
Les coordonnées ST sont les attributs d'alignement d'une texture sur un Brush.
Regardez le screen suivant pour comprendre la signification de ST:
"C:\Documents and Settings\All Users\Documents\taf pour ce weekend\Q3map2 manual\CH4NDL3R\screens\exemple_st.jpg"
Les coordonnées UV sont les attributs d'alignement d'une texture sur un Patch.
Regardez le screen suivant pour comprendre la signification de UV:
"C:\Documents and Settings\All Users\Documents\taf pour ce weekend\Q3map2 manual\CH4NDL3R\screens\exemple_uv.jpg"
A RENEGOCIER :p
--------------------------------------------------------------------------------
2.2 Conventions Utilisées
Les fonctionnalités de Q3Map2 s'appellent toutes via des switches, connus aussi sous le nom de paramètres.
Ces paramètres en ligne de commande sont appellés comme ceci : q3map2 -nom_du_parametre
Ceci va lancer q3map2 en un certain mode; par exemple q3map2 -vis lance l'étape VIS.
Ces paramètres ne sont parfois pas compatibles entre eux : ainsi vous ne pourrez par exemple apposer les switchs -vis et
-light sur la même ligne de commande, et vous ne pourrez pas non plus mettre le switch -v avant -vis.
L'ordre et les combinaisons de switchs peuvent paraître rébarbatives au premier abord, mais par la suite lorsque vous serez suffisamment à l'aise avec Q3Map2, l'expérience vous dira quels switches peuvent être utilisés dans tel ou tel cas.
Les rêgles sont les suivantes :
Le fichier .map à compiler est TOUJOURS LE DERNIER paramètre.
A chaque fois qu'une valeur d'un paramètre est mise entre guillemets, il va de soit qu'il faut ôter ces guillemets lorsque vous l'appliquerez "en vrai".
ex: Vous pouvez mettre par exemple "bfp" à -fs_game si vous mappez pour le mod Bid For Power pour Quake 3.
En vrai, on tapera -fs_game bfp
Partant du principe que Q3map2 gère différemment les fonctionnalités graphiques suivant les jeux, certains switches fonctionnent avec certains jeux seulement. Pour chaque switche, j'indiquerais quel(s) jeu(x) peut(peuvent) en bénéficier.
Un code couleur verra le jour dans un avenir, disons *relativement* proche.
--------------------------------------------------------------------------------
2.3 "Compiler comme un homme" Créer son batch file personnalisé
2.3.1 Introduction
Certains utilisent des Compiler Front End, c'est à dire des programmes en mode graphique avec des jolies fenêtres permettant de configurer sa compilation comme chacun l'entend. Le souci de ces programmes est qu'une fois le bazar configuré, il faut tout de même lancer l'interface graphique de configuration pour pouvoir compiler.
D'autres utilisent le menu BSP de GTKRadiant. Ca n'est pas mauvais car l'on peut logguer l'affichage dans la console de radiant et les messages d'erreurs apparaissent distinctement dans une fenêtre à part. Le problème vient une fois la map finalisée, où la release tient simplement à une compile satisfaisante au niveau de l'éclairage. Relancer GTKRadiant simplement pour compiler est assez frustrant.
La solution vient du batch file, combinant de nombreux avantages :
léger : un double-clic ou un glisser-déposer et la compilation se lance automatiquement.
modulable : on l'ouvre avec le notepad pour changer les options de compilation à la volée.
portatif : grâce aux variables d'environnement, vous pouvez compiler vos maps sur n'importe quel PC sous Windows.
2.3.2 Mise en oeuvre
Les variables d’environnement sont des raccourcis utilisés pour certaines commandes.
Ainsi, sous Windows, vos fichiers temporaires vont dans un répertoire précis défini par ces variables.
Vous pouvez changer ce répertoire en modifiant la variable d’environnement correspondante, l’avantage étant qu’en cas de modification, tous les programmes tiers utilisant le répertoire temporaire de Windows « sauront » où il se trouve.
Ici, on utilise cette fonctionnalité à notre avantage puisque l’on va définir plusieurs variables d’environnement pour chaque processus de compilation, avec des paramètres différents, ceci afin d’avoir un batch capable de supporter plusieurs types de compilation (finale : tous les paramètres de qualité activés, test : paramètres de debug, etc…).
On va définir de la même manière les paramètres communs à tous les processus, ainsi que les répertoires utilisés.
Une variable d’environnement se définit comme suit :
set Ma_Variable=Mes_Parametres
Les caractères accentués sont évidemment à bannir.
Une fois définie, il reste à l’appeler :
Compileur_de_maps.exe %Ma_Variable%
%Ma_Variable% va être remplacée lors de l’exécution du programme par sa valeur, c'est-à-dire : Mes_Parametres. L’appel de la variable dans l’exemple précédent est donc équivalent à celui-ci :
Compileur_de_maps.exe Mes_Parametres
Pour tous les chemins d’accès utilisez des slashes au lieu de backslashes. N'ajoutez pas de slash au bout du dernier répertoire.
Ex : C:\Games\Quake3\ devient C:/Games/Quake3
Pour les noms longs et comportant des espaces, utilisez le format 8.3 (8 lettres pour le nom du ficher, 3 lettres pour son extension).
L’équivalent 8.3 d’un nom à plus de huit lettres s’obtient de la manière suivante :
1 – Supprimez tous les espaces du mot et convertissez-le en minuscules.
2 – Gardez les 6 premiers caractères et ajoutez "~1" à la fin (sans les guillemets).
3 - Si un nom de fichier terminé par "~1" existe déja, mettez "~2" à votre fichier, sauf s'il est alphabétiquement plus près que le premier fichier. Dans ce cas, inversez les terminaisons. (Si "~1" et "~2" existent, mettez "~3", et ainsi de suite...)
Ex : C:/Program Files/Quake III Arena devient C:/progra~1/quakei~1
Vous pouvez tout de même utiliser des noms longs à condition de les encadrer de guillemets.
Ex : c:/progra~1/quakei~1/ est équivalent à "c:/program files/quake iii arena"
Créez votre batch dans votre répertoire de travail (là où il y a tous vos .map).
Si vous travaillez sous Windows, copiez-collez les lignes suivantes :
@echo off
rem ****BSP STAGE****
set BSP_VAR=-meta -verboseentities
rem set BSP_VAR=-meta -verboseentities -leaktest
rem set BSP_VAR=-meta -verboseentities -debugportals
rem set BSP_VAR=-meta -verboseentities -debugsurfaces
rem set BSP_VAR=-meta -verboseentities -leaktest –notjunc
rem ****VIS STAGE****
set VIS_VAR=-vis -saveprt
rem set VIS_VAR=-vis –fast –saveprt
rem set VIS_VAR=-vis -hint -saveprt
rem set VIS_VAR=-vis -saveprt –nopassage
rem ****LIGHT STAGE****
set LIGHT_VAR=-light –fast –filter –super –patchshadows –bounce 3
rem set LIGHT_VAR=-light -fast
rem set LIGHT_VAR=-light -fast -bouncegrid
rem set LIGHT_VAR=-light -fast -nogrid
rem set LIGHT_VAR=-light -fast -bouncegrid -border
rem set LIGHT_VAR=-light -fast -bouncegrid -bounce 3
rem set LIGHT_VAR=-light -fast -bouncegrid -bounce 3 –super 2
rem set LIGHT_VAR=-light -fast -bouncegrid -bounce 3 -shadeangle 35 –tresh .5
rem set LIGHT_VAR=-light -fast -bouncegrid -bounce 3 –super 2 -patchshadows
rem tout a donf'
rem set LIGHT_VAR=-light –bounce 99 –bouncegrid –patchshadows –shadeangle 35 –super 86 –thresh .45
rem Editez le MOD_DIR si votre map est dédiée à un mod particulier
rem Par ex, q3f2 pour Q3 Fortress, bfp pour Bid For Power...
set MOD_DIR=baseq3
rem set MOD_DIR=q3f2
rem Editez pour adapter le batch à votre configuration.
rem N'oubliez pas les slashs /
rem c:/progra~1/quakei~1 = "c:\program files\quake iii arena\"
set GAME_DIR=c:/progra~1/quakei~1
set Q3MAP_PATH=%GAME_DIR%/radiant/q3map2.exe
rem set Q3MAP_PATH=f:/compil~1/q3map_~1/q3map2.exe
set MAP_PATH=%1
rem set MAP_PATH=nomdelamap.map
rem Et voici le programme proprement dit. Vous n’avez pas besoin d’y toucher.
set GEN_OPTIONS=-fs_basepath %GAME_DIR% -fs_game %MOD_DIR% -v
%Q3MAP_PATH% %BSP_VAR% %GEN_OPTIONS% %MAP_PATH%
%Q3MAP_PATH% %VIS_VAR% %GEN_OPTIONS% %MAP_PATH%
%Q3MAP_PATH% %LIGHT_VAR% %GEN_OPTIONS% %MAP_PATH%
%Q3MAP_PATH% %GEN_OPTIONS% -info %MAP_PATH%
pause
rem pause permet d’inspecter le log dans la console MS-DOS.
2.3.2.4 Comment fait-on pour changer des options ?
Toutes les commandes débutant par le mot-clé "rem" sont purement et simplement ignorées. Ce mot-clé est en fait bien utile puisqu'il vous permet de changer les options de compilation à la volée. En effet, vous voulez par exemple changer la variable BSP_VAR qui est actuellement :
set BSP_VAR=-meta -verboseentities
en
set BSP_VAR=-meta -verboseentities -leaktest
Effacez simplement le mot-clé "rem" devant
rem set BSP_VAR=-meta -verboseentities -leaktest
et ajoutez-le devant
set BSP_VAR=-meta -verboseentities
Au final, on obtient :
set BSP_VAR=-meta -verboseentities -leaktest
rem set BSP_VAR=-meta -verboseentities
Pour lancer la compilation, deux choix possibles :
-Soit vous travaillez en même temps sur plusieurs maps, auquel cas je vous suggère de laisser le MAP_PATH par défaut et de glisser-déposer votre .map sur le fichier batch.
-Soit vous travaillez sur une seule map à la fois, dans ce cas changez le MAP_PATH=%1 en MAP_PATH=nomdevotremap.map. Vous n'aurez plus qu'à double-cliquer sur le .bat pour lancer la compilation.
2.3.2.5 Adapter le batch pour les autres jeux
Q3Map2 est entièrement compatible avec les jeux suivants :
Quake III Arena
Q3A: Team Arena
Star Trek Elite Force
Return to Castle Wolfenstein
Jedi Knight 2
Jedi Academy
Soldier of Fortune 2
Wolfenstein: Enemy Territory
Pour compiler vos maps avec les jeux autres que Quake 3 Arena, des modifications mineures sont à apporter :
La variable GAME_DIR doit pointer dans le répertoire du jeu.
Pour Return to Castle Wolfenstein, le répertoire par défaut est "C:\Program Files\Return to Castle Wolfentein\" ce qui nous donne :
set GAME_DIR=c:/progra~1/return~1
La variable MOD_DIR doit avoir pour valeur le nom du dossier où se trouvent les fichiers .pk3 du jeu original.
Pour Return to Castle Wolfenstein, le nom de ce dossier est "main", ce qui nous donne :
set MOD_DIR=main
Vous devez ajouter à la variable GEN_OPTIONS le switch "-game wolf", ce qui nous donne
set GEN_OPTIONS=-game wolf -fs_basepath %GAME_DIR% -fs_game %MOD_DIR% -v
Le tableau ci-après récapitule les valeurs à remplir pour deux des variables d'environnement:
Nom du jeu | -game | MOD_DIR |
==============================|==========|=============|
Quake III Arena | quake | baseq3 |
Q3A: Team Arena | quake | missionpack |
Star Trek Elite Force | ef | |
Return to Castle Wolfenstein | wolf | main |
Jedi Knight 2 | jk2 | |
Jedi Academy | ja | |
Soldier of Fortune 2 | sof2 | |
Wolfenstein: Enemy Territory | et | etmain |
Tenebrae 2 engine | tenebrae | |
==============================|==========|=============|
Les MOD_DIR absents ne sont pas nécessaires (en fait, je ne les connais pas :p). Mais ça marche pépère si vous supprimez le switch "-fs_game %MOD_DIR%" de la variable GEN_OPTIONS. Du moment que le -game est précisé, c'est l'essentiel.
Attention pour les jeux utilisant le moteur Tenebrae 2, vous devez spécifier le %MOD_DIR%, sinon q3map2 ne retrouvera pas ses petits.
2.3.2.6 Adapter le batch pour Medal of Honor et Call of Duty ? <<<<< NON TESTE !!! A VOS RISQUES ET PERILS !!
Q3Map2 fonctionne partiellement avec :
Medal of Honor Allied Assault (BSP + VIS uniquement)
MoH : SpearHead (BSP + VIS uniquement)
MoH : BreakThrough (BSP + VIS uniquement)
Call of Duty (BSP + VIS uniquement)
-> Pour Medal of Honor et ses add-ons
Par conséquent, vous devrez également modifier les variables liées à l'étape LIGHT.
Vous devez ajouter dans la variable GEN_OPTIONS le switch "-game quake".
La variable LIGHT_VAR contiendra les switchs relatifs à l'exécutable chargé de gérer le calcul des lumières, MoHlight.exe
Renseignez-vous pour connaître les switchs disponibles et leur effet.
La variable GAME_DIR doit pointer dans le répertoire du jeu.
Le répertoire par défaut est "C:\Program Files\EA GAMES\Medal of Honor Allied Assault\" ce qui nous donne :
set GAME_PATH=c:/progra~1/eagame~1/medalo~1
La variable MOD_DIR doit avoir pour valeur "main" (c'est le nom du répertoire contenant les .pk3)
Vous devez créer une variable LIGHT_PATH pointant sur l'exécutable MoHlight.exe.
Par exemple :
set LIGHT_PATH=%GAME_DIR%/editing/mohlight.exe
Et vous devez modifier la ligne
%Q3MAP_PATH% %LIGHT_VAR% %GEN_OPTIONS% %MAP_PATH%
en
%LIGHT_PATH% %LIGHT_VAR% %MAP_PATH%
Pour l'add-on SpearHead, suivez les opérations précédentes et changez MOD_DIR de telle manière qu'il porte le nom du dossier où sont contenus tous les .pk3 de l'addon (Allez, je vous aide, son nom est "mainta").
Pour BreakThrough, suivez toutes les opérations précédentes, MOD_DIR prend cette fois pour valeur "maintt".
ATTENTION :
Pour des soucis de compatibilité, ajoutez systématiquement la clé "_keeplights" dans l'entité worldspawn afin d'éviter que MoHLight n'ait aucune lumière à calculer. Q3Map2 laisse les infos de lighting dans le .map contrairement à son prédecesseur. Si vous ne mettez pas la clé, vous aurez au choix un plantage à l'exécution de MoHLight ou alors aucune lumière dans la map.
En même temps, je dis ça, mais j'ai absolument rien testé :p Ca se trouve ça marche quand même.
Merci à ceux qui ont/auront eu le courage de tester de me le signaler.
-> Pour Call of Duty
Pour Call of Duty, il faut procéder de la même manière que pour Medal of Honor. le LIGHT_PATH doit cette fois pointer sur flare.exe
Allez donc voir sur CaskAmi Prod (=> google), il y a sans doute des infos supplémentaires interessantes.
2.3.2.7 Adapter le batch pour les futurs jeux
Non Testé :
MoH : Pacific Assault
Star Trek Elite Force 2
Impossible de vous dire à l'heure actuelle quelle seront les variables à modifier pour que le batch soit compatible avec ces futurs jeux.
Lorsqu'ils seront disponibles, ce guide sera mis à jour.
Non testé également:
Warsow (Moteur QFusion)
Warsow passe en mettant -game quake.
Tous les switchs (notamment pour le lighting) ne passent pas avec Wsw.
Tous les lightstyles quelqu'ils soient font clignoter la map lorsqu'on les utilise. Ca vaut le détour :)
2.3.2.8 Un batch pour Linux ??
CE BATCH N'A PAS ETE ENCORE TESTE !!
Pour créer notre batch, nous allons utiliser le langage de script fourni avec toutes les distributions, bash
# !/bin/bash
# ****BSP STAGE****
set BSP_VAR=-meta -verboseentities
# set BSP_VAR=-meta -verboseentities -leaktest
# set BSP_VAR=-meta -verboseentities -debugportals
# set BSP_VAR=-meta -verboseentities -debugsurfaces
# set BSP_VAR=-meta -verboseentities -leaktest –notjunc
# ****VIS STAGE****
set VIS_VAR=-vis -saveprt
# set VIS_VAR=-vis –fast –saveprt
# set VIS_VAR=-vis -hint -saveprt
# set VIS_VAR=-vis -saveprt –nopassage
# ****LIGHT STAGE****
set LIGHT_VAR=-light –fast –filter –super –patchshadows –bounce 3
# set LIGHT_VAR=-light -fast
# set LIGHT_VAR=-light -fast -bouncegrid
# set LIGHT_VAR=-light -fast -nogrid
# set LIGHT_VAR=-light -fast -bouncegrid -border
# set LIGHT_VAR=-light -fast -bouncegrid -bounce 3
# set LIGHT_VAR=-light -fast -bouncegrid -bounce 3 –super 2
# set LIGHT_VAR=-light -fast -bouncegrid -bounce 3 -shadeangle 35 –tresh .5
# set LIGHT_VAR=-light -fast -bouncegrid -bounce 3 –super 2 -patchshadows
# tout a donf'
# set LIGHT_VAR=-light –bounce 99 –bouncegrid –patchshadows –shadeangle 35 –super 86 –thresh .45
# Editez le MOD_DIR si votre map est dédiée à un mod particulier
# Par ex, q3f2 pour Q3 Fortress, bfp pour Bid For Power...
set MOD_DIR=baseq3
# set MOD_DIR=q3f2
# Editez pour adapter le batch à votre configuration.
set GAME_DIR=/usr/local/games/quake3
set Q3MAP_PATH=$GAME_DIR/radiant/q3map2
# set Q3MAP_PATH=/home/compile/q3map_2.5.4_linux_x86/q3map2
set MAP_PATH=$1
# set MAP_PATH=nomdelamap.map
# Et voici le programme proprement dit. Vous n’avez pas besoin d’y toucher.
set GEN_OPTIONS=-fs_basepath $GAME_DIR -fs_game $MOD_DIR -v
$Q3MAP_PATH $BSP_VAR $GEN_OPTIONS $MAP_PATH
$Q3MAP_PATH $VIS_VAR $GEN_OPTIONS $MAP_PATH
$Q3MAP_PATH $LIGHT_VAR $GEN_OPTIONS $MAP_PATH
$Q3MAP_PATH $GEN_OPTIONS -info $MAP_PATH
Sauvegardez ces lignes dans un fichier intitulé par exemple nom_du_batch.
Enfin, ajoutez les droits en exécution de votre fichier (chmod u+x nom_du_batch).
Votre fichier batch est désormais prêt.
Pour les autres tips, je ne détaillerai pas pour la version Linux, car il y a très peu de réglages à faire (quand il y en a ...) et vous êtes de toutes façons capables de vous débrouiller :)
2.3.2.9 Récupérer le log de la compilation
Par défaut, tous les messages du compilateur sont affichés dans la console. Comment relire ces messages une fois la compilation terminée ?
-Méthode 1 :
Dans les paramètres des Commandes MS-DOS (command.com ou cmd.exe suivant les versions de Windows), modifiez la taille du buffer pour qu'il garde environ 1000 lignes en mémoire. Vous pourrez ainsi lire le log en utilisant la barre de défilement.
Revers de la méthode, on ne dispose pas d'outils de recherche de texte.
-Méthode 2 :
On va modifier le fichier batch pour enregistrer les informations de compilation dans un fichier texte.
Repérez les lignes suivantes :
%Q3MAP_PATH% %BSP_VAR% %GEN_OPTIONS% %MAP_PATH%
%Q3MAP_PATH% %VIS_VAR% %GEN_OPTIONS% %MAP_PATH%
%Q3MAP_PATH% %LIGHT_VAR% %GEN_OPTIONS% %MAP_PATH%
%Q3MAP_PATH% %GEN_OPTIONS% -info %MAP_PATH%
Et remplacez-les par celles-ci :
%Q3MAP_PATH% %BSP_VAR% %GEN_OPTIONS% %MAP_PATH% > %MAP_PATH%.log
%Q3MAP_PATH% %VIS_VAR% %GEN_OPTIONS% %MAP_PATH% >> %MAP_PATH%.log
%Q3MAP_PATH% %LIGHT_VAR% %GEN_OPTIONS% %MAP_PATH% >> %MAP_PATH%.log
%Q3MAP_PATH% %GEN_OPTIONS% -info %MAP_PATH% >> %MAP_PATH%.log
Cela va créer dans le répertoire de votre map compilée un fichier appelé nomdelamap.log, que vous ouvrirez avec n'importe quel éditeur de texte pour lire le log de la compilation.
Revers de la méthode, durant la compilation, AUCUN MESSAGE n'est affiché dans la console.
--------------------------------------------------------------------------------