Mapping CoD4 ( tuto )


220 - Compiler une map


Compiler sa carte
Bienvenue dans ce tutoriel qui vous apprendra l'art de la compilation d'une map pour CoD4.
Ce tutoriel étant le dernier de la première partie, il sera ... dur et long (et en plus il n'y aura presque pas d'image). :))

En effet la compilation est l'une des plus grandes sources de bugs et de difficultés que vous pourrez rencontrer.

On peut définir la compilation comme un ensemble d'opérations qui vont permettres de jouer sur la map que l'on a construit dans radiant.
Nous détaillerons dans ce tutoriel toutes ces "opérations" une par une.


1) le script de la map
Afin de fonctionner correctement, la map requiert un script. C'est un fichier de type texte contenant du code avec une syntaxe précise ; ce code sera interprété par le jeu afin d'effectuer des actions ou définir des paramètres.

Chaque map doit donc avoir au moins un script minimal, afin d'assurer son bon fonctionnement.
Mais l'on peut ajouter plein d'autre code à sa map si l'on veut faire des choses particulières.


Ici nous ne verrons que le strict minimum à avoir :
Pour créer ce script copiez ce qu'il y a en gris ci-dessous et collez-le dans un éditeur de texte (le bloc-note, notepad++ ...).

main()
{
maps\mp\_load::main();

game["allies"] = "sas";
game["axis"] = "russian";

game["allies_soldiertype"] = "woodland";
game["axis_soldiertype"] = "woodland";

game["attackers"] = "allies";
game["defenders"] = "axis";
}



Si votre map se nomme mp_tuto_6, enregistrez le fichier sous le nom mp_tuto_6.gsc dans le dossier raw/maps/mp

Voici maintenant quelques explications :

maps\mp\_load::main(); lance plein de scripts utiles à la map et internes au jeu, vous devez toujours placer cette ligne en premier sans la modifier.

game["allies"] définit quelle team joue les "gentils", vous pouvez mettre "sas" ou "marines"
game["axis"] définit quelle team joue les "méchants", vous pouvez mettre "russian" ou "opfor".

game["allies_soldiertype"] définit le type de skin des "gentils". Si vous avez les SAS, mettez "woodland", si vous avez les Marines, mettez "desert".
game["axis_soldiertype"] définit le type de skin des "méchants". Si vous avez les Russes (russian), mettez "woodland", si vous avez les Arabes (opfor), mettez "desert".

game["attackers"] définit pour le gametype SD, quelle team attaque les objectifs.
game["defenders"] définit pour le gametype SD, quelle team défend les objectifs.
Pour ces deux dernières variables, mettez "allies" pour les "gentils" ou "axis" pour les "méchants".


Attention : ne mélangez pas les camps, vous ne pouvez pas mettre russian+marines ou sas+opfor, c'est forcement russian+sas ou marines+opfor.

2) Le fichier .csv de la map
Afin de fonctionner correctement, la map a besoin d'un autre fichier.
C'est un fichier à l'extension .csv qui se met dans le dossier raw/maps (même pour une map multijoueur).

Procédez de la même manière que pour le script : copiez/collez le texte en gris ci-dessous dans un éditeur de texte et enregistrez le fichier sous le nom mp_tuto_6.csv (si la map se nomme mp_tuto_6).

victoryBackdrop,victory
defeatBackdrop,$default
levelBriefing,$default



Et c'est tout, peu importe la signification de ces lignes, on a bien assez à faire avec ce qui suit. :D

3) Le grid

Si vous n'en avez pas, les models, y compris vos armes vont se retrouver de toutes les couleurs.

Pour créer un grid, il y a deux techniques, je vous présente ici la plus simple à mes yeux.

C'est donc assez simple, il suffit d'entourer tous les endroits où le joueur pourrait se déplacer d'un brush texturé avec la texture Usage > tools > light_grid_volume.
Il faut juste faire un brush suffisament grand pour que le joueur ne puisse jamais en sortir.
Mais il ne faut pas non plus en faire un gigantesque parce que cela consomme pas mal de mémoire.

