Aller au menu - Aller au contenu

Icône Les déclencheurs (A : simples)

Mise à jour : 22/07/2009
1 414 visites depuis 7 jours, dont 26 sur ce chapitre classé 94/786
En voilà un thème qu'il est important !

A la fin de la lecture de ce thème, vous manierez à la perfection les déclenchements dans Half-Life et Counter-Strike. Vous saurez comment gérer les évènements, allumer une lumière grâce à un bouton etc..

Ce que vous allez apprendre va vous sembler un peu abstrait. Il va falloir que vous assimiliez pas mal de trucs sans savoir à quoi ça sert. Jouez le jeu : vous verrez après que vous n'aurez pas appris tout ça pour rien, bien au contraire ;)
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Appels d'entités

Nous allons tout d'abord étudier quelques généralités. En effet, on peut retrouver certains attributs dans la plupart des entités. La liste d'attributs que je vais vous donner est donc valable pour beaucoup d'entités que vous étudierez dans les autres thèmes.

Ce que vous allez apprendre est très important pour la suite, alors redoublez de concentration :)


Name



L'attribut "Name" est très courant. C'est le nom de l'entité. Par défaut, l'entité n'a pas de nom, ce qui ne pose pas de problème étant donné qu'on n'est pas obligé de lui en donner un.

Pourquoi lui donner un nom alors ?


La réponse est simple : pour l'appeler. Beaucoup d'entités ont la possibilité d'être appelées à distance pour déclencher une action à distance. Cette action varie en fonction de l'entité appelée.
Je prends un exemple que nous venons de voir : la lumière. Si on appelle une entité light, celle-ci s'éteint si elle était allumée, et vice-versa : elle s'allume si elle était éteinte.

Les possibilités sont très nombreuses : on peut casser un objet, déclencher une explosion etc... Vous saurez faire cela lorsque vous connaîtrez les entités appropriées, bien sûr ;)

Dernier détail : il n'est pas interdit de donner le même nom à plusieurs entités. Ces entités seront appelées en même temps, ce qui peut s'avérer pratique.


Global Entity Name



C'est la même chose que pour "Name", sauf que certaines entités ont la possibilité de fonctionner sur plusieurs niveaux (dans le cas d'une aventure solo qui se déroule sur plusieurs maps).

Il faut lui donner un nom global, qu'on pourra réutiliser dans une autre map. Par exemple, si une porte est bloquée dans la map A, et que pour l'ouvrir il faut appuyer sur un bouton dans la map B, on donnera un nom global à la porte. On pourra ainsi l'ouvrir à partir de la map B.

Target



Lorsqu'une entité est appelée, elle a la possibilité d'en appeler une autre. On peut ainsi créer une chaîne d'appels d'entités...

Bon, en clair cet attribut sert à appeler une entité. Vous devez simplement rentrer son nom (attribut "Name" de l'entité à appeler).

"Target" signifie "Cible" : c'est l'attribut le plus important de cette section puisque c'est lui qui commande l'appel d'entité.

Delay before trigger



C'est le temps en secondes que va patienter Half-Life avant d'appeler l'entité (avec "Target"). Par exemple, si vous voulez attendre 4 secondes avant d'éteindre la lumière, rentrez la valeur "4".

Le séparateur décimal est le point (.) : il remplace la virgule. Pour patienter 3 secondes et demi, il faut donc rentrer "3.5".


Kill target



Un peu spécial : cet attribut permet de détruire une entité. Il fonctionne comme "Target", mais il permet de retirer l'entité du jeu et non pas de l'appeler.

La disparition de l'entité est un peu brutale, alors évitez que l'entité disparaisse sous les yeux du joueur ou alors il risque de se croire victime de phénomènes paranormaux :p

Master



Là ça devient compliqué : vous devez indiquer dans le champ le nom d'un "multisource". Cela permet de verrouiller une entité tant que plusieurs autres entités n'ont pas été activées. On aura l'occasion d'en reparler :)

Au premier passage dans une zone

Entité concernée : trigger_once
Type d'entité : entité-bloc
Difficulté : assez facile

