Introduction aux Entités

Introduction

Tu es maintenant quasi un pro concernant la création de blocs : tu sais créer des blocs de toute formes, rajouter des textures dessus, et ajuster les textures. Mais il manque quelque chose à ta map : des entités !

Une entité, c’est quelque chose que l’on va rajouter à l’intérieur de la structure que tu créés avec les blocs. Si les blocs sont le squelette de ta map, les entités sont un peu les organes !

Il y a deux types d’entités :

  • Les entités-blocs : des blocs que tu transformes en entités pour leur donner des fonctions, par exemple une porte qui s’ouvre, un train…
  • Les entités-points : des objets déjà faits que tu places dans ta map aux endroits que tu choisis, genre les points de départ du ou des joueurs, les lumières, les zombies ou les scientifiques dans Half-Life, les otages dans Counter-Strike…

Avant de voir comment rajouter une entité à sa map, il faut définir ce qu’est un FGD.

Les FGDs

Un FGD, c’est quoi ?

On va parler de FGDs (aussi appelés Game Data Files). Pour comprendre à quoi ça sert, il faut comprendre la différence entre « jeu » et « moteur ».

Tu te souviens de ce que j’avais parlé au début de ce tutoriel ? Un jeu a besoin d’un moteur pour fonctionner. Le moteur, c’est un ensemble de fichiers sur lequel le jeu se base pour fonctionner, qui lui permette de jouer du son, de calculer la 3D, etc.

Tous les jeux GoldSource partagent le même moteur, le moteur GoldSource, même si c’est une version un peu modifiée parfois. C’est pour ça qu’on utilise des fichiers avec le même format « .wad » pour les textures quelque soit le jeu GoldSource, qu’on créé les blocs de la même manière quelque soit le jeu GoldSource pour lequel on veut mapper, qu’on utilise les mêmes logiciels (JACK par exemple), etc. C’est ce que j’avais montré dans mon screen dans l’autre chapitre.

Le dossier du jeu, avec les fichiers et dossiers du moteurs à part des jeux et des mods. Dans le dossier du jeu, moteur et jeux sont séparés.

Mais il y a tout de même des différences entre les jeux, même s’ils utilisent le même moteur : par exemple, dans Sven Co-op, tu peux créer des monstres qui n’existent pas dans Half-Life. Dans Counter-Strike, tu peux créer des otages, ce que tu ne peux pas faire dans les autres jeux, etc.

En fait, la différence entre deux jeux GoldSource c’est souvent que chaque jeu a ses propres entités. Par exemple, dans Opposing-Force, les soldats alliés sont des entités spéciales qui n’existent pas dans les autres jeux (sauf dans Sven Co-op). Dans Sven Co-op, le « bodyguard » ou encore le « Tor » sont des entités qui n’existent que dans Sven Co-op. Dans Counter-Strike, on peut placer des otages, ce qu’on ne peut pas faire dans les autres jeux.

Le bodyguard dans Sven Co-op. Chaque jeu a ses propres entités. Par exemple, le « bodyguard » n’existe que dans Sven Co-op.

Ceci dit, vu que tous les jeux GoldSource sont basés sur Half-Life à l’origine, toutes les entités d’Half-Life sont inclues dans les autres jeux.

JACK ne sait rien des entités que tu peux mettre dans ton jeu. Il faut le lui dire. Par exemple, si tu fais une map pour Half-Life, tu dois dire à JACK que les entités disponibles sont les scientifiques, les zombies, etc.

Toutes ces informations-là sont contenus dans un fichier FGD (au format « .fgd »), qu’on appelle aussi rarement Game Data File. C’est ce fichier qui dit à JACK quelles entités tu peux mettre dans ta map. Chaque jeu qui a ses propres entités (Half-Life, Natural Selection, The Specialists, Sven Co-op…) a son propre FGD.

Comment ajouter un FGD à JACK ?

Pour pouvoir mettre les entités de ton jeu dans ta map, tu dois dire à JACK où se situe le FGD pour que JACK puisse lire le fichier et voir quelles sont les entités disponibles ! :)

Pour cela, va dans les options de JACK. Dans l’onglet « Game Profiles », choisis ton Game Profile. Dans mon cas, j’avais créé un seul Game Profile que j’avais appelé « svencoop_gpn », il est donc déjà sélectionné.

L’onglet « Game Profiles » avec mon Game Profile sélectionné.

Puis, en restant dans le sous-onglet « Game », dans la partie « Game Data Files », clique sur « Add… ». Tu dois maintenant trouver ton fichier FGD.

Si tu mappes pour Half-Life, va dans le dossier de JACK et choisis le FGD « halflife.fgd » dans le dossier « halflife ».

Le FGD pour Half-Life est dans le dossier « halflife ».

Si tu mappes pour un autre jeu, comme Sven Co-op, le FGD est en général dans le dossier du jeu (par exemple, « svencoop ») :