On va en faire un de 2048 unités de coté, centré sur la maison et de 176 unités de haut :

Image

Vous aurez certainement des models à des endroits que le joueur ne peu pas atteindre.
Afin d'éviter que ceux-ci soient égallement multicouleur, il faut entourer ces models d'un brush avec la texture Usage > tools > light_grid_sky.
Nous rajouterons un brush avec cete texture pus tard.

Pour résumer, il faut entourer toute la zone où le joueur a accès avec la texture light_grid_volume et les autres models dans les zones où les joueurs n'ont pas accès ainsi que le ciel avec la texture light_grid_sky.


A noter que le même effet est générallement obtenus en plaçant simplement quelques models sur la map.

4) La compilation BSP
4.1) Théorie et préparation
Là ça va commencer à être compliqué.

Pour l'instant vous n'avez qu'un ficiher .gsc, un autre fichier .csv et surtout un ficiher .map, créé avec radiant.
La compilation bsp va créer un ficihier .d3dbsp à partir du ficiher .map. C'est le coeur de la map.

Pour vous, rien de bien compliqué, il suffira d'appuyer sur le bouton 1. Compile BSP dans le Compil Tools et de laisser faire.
Mais avant ça, afin de ne pas avoir de problème, il faut que vous vérifiez que vous ayez les éléments suivant sur votre map :
une seule skybox correctement construite selon le tutoriel
un seul global_intermission
au moins un reflection_probe
au moins un spawn_dm et/ou un spawn_tdm
un seul worldspawn
un grid (ou quelques models)
Parmis ces éléments, seuls la skybox, le global_intermission et les spawns sont absolument obligatoire.
L'absence de reflection_probe donnera une teinte très rouge sur l'ensemble de la map.


Pour finir cette sous partie, je vous invite à lancer le Compiletools. Cliquez sur l'onglet Level Compiling, vous devriez voir ceci :

Image

La liste à gauche est celle des fichier .map que vous avez dans le dossier map_source. Cliquez sur le nom de votre map.

4.2) Options de compilation
Cette compilation regroupe en fait deux compilations différentes mais qui se font l'une après l'autre : la compilation BSP (qui concerne les brushs et models) et la compilation lighting (qui concerne les lumières).

Chacune de ces compilations possède ses options.
Nous allons nous intéresser au cadre "Compile", à droite dans le CompileTools.

Sur les trois premières cases à cocher, décocher Connect paths, c'est pour le solo.
Si vous vous commpiler le BSP, cocher la case Compile BSP.
Si vous vous commpiler les lights, cocher la case Compile Lighting.
Vous pouvez compiler l'un ou l'autre seul ou les deux, ce qui est le cas le plus fréquent.

En dessous, vous avez deux boutons BSP Options et Light Options. Cliquez sur BSP Options si ce n'est pas déjà fait.
La première case à cocher, onlyents -si elle est cochée- permet de ne compiler que les models. Cela racourcit considérablement le temps de compilation et est pratique si vous ne voulez voir de changement qu'au niveau des models. Toute modification au niveau des brushs ne sera pas prise en compte lors de cette compilation.
Ne cochez pas cette case.
Je ne ne sais pas comment utiliser les autres options de la compilation BSP alors passons tout de suite aux options de la compilation des lumières.
Cliquez maintenant sur Lihgt Options, vous devrier voir les même options que sur l'image ci-dessus.
fast : cochez cette case. Elle va permettre si elle est cochée de compiler les lumières rapidement mais en obtenant un rendus de faible qualité. Cette option est à choisir la plupart du temps lors de simples tests de la map.
extra : (normallement, la case est cochée par défaut, décochez-la) cette case va permettre de compiler les lumières avec un rendu final très bon mais cela va prendre beaucoup plus de temps qu'en "fast".
verbose : ?? (traduc : fastidieux) donne un rendus encore meilleur qu'avec "final" ??
ModelShadow : cette case va obliger la compilation à générer des ombres aux models. Cela augmente notoirement le temps de compilation si vous avez beaucoup de models.
NoModelShadow : cette case va empecher la génération d'ombres aux models. Cela accélère la compilation mais cela fait quand même moins joli une fois sur la map.
Je ne sais pas non plus à quoi servent les options suivantes. Peu importe, les 5 citées juste avant sont necessaires et suffisantes à la réalistaion d'une map.