Pour appeler une entité, on doit se servir d'un évènement. Le passage du joueur dans une zone en est un. Par exemple, si le joueur rentre dans une salle la lumière s'allume automatiquement !
Pour utiliser cette entité, transformez un bloc en entité-bloc (avec la texture AAATRIGGER car il n'est pas visible quand on joue).

Le trigger_once permet d'appeler une entité la première fois que le joueur rentre dans une zone. La seconde fois, il ne se passera plus rien.

Par exemple, le joueur marche dans un couloir et traverse une sorte de porte. J'ai placé un trigger_once (invisible) au niveau de la porte et deux entités light éteintes (flag "Initially dark"). L'attribut "Target" du trigger_once pointe vers l'entité nommée "lumiere". Il y a deux entités light nommées "lumiere" : elles seront donc allumées en même temps.

Image utilisateur


Si le joueur repasse dans la zone du trigger_once, les lumières ne s'éteindront pas puisque le trigger_once ne fonctionne qu'une seule fois.

Pour ce qui est des attributs, vous les connaissez tous pour la plupart. Vous les avez vu plus haut. Il en reste toutefois 2 qui peuvent être intéressants :
  • Sound style : vous pouvez jouer un son lorsque le joueur rentre dans cette zone. On met généralement un petit bip que l'on utilise conjointement avec l'affichage d'un message (voir ci-dessous).Pour plus d'infos sur les sons dans Half-Life, reportez-vous au thème sur les sons.
  • Message (set sound too!) : on peut rentrer un petit texte à afficher sur l'écran du joueur (c'est plutôt rare). "set sound too!" signifie qu'un son est joué lorsque le message s'affiche.

Quant aux flags (eh oui il ne faut pas les oublier), les voici :
  • Monsters : coché, le trigger sera aussi activé si un autre personnage du jeu rentre dedans (scientifiques, ennemis...).
  • No clients : l'entité n'affectera aucun joueur.
  • Pushables : le trigger est activé par les objets que l'on peut pousser, comme les caisses (func_pushable).

A chaque passage dans une zone

Entité concernée : trigger_multiple
Type d'entité : entité-bloc
Difficulté : assez facile

Si vous savez utiliser les trigger_once, alors vous n'aurez aucun problème avec les trigger_multiple.
C'est exactement la même chose sauf que l'action est répétée à chaque passage dans la zone.

Je ne vais pas par conséquent tout réexpliquer, tout a été dit plus haut.
Reste cependant un nouvel attribut :
  • Delay before reset : c'est le temps en secondes avant que l'on puisse réutiliser le trigger_multiple.Par exemple, si on met "4", et qu'on traverse le trigger une première fois, il ne se passera rien pendant 4 secondes si on retraverse la zone.

Après plusieurs passages dans une zone

Entité concernée : trigger_counter
Type d'entité : entité-bloc
Difficulté : assez facile

C'est encore très simple. Ca fonctionne comme les autres trigger, mais il faut passer plusieurs fois dans la zone pour que l'entité soit appelée.
  • Count before activation : nombre de passages nécessaires pour que l'entité décrite dans "Target" soit appelée.

Au chargement de la map

Entité concernée : trigger_auto
Type d'entité : entité-point
Difficulté : moyen

Cette entité se déclenche au chargement de la map. Elle permet d'appeler des entités dès que le jeu commence. Cela peut s'avérer parfois très pratique !

Cette entité ne fonctionne que si vous mettez son attribut "Trigger State = On".

Voici tous les attributs de cette entité :
  • Target : nom de l'entité à appeler.
  • Delay before trigger : temps en secondes avant l'appel de l'entité.
  • KillTarget : nom d'une entité à retirer du jeu.
  • Global State to Read : nom de la variable globale à lire à partir d'une entité env_global. Une variable globale est une information stockée en mémoire que l'on peut lire sur plusieurs maps différentes (si vous faites une aventure solo sur plusieurs maps par exemple).
  • Trigger State : état de la variable globale.
    • Off : désactivée (par défaut). Dans ce cas, l'entité trigger_auto ne se déclenchera pas au chargement de la map.
    • On : activée. Vous devez mettre cette valeur pour que l'entité fonctionne.
    • Toggle : dépend de l'état de la variable globale lue dans "Global State to Read". Si la valeur est à "Off", alors elle devient "On", et vice-versa.

A noter aussi un Flag qui pourrait vous être parfois utile :
  • Remove On Fire : une fois que l'entité a été déclenchée, le trigger_auto est retiré du jeu.

Les boutons simples

Entité concernée : button_target
Type d'entité : entité-bloc
Difficulté : plutôt facile

Les boutons sont le moyen le plus simple (et le plus courant) qu'on utilise pour appeler une entité. Le joueur doit appuyer sur la touche "Utiliser" pour appuyer sur le bouton.