Le FGD de Sven Co-op est dans le dossier du jeu.

Dans mon cas, je mappes pour Sven Co-op. Après avoir double-cliqué sur mon fichier FGD (ou fait « Entrée »), j’ai donc ça :

J’ai indiqué mon fichier FGD dans JACK.

Pour d’autres jeux ou mods moins connus, si le FGD n’est pas dans le dossier du jeu, il faut chercher le FGD sur Internet, par exemple sur ModDB dans la section « files » ou sur Google (par exemple, en cherchant « The Specialists FGD ». Des fois, le FGD est contenu dans un fichier plus gros, un SDK, qui contient d’autres trucs avec.

Si tu ne trouves pas de FGD pour un mod d’Half-Life, c’est peut-être parce que le mod n’a pas de nouvelles entités par rapport à Half-Life. Dans ce cas, utilise le FGD d’Half-Life.

À noter qu’un FGD n’est utile que pour créer des maps. Il permet juste à JACK de savoir quelles sont les entités disponibles, à quoi elles ressemblent, quelles sont leurs attributs, pour que le mappeur puisse choisir parmi une liste, voir un tableau de ce qui peut être modifié, voir un aperçu dans la vue 3D…

Donc, un FGD n’est strictement parlant pas essentiel, même si en pratique il l’est. Il rend juste la vie du mappeur beaucoup plus simple car il n’a pas à mémoriser le nom exact d’une cinquantaine d’entités ni tous leurs attributs.

En revanche, il n’y a pas besoin de FGDs pour jouer à une map, le FGD n’est pas utilisé par le jeu. Juste par JACK.

Les entités-blocs

Une entité-bloc, c’est simplement un bloc (comme ceux qu’on a créés dans les chapitres précédents) qu’on a transformé en entité. Ça permet de faire des portes, des vitres, des trains, des ascenseurs, des caisses qu’on peut pousser, et plein d’autres choses encore.

Comment créer une entité-bloc ?

Pour créer une entité-bloc, il faut sélectionner un bloc et le transformer en entité.

On va voir comment créer une entité-bloc avec un exemple tout simple : créer une vitre transparente ! En effet, par défaut, tous les blocs sont opaques. Pour avoir un bloc transparent, il faut transformer le bloc en entité.

Par exemple, moi, j’ai créé une vitre. C’est juste un bloc avec la texture « GLASS_MED ».

Un bloc avec une texture de vitre.

Je sélectionne donc ma vitre.

Ensuite, dans la barre de droite, je clique sur le bouton « To Entity ».

Clique sur « To Entity » à droite de JACK.

Si tu as ce message d’erreur qui s’affiche :

Message d’erreur « no solid entities in current game data » de JACK

Alors ça veut dire que tu n’as pas ajouté de FGDs à ton Game Profile. Relis la partie « Les FGDs » plus haut.

À la place, après avoir cliqué sur « To Entity », tu dois avoir ça :

La fenêtre « Object Properties »

Ton bloc est maintenant une entité-bloc ! Pour modifier le type d’entité (actuellement c’est un bouton, moi je veux une vitre), on verra comment faire plus bas.

Retransformer une entité-bloc en un simple bloc

Déjà, assure-toi que le mode « Ignore Group » (« IG ») n’est pas activé dans la barre des petites icônes. Dans le screen ci-dessous, l’icône « ig » ne doit pas être activée :

Le mode « ig » doit être désactivé avant de travailler avec les entités-blocs.

Ensuite, sélectionne ton entité-bloc.

Puis, dans la barre de droite de JACK, dans la partie « New Objects », clique sur « To World ».

La partie « New Objects » dans la barre de droite de JACK.

Ça retransforme ton bloc en un simple bloc, et ça supprime tous les attributs que t’as modifés.

Les entités-points

Une entité-point, c’est une entité ou tu ne peux pas définir la forme, la taille ou l’apparence avec un bloc.

Par exemple, si tu veux définir le point de départ du joueur, tu dois juste mettre un point dans JACK qui indiquera où le joueur va apparaître au début de la map. Ça n’a pas de sens de dire qu’un mur est le point de départ du joueur.

Créer une entité-point

Pour créer une entité-point, on doit passer en mode « Entity Creation Tool » dans la barre des outils. À chaque fois que tu voudras créer des entités-points, tu devras passer dans ce mode.

Le mode « Entity Creation Tool ».

Ce mode sert uniquement à créer des entités-points, pas des entités-blocs. On a vu plus haut comment cérer des entités-blocs.

Une fois que tu as le mode « Entity Creation Tool » activé, tu peux remarquer que le curseur a changé dans la vue 2D.

La première chose à faire est de sélectionner le type d’entité-point que tu veux créer. Toute à droite, dans la partie « New Objects », choisis l’entité-point que tu veux créer dans « Objects: ».

La partie « New Objects » quand le mode « Entity Creation Tool » est activé.

Par exemple, pour créer une source de lumière, on choisit « light ».

Ensuite, il faut placer l’entité-point dans la map. Pour cela, c’est très simple, on clique quelque part dans une des vues 2D. Un rectangle vert apparaît à l’endroit où on a cliqué. On peut alors déplacer ce rectangle vert, il indique où notre entité sera créé.

Le rectangle vert indique où notre entité sera créé.

Comme pour les blocs, pour valider la création de notre entité-point, on doit faire « Entrée » dans une des vues 2D.

Dans mon cas, je vois ma source de lumières apparaître dans la vue 3D après avoir validé la création de mon entité-point :

L’entité-point est créée.

On peut faire de la même manière pour créer l’emplacement de départ du joueur. Il faut refaire la même chose, et choisir l’entité-point « info_player_start ».

Ensuite, on choisit un endroit un peu surelevé du sol.

L’entité-point.

Ensuite, on créé notre entité-point en faisant entrée.

Notre point de départ.

Si chez toi, un grand rectangle vert s’affiche, ce n’est pas grave. Ça dépend du FGD que tu utilises, mais ça ne changera rien à ta map.

Modifier les propriétés d’une entité (entité-point ou entité-bloc)

Après avoir créé une entité, que ce soit une entité-point ou une entité-bloc, tu peux toujours modifier le type d’entité que c’est ainsi que ses attributs.

La première chose à faire qui est SUPER IMPORTANTE, c’est de vérifier que le mode « Ignore Group » (« ig ») n’est PAS coché. Sinon, ça t’empêchera de modifier les propriétés de tes entités-blocs. C’est le truc qui m’avait donner envie d’abandonner le mapping, à l’époque.

Dans le screen ci-dessous, l’icône « ig » ne doit pas être activée :

Le mode « ig » doit être désactivé avant de travailler avec les entités-blocs.

Bref, passé cette anecdote qui n’intéresse personne, après avoir vérifier que le mode « Ignore Group » ne soit pas activé, il te suffit de sélectionner l’entité en question, puis de faire « Alt » + « Entrée ». Tu peux aussi double-cliquer sur l’entité, ou faire clic droit puis cliquer sur « Properties ».

La fenêtre « Object Properties »

La fenêtre qui s’est ouverte s’appelle la fenêtre « Object Properties ». C’est cette fenêtre qui te permet de modifier les paramètres de ton entité.

La fenêtre « Objects Properties » a trois onglets :

  • « Class Info » : te permet de choisir le type d’entité que tu veux créer (par exemple, une porte, un bouton…) et de paramétrer ton entité. C’est l’onglet le plus utilisé et utile, et de loin.
  • « Flags » : des options à cocher pour donner à ton entité des options spéciales.
  • « VisGroup » : rarement utilisé. Ça n’a pas de rapport avec les entités, ça te permet juste de savoir si ton bloc fait partie d’un groupe de blocs (au cas où tu as groupé ensemble plusieurs blocs).

On va rester sur « Class Info ».

Class

Le plus important, c’est la liste « Class ». Ça te permet de choisir le type d’entité que tu veux créer. C’est là que tu choisiras si tu veux créer une porte, un mur, une caisse qu’on peut bouger et casser, un train, un bouton…

Dans mon cas, je veux créer une vitre. Il y a plusieurs moyens d’en faire une, mais pour une vitre incassable, je vais choisir « func_wall ».

On choisit « func_wall » dans « Class ».

Radar

Te permet de définir l’orientation de ton entité. Ce n’est utile que pour certaines entités ou l’orientation a un sens. Dans le cas d’un « func_wall », ça n’a pas de sens de donner une orientation.

Le bouton « SmartEdit »

En général, tu laisseras ce bouton activé. Ça rend la fenêtre plus simple à utiliser, mais dans de rares cas tu auras besoin de la désactiver.

Attributes

En dessous de « Class », tu as les attributs (aussi appelés propriétés ou paramètres) de ton entité. C’est là que tu paramètres ton entité. Tu auras très souvent besoin de modifier au moins quelques attributs pour chaque entité que tu crées.

Tu as plusieurs attributs et à chaque attribut, tu peux mettre une valeur.

Dans mon cas, je veux que mon « func_wall » soit transparent. Pour cela, il faut faire deux choses :

  • Dans « Render Mode », je choisis le mode d’opacité ou de transparence de mon bloc. Par défaut, c’est à « Normal ». Pour une vitre, on choisit le mode « Texture ».
  • Dans « FX Amount (1-255) », on choisit le niveau de transparence de notre bloc, entre 1 et 255. 100 dans le cas d’une vitre est une bonne valeur.

La vitre est maintenant transparente !

La vite est transparente.

Si ta vitre n’apparaît pas transparente, vérifie que l’option « Transparency of entites » soit bien activée :

L’option « Transparency of Entities »