C'en est fini pour la configuration de la compilation BSP et Light, vous devez donc n'avoir que les trois cases suivantes de cochées :
Compile BSP,
Compile Lighting
fast.

4.3) Prêt ? ... Compilez !
Nous voilà enfin paré !
Lorsque vous serez pret, cliquez sur le bouton 1. Compile BSP.
Une fenètre de commande va s'ouvrir et des choses vont se passer... Cela peu prendre un certain temps en fonction de votre ordinateur et de la map (nombre et complexité des brushs, nombre des models, nombre et "taille" des lights).

Si tout se passe bien, à la fin de la compilation BSP, vous devriez voir une ligne telle que sur l'image ci-dessous, disant que le mp_tuto_6.d3dbsp a été créé.

Image

Vous devez toujours vérifier que cette ligne est présente.
Si ce n'est pas le cas, c'est qu'un problème sur votre map à empèché la compilation d'aller à son terme et le .d3dbsp n'est pas créé (ou n'est pas mis à jour).

Le problème le plus classique qui empèche un .d3dbsp d'être créer est un Leaked.
Un message s'affiche au début de la compilation si un leaked est trouvé sur la map. C'est simplement un trou dans la skybox.
Il vous suffit alors de trouver le trou et de le boucher.


Après la compile BSP, vient la compile Lighting.
Celle-ci pose peu de problème mais il peut arriver que certaines lights soient supprimées parce qu'elles possèdent de mauvais attributs.
Si tel est le cas, ce sera marqué dans la console mais ne gènera pas la compilation.

A la fin, appuyez sur n'importe quelle touche pour fermer la fenètre.
Maintenant que le .d3dbsp est créé, on peut continuer le processus de compilation.

5) La compilation de la reflexion
La compilation de la reflexion va rendre les surfaces proches des reflection_probe brillantes.
Nous n'avons mis qu'un seul reflection_probe en l'air juste parce que nous n'en avons pas besoin de plus pour l'insant.
L'absence de compilation de la reflexion entraine une teinte rouge sur l'ensemble de la map quelque soit les réglages du worldspawn.

Cette compilation ne dépend que des reflection_probe. Il n'y a besoin de compiler la reflexion que si vous avez ajouté, bougé ou enlevé au moins un reflection_probe.
Dans ces tutoriels, je ne vous ferais pas ajouter d'autre reflection_probe, vous n'aurez donc jamais plu à recompliler la reflexion.

Là encore ce n'est pas bien compliqué, cliquez sur le bouton 2. Compile Reflections.
Une console, puis le jeu vont s'ouvrir. Ne faites rien, ne touchez à rien.
Si vous n'avez encore jamais ouvert le jeu en multijoueur, une erreur va s'afficher et vous devrez créer un profil avant d'aller sur la map.
Cette compilation est TRES longue, parce que le jeu ouvre la map sans l'avoir compilée préalablement dans des fichiers .ff. Même avec notre petite map et un seul reflection_probe, cela va prendre plusieurs minutes.
La console et le jeu vont se fermer tout seul lorsque cela sera finit.

6) La compilation des ficihers ff
Nous voilà encore à un très gros morceau.
Lors de la compilation de la reflexion, votre map a été ouverte et vous avez bien remarquez que cela a pris beaucoup de temps.
Afin de réduire ce temps au maximum, il va falloir rassembler les fichiers de la map (rappelez-vous : .d3dbsp, .gsc et .csv) dans un autre fichier qui portera l'extension .ff (pour Fast File).
C'est ce qui est fait lors de la compilation des fichiers ff.