Il existe plusieurs types de boutons. Nous étudierons ici le cas le plus simple : le button_target. Voici les étapes à suivre dans l'ordre pour créer un bouton :

  1. Choisissez pour commencer une texture de bouton. Je vous rappelle que celles-ci commencent en général par +A ou +0 (elles changent en fonction de l'état du bouton).
  2. Créez un bloc ayant la même taille que la texture. S'il n'est pas correctement aligné, désactivez le "Texture Lock" , déplacez le bloc jusqu'à l'alignement, puis réactivez le "Texture Lock".
  3. Transformez le bloc en entité-bloc de type button_target.
  4. Modifiez enfin ses attributs pour appeler l'entité que vous voulez. Seul "Target" devrait vous intéresser.

Cette entité possède d'autres attributs que vous ne connaissez pas (les FX). Je ne vous en parle pas pour le moment car ils n'ont pas d'intérêt avec les boutons. Ils servent à rendre l'entité transparente, ou partiellement transparente.


Passons aux flags de cette entité...

  • Use Activates : généralement, ce flag est coché. Il permet d'obliger le joueur à appuyer sur la touche "Utiliser" pour activer le bouton.
    Si le flag est décoché, on pourra alors activer le bouton en... tirant dessus :)
  • Start On : le bouton est à l'état "Utilisé" ("On") lorsqu'on démarre la map. C'est plutôt rare, à vous de voir si ça convient dans votre cas ou pas.

Bon, pour bien terminer voici un petit exemple avec un interrupteur de lumière :

Image utilisateur


Quand même, ne me dites pas que c'est dur le mapping ! :p

Les boutons translatifs

Entité concernée : func_button
Type d'entité : entité-bloc
Difficulté : moyen

Ces boutons sont plus utilisés car ils permettent l'accès à un plus grand nombre de paramétrages que les button_target.
On peut par exemple faire déplacer le bouton ou jouer un son lorsqu'on l'active.

  • Pour un bouton immobile : cochez le flag "Don't move".
  • Pour un bouton translatif : réglez d'abord l'orientation du déplacement avec le radar en haut à droite. Sachez que la valeur 0° correspond à la direction vers la droite dans la vue "top (x/y)".
    Réglez ensuite ses attributs, comme "Lip", "delay before reset (-1 stay)" etc...

Là, histoire de bien tout récapituler, je vais vous dresser la liste de tous ses attributs :

  • Global Entity Name : c'est le nom global de cette entité. Comme nous l'avons vu plus haut, il est utilisé seulement si vous faites une aventure solo qui se déroule sur plusieurs maps différentes. On peut ainsi activer un objet d'une map A à partir d'une autre map B.
  • Name : nom de l'entité pour qu'on puisse l'appeler avec "Target". Pour un bouton, ça n'a pas vraiment d'intérêt...
  • Target : l'attribut le plus important. Vous devez indiquer ici le nom de l'entité à appeler.
  • Render FX : permet de définir la manière dont l'objet renvoit la lumière. On modifie rarement cet attribut.
  • Render Mode : permet de gérer les effets de transparence. C'est plutôt rare pour un bouton, donc je ne vous en parle pas de suite ;)
  • FX Amount : à associer avec "Render Mode". Il définit en fait le niveau de transparence de l'objet.
  • FX Color (R G B) : c'est la couleur de l'effet. Là encore, on en reparlera quand on traitera plus en détail de la transparence.
  • Speed : c'est la vitesse à laquelle le bouton se déplace lorsqu'il est activé.
  • Health (shootable if > 0) : par défaut, la valeur est 0 (le bouton ne peut pas être détruit).
    Mais si vous voulez pouvoir vous acharner comme un gros bourrin dessus, alors modifiez cette valeur. Pour vous donner une idée, sachez que 100 correspond à la vie d'un joueur.
    Lorsque le bouton a perdu toute sa vie, l'entité est appelée.
  • Lip : quand le bouton se déplace, la longueur du mouvement correspond à la taille de ce bouton. Si vous voulez qu'il se déplace encore plus, mettez un nombre supérieur à 1.
    Par exemple, si Lip = "5", alors le bouton se déplacera de 5 fois sa longueur.
  • Master : ça peut vous être utile pour votre bouton... Les entités multisource permettent de verrouiller l'appel d'une entité tant que plusieurs boutons n'ont pas été activés. Vous devez entrer ici le nom du multisource qui gère cela.
  • Sounds : son qui sera joué lorsqu'on appuiera sur le bouton.
  • delay before reset (-1 stay) : si le bouton se déplace, il peut revenir à sa position initiale au bout d'un certain laps de temps.
    Pour "3", il reviendra au bout de 3 secondes.
    Pour "-1", il restera bloqué et ne reviendra jamais...
  • Delay before trigger : temps en secondes avant l'appel d'entité.
  • Locked Sound, Unlocked Sound, Locked Sentence, Unlocked Sentence : je les mets tous dans le même paquet parce qu'ils ne servent que dans un cas particulier : une map multi pour Half-Life en mode "HL TeamPlay". Vous ne devriez pas avoir à vous en servir d'ici tôt ;)
  • Minimum light level : niveau minimum de luminosité. Si j'étais vous, je ne modifierais pas cet attribut car vous pourriez facilement faire planter le compilateur hlrad.exe