Pour bien appréhender cette compilation et l'utiliser efficassement sans avoir des erreurs à gogo, il est necessaire d'avoir connaissance de la notion de ficiher zone et de mise à jour de ce ficiher.

En attendant, cliquez sur le bouton 3. Build Fast File.
Une petite fenètre va s'ouvrir, cliquez sur oui.
Une console va une nouvelle fois s'ouvrir. Il se peu que vous ayez des messages d'erreur en jaune et/ou rouge, il sont normaux pour l'instant alors n'en tenez pas compte.
Chez moi, cela a donné ça :

Image

A la fin de la compilation, cliquez sur n'importe quelle touche pour quitter la console.

Cette compilation va en fait créer deux fichiers dans le dossier cod4/zone/english : mp_tuto_6.ff et mp_tuto_6_load.ff.
Le premier est la map en elle même, le second concerne son chargement.


Et c'en est finit pour ce qui est du processus de compilation de la map !

Si vous voulez en savoir plus tout de suite sur la compilation des fichiers ff, je vous invite à lire ce tutoriel sur le forum qui va plus loin.
Comme je l'ai déjà dit ces notions seront vue en détail plus tard, dans le tutoriel n°10.

7) lancer la map
7.1) les options de lancement
Nous allons nous intéresser aux cases et au champ qui se trouvent en dessous du bouton 5. Run selected Map dans le CompileTools.

Enable Developer : cochez cette case, elle va autoriser l'apparition de fenêtres lors d'erreurs de script qui vont donner la ligne et le type d'erreur, ce qui va permettre de les résoudre bien plus facilement.
Enable Cheat : a priori cette case permet si elle est cochée d'activer les codes de triches mais je ne suis pas sur du tout.
Enable Developer Scrpit : il ne faut cocher cette case que lorsque vous voulez faire la minimap. Dans tous les autres, ne cochez pas cette case.
Use Custom Command Line Option : cochez cette case, elle va permettre d'utiliser lors du lancement de la map les dvars écrites dans le champ de texte juste en dessous.
Le champs de texte va permettre d'ajouter du texte à la ligne de commande qui lance la map.
On va ainsi pouvoir définir des dvars sans passer par un fichier .cfg. (Les dvars sont les variables dans les fichiers de configuration, qui ont l'extention .cfg).

Dans notre cas, on va utiliser 4 dvars pour nous faciliter la vie.

g_gametype : cette dvar définie le gametype avec lequel lancer la map. Par défaut, la map se lancera toujours en dm (deathmatch), il faut donner à cette dvar la valeur du nom du gametype voulu (ex : g_gametype tdm lance la map en tdm).
scr_game_spectatetype 2 : cette dvar définit le type de déplacement des spectateurs. Par défaut, la valeur est 0 et les spectateurs ne bougent pas, ils sont fixes au niveau du global_intermission, avec la valeur 2 les spectauteurs sont libres sur la map (la valeur 1 permet aux spectateurs de suivre les autres joueurs de la map en voyant par leur yeux, cela est donc inutile lorsque vous êtes seul).
scr_game_playerwaittime 1 : cette dvar définie le temps d'attente des joueurs au début d'une partie. Par défaut, il est de 15 secondes, ici nous le ramenons à une seconde.
scr_game_matchstarttime 1 : cette dvar définie le temps avant le début d'une partie, après le temps d'attente des joueur. Par défaut, il est de 5 secondes, ici nous le ramenons à une seconde.
Comme la valeur du champ est directement ajoutée à la ligne de commande, il faut rajouter devant chaque dvar et texte +set (sans espace entre + et set mais avec un espace entre +set et le nom de la dvar).

Copiez-coller dans le champs le texte suivant (en gris) :

+set g_gametype tdm +set scr_game_spectatetype 2 +set scr_game_playerwaittime 1 +set scr_game_matchstarttime 1




Vous voilà fin prèt à lancer votre map

Tuto écrit à l'origine par Florient (Caskami)