Reste à voir les flags (importants pour cette entité) :

  • Don't move : coché, le bouton ne se déplacera pas lorsqu'il sera enclenché. Très utilisé car beaucoup de boutons sont immobiles.
  • Toggle : le principe du toggle est le suivant : si le bouton est à l'état actif, il devient inactif. Et réciproquement bien entendu :p On coche souvent ce flag.
  • Sparks : le bouton émettra des étincelles. C'est un joli effet, il faut bien l'avouer...
  • Touch Activates : si on touche le bouton, alors il s'active tout seul. Le joueur n'a pas besoin d'appuyer sur "Utiliser" pour l'enclencher.


Les boutons n'ont plus de secrets pour vous maintenant ;)

Les boutons rotatifs

Entité concernée : func_rot_button
Type d'entité : entité-bloc
Difficulté : assez difficile

Aïe aïe aïe ! Comme tout ce qui est rotatif, c'est assez dur à paramétrer quand on n'a pas l'habitude... Au début, on est assez dérouté par ce principe de rotation, alors qu'en fait ce n'est pas si dur que ça.

Si vous débutez en mapping, vous devriez laisser tomber les boutons rotatifs pour le moment. Vous vous ferez la main lorsque vous apprendrez à créer des portes rotatives.

Bon, pour ceux qui sont déterminés, suivez-moi :p

Image utilisateur


A quoi sert le bloc recouvert de la texture ORIGIN ?


Il définit l'axe de rotation de l'objet. Sans lui, Worldcraft ne sait pas comment faire tourner votre bouton.
Comment savoir quel est l'axe de rotation de votre objet ? C'est bien là l'éternelle question que tout le monde s'est posée. Où dois-je placer ce $%$##%$#%# de bloc ORIGIN ?

En fait, c'est très simple (une fois que l'on a compris, comme d'habitude ;). L'axe de rotation est la partie autour de laquelle votre objet tourne. Cette partie reste pratiquement immobile.
Un exemple avec une vanne :
Un bouton rotatif est une entité constituée de 2 blocs : le bouton en lui-même et un bloc recouvert de la texture ORIGIN :

Image utilisateur


Comme vous pouvez le voir, le bloc ORIGIN (en vert) est situé sur l'axe de rotation, la seule partie qui ne se déplace pas. Le reste (en rouge) est une association de blocs qui tourneront autour du bloc ORIGIN. Bien entendu, le bloc ORIGIN est invisible lorsqu'on joue.

L'association de ces deux éléments doit être convertie en func_rot_button. Sélectionnez le bloc ORIGIN et le reste de la vanne puis cliquez sur "To Entity". Choisissez enfin l'entité func_rot_button.

En ce qui concerne les attributs, on retrouve pas mals de choses qu'on connaît. Voici les nouveaux attributs qui peuvent vous intéresser :

  • Targetted object : c'est en fait l'équivalent de "Target".
  • ChangeTarget Name : permet de changer de cible après une première activation.
  • Distance (deg) : indiquez la distance parcourue par le bloc en degrés. Par exemple, si vous mettez "360", le bloc effectuera un tour complet sur lui-même.

Les flags, et puis après on arrête c'est promis ;)

  • Not solid : le bloc n'est pas solide, on peut passer à travers.
  • Reverse Dir : le mouvement se fait en sens inverse (sens contraire des aiguilles d'une montre).
  • Toggle : on l'a vu pour func_button.
  • X Axis : le bloc tournera suivant l'axe des X (si rien n'est coché, c'est l'axe Z qui est utilisé).
  • Y Axis : pareil mais pour l'axe des Y.
  • Touch Activates : le bouton est activé dès qu'on le touche.
Nous avons donc vu pratiquement tous les moyens que l'on avait pour appeler une entité... mais pas tous !

Mais pour l'instant, vous ne pouvez appliquer ce que vous avez appris qu'avec les entités "light". Lorsque vous découvrirez de nouvelles entités, vous verrez qu'il est possible de les appeler elles aussi : par exemple, si on appelle un funk_breakable, l'objet se casse à distance !

Rassurez-vous, je vous signalerai à chaque fois ce qui se passe lorsqu'on appelle l'entité.

Allez, on ne s'arrête pas en si bon chemin... On a encore du boulot :)
Chapitre précédent Sommaire Chapitre suivant

Partager

Il n'y a pas encore de commentaire pour ce tuto.