Aller au menu - Aller au contenu

Icône Burn them, Brother !

Mise à jour : 24/01/2012
Difficulté : Facile Facile
2 942 visites depuis 7 jours, dont 20 sur ce chapitre classé 54/786
Image utilisateur


Je pense que vous avez une petite idée de ce que nous allons étudier ici :) . Souvenez-vous du chapitre dans la cité minière de Ravenholm, rappelez-vous de l'odeur des zombies cramés et de leurs cris d'agonie ^^ . Nous allons parler des firetraps, ces systèmes qui permettent d'ouvrir le gaz, de l'embraser et de brûler tout ce qui passe :pirate:

Réaliser un firetrap n'est pas spécialement difficile; ça fait juste intervenir assez bien d'entités. Vous en connaissez certaines, et vous allez en découvrir de nouvelles. A la fin de ce mini-tuto, vous saurez créer un départ de feu, des flammes, un effet de gaz qui s'échappe, et nous reverrons aussi les logic_relay, les func_rot_button et les ambient_generic, bref, de l'amusement en perspective :) .

Je dis firetrap, qui veut dire piège à feu. Le mot en anglais sonne mieux ^^ . J'ai eu l'idée de ce mini-tuto quand je me suis rappelé que ce même tuto existait en anglais, sur Interlopers.net. La méthode que j'emploie est plus ou moins la même (en même temps, il n'y a pas 25 façons de faire) ^^ . Je vous conseille de jeter un coup d'œil à cette version anglais (les autres pièges de Ravenholm sont aussi expliqués, mais le tuto n'est pas un grand prix de littérature ^^).
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Préparation de la map

Il faut dans un premier temps nous occuper de la partie mapping :) .

Créez une ruelle étroite, et ensuite, placez les models. Je vous ai listé ici les models nécessaires :

EntitéModelDescription
prop_static models/props_citizen_tech/firetrap_gashose01a.mdl C'est le tuyau de gaz avec les becs Bunsen. Placez le au raz du sol.
prop_static models/props_citizen_tech/firetrap_propanecanister01a.mdl C'est juste la bombonne de gaz
prop_static models/props_citizen_tech/firetrap_buttonpad.mdl C'est le support du bouton rouge qui permet de créer les étincelles
prop_dynamic models/props_citizen_tech/Firetrap_button01a.mdl C'est le bouton rouge ^^
prop_dynamic models/props_pipes/valvewheel002.mdl C'est la vanne d'ouverture/fermeture du gaz


Essayez de vous arranger pour obtenir quelque chose comme ceci (remarquez que j'ai mis quelques décals, histoire de décorer un brin) :

Image utilisateur

Préparation des entités

On va maintenant mettre en place les entités, mais sans s'occuper des outputs, juste le placement et le paramétrage.

Les func_rot_button



Pour faire tourner le bouton rouge et la vanne de gaz, on va utiliser des func_rot_button. Vous savez comment ça marche, donc ça ira vite ^^ .

Créez, avec la texture invisible, vos deux boutons rotatifs. Voici les paramètres que je vous suggère :

Image utilisateur

Bouton rouge


  • Name : firetrap_boutonrouge
  • Speed : 200
  • Sounds : Squeaky
  • Delay Before Reset : 1
  • Distance : 90


Cochez les flags Not Solid, Y Axis (ou un autre, ça dépend d'orientation de votre bouton) et Use Activates.

Vanne de gaz



Image utilisateur
  • Name : firetrap_vannedegaz
  • Speed : 200
  • Sounds : Squeaky
  • Delay Before Reset : 3
  • Distance : 360 (un tour complet, pour que ce soit bien ouvert ^^ )


Cochez les flags Not Solid, Toggle (pour pouvoir fermer et ouvrir) et Use Activates.

N'oubliez pas de bien parenter les deux prop_dynamic !


Les étincelles



Souvenez-vous des étincelles, l'entité env_spark. Il va falloir placer un env_spark à l'extrémité de chaque bec Bunsen, avec les mêmes paramètres, à savoir :

  • Name : firetrap_spark
  • Magniture : Medium
  • Spark Trail Length : Long

Je vous rafraîchis le mémoire : pour avoir facile, créez une entité, et dupliquez-la (Majuscule + Déplacement), ce sera plus simple ;) .


Les env_steam



env_steam est une nouvelle entité. Elle permet de créer un jet de vapeur. Nous allons l'utiliser pour représenter les jets de gaz qui sortent des bec Bunsen :) . On mettra donc une de ces entités à chaque sortie de bec Bunsen.

L'env_steam est représenté sous la forme d'un cône. Le sommet symbolise le point de départ du gaz, et la base indique dans quel sens le jet est projeté, ce qui est plutôt pratique pour bien positionner l'entité. Comme c'est une nouvelle entité, je vais vous lister ses propriétés, les expliquer, et donner les valeurs adéquates dans le cas de notre jet de gaz incolore :) .

  • Name : firetrap_vapeur
  • Initial State : état initial de l'entité. Mettez Off
  • Particule Type : : type de particule qui est projeté :
    • Normal : un gros jet gras ^^
    • Heat Wave : un effet vague de chaleur, comme sur les autoroutes quand il fait chaud.Choisissez cette option, ça donnera un bel effet flou
  • Spread Speed : vitesse de dissociation des particules. Il faut comprendre que c'est la vitesse à laquelle les particules s'éloignent les unes des autres. En mettant une valeur de 15, le jet reste relativement compact
  • Speed : vitesse de sortie du jet de gaz. Mettez 200
  • Particule start size : taille des particules au début du jet. Mettez 10
  • Particule end size : taille des particules à la fin du jet. Mettez 20
  • Emisson rate : fréquence d'émission des particules. Une valeur de 25 est acceptable
  • Color : couleur du jet. Prenez une teinte orangée ( 239 194 61 ), mais si ça n'a pas beaucoup d'importance, puisqu'on va rendre le jet transparent ^^
  • Length of steam jet : longueur du jet. Une longueur de 80 convient largement
  • Translucency : transparence. Laissez 255
  • How fast does the particles spin : (pour Episode One) vitesse de rotation des particules. Laissez 8


Les départs de feu



Image utilisateur
Il existe une entité pour créer une flamme, nous la verrons juste après, et il existe aussi une entité pour créer un effet d'embrasement. Cette entité se nomme env_firesource. Placez également une de ces entités à la sortie de chaque bec Bunsen (près des env_spark, ce qui est logique).

  • Name : firetrap_firesource
  • Radius : 60


Le brasier



Nous voici enfin aux flammes ^^ . L'entité utilisée pour en créer une est env_fire (remarquez que le nom des entités correspondent souvent à leur fonction ^^ ).

  • Name : firetrap_fires
  • Start Disabled : Yes
  • Duration : temps que brûle la flamme. Mettez ce que vous voulez, car on cochera le flag Infinite Duration ^^
  • Sire : taille de la flamme. Voyez ma remarque plus bas...
  • Attack : vitesse à laquelle la flamme grandit pour aboutir à sa taille maximale (Size). Ca doit être rapide, c'est du gaz. Mettez 0.05
  • Type : type de flamme. Laissez bien Naturel, on n'a pas besoin d'un effet plasma
  • Ignition point : position du point d'ignition. Mettez 1, la flamme est au sol ^^ .
  • Damage Scale : mettez 10 pour multiplier par 10 les dommages causés par la flamme


Cochez aussi le flag Smokeless, pour ne pas créer trop de fumée. On fait un simple brasier, pas un incinérateur ^^ .

Pensez à mettre un Size décroissant sur les env_fire. Près des becs Bunsen, mettez une Size de 110, et descendez jusqu'à 80 pour les flammes les plus éloignées de ce bec. Ça donne un effet de réel, car il y a plus de gaz près des becs, donc de plus grandes flammes ;) .

Les ambient_generic



On va ajouter plusieurs sons, au moyen d'ambient_generic. Il n'y a pas de réglages particulier, hormis le nom de l'entité, le son à jouer et quelques flags. Je vous ai fait un tableau pour présenter ça proprement :

NameEmplacementSonExplicationsFlags cochés
firetrap_vapeur_son Au centre des flammes ambient/gas/steam_loop1.wav Son que fait le gaz en sortant des becs Bunsen Start Silent
firetrap_firestart_son Au centre des flammes d1_town.FlameTrapIgnite Son joué quand le gaz s'embrase Start Silent, Is Not Looped
firetrap_fires_son Au centre des flammes d1_town.LargeFireLoop Le bruit que fait le brasier Start Silent
firetrap_firestop_son Au centre des flammes d1_town.FlameTrapExtinguish Son joué quand on coupe le gaz et que les flammes s'éteignent Start Silent, Is Not Looped
firetrap_boutonrouge_son Près du bouton rouge Town.d1_town_01_lightswitch2 Bruit du bouton (une sorte de clic sourd). Pensez à mettre une distance d'audition faible Start Silent, Is Not Looped


Pour finir...



On va aussi ajouter un petite light qu'on allumera en même temps que les flammes, pour appuyer l'éclairage de ces flammes :)

  • Name : firetrap_light
  • Brightness : 254 174 10 500

Et cochez le flag Initialy Dark.


Voici une image de ce que j'obtiens. Vous devriez avoir sensiblement la même chose :

Image utilisateur
Ce que j'obtiens. Remarquez que les env_steam, les env_firesource et les env_spark sont au même endroit sur chaque bec

Mise en place des outputs

Attaquons-ous maintenant au codage des outputs ; ce n'est pas difficile, mais ça demande de la logique :) .

Histoire de nous simplifier la tâche, nous allons créer deux logic_relay : un pour démarrer l'embrasement, et un autre pour y mettre fin. Nommez respectivement ces deux entités firetrap_relay_start et firetrap_relay_end. Laissez la propriété Start Disabled sur Yes.

On y reviendra plus tard. On va commencer par les outputs de la vanne de gaz.

La vanne de gaz



Output namedTargets entitiesVia this inputParameterDelay
OnIn firetrap_vapeur Toggle <none> 0.00
OnIn firetrap_relay_start Enable <none> 0.00
OnIn firetrap_vapeur_son ToggleSound <none> 0.00


J'utilise l'output OnIn, qui a pour effet d'être déclenché dès qu'on pose les mains sur la vanne (dès qu'on presse E ^^ ). Comme ça, dès qu'on commence à tourner, ça se déclenche. Donc, dès qu'on pose les mains, on actionne/arrête les jets de vapeur (firetrap_vapeur), ainsi que leur bruit (firetrap_vapeur_son). J'active aussi le logic_relay de départ de feu (firetrap_relay_start). Mais attention, il est activé, pas déclenché !

On le déclenchera quand on tournera le bouton rouge. Ce stratagème nous empêche de déclencher le logic_relay sans avoir ouvert le gaz avant (puisque dans ce cas, le logic_relay n'aurait pas été activé).

Maintenant, on va ajouter les outputs quand on lâche la vanne (on vient de de la refermer) :

Output namedTargets entitiesVia this inputParameterDelay
OnOut firetrap_vapeur Toggle <none> 0.00
OnOut firetrap_relay_start Disable <none> 0.00
OnOut firetrap_relay_end Trigger <none> 0.00
OnOut firetrap_vapeur_son ToggleSound <none> 0.00


Donc là, rien de bien compliqué. On annule tout ce qui a été fait avec OnIn. On fait appel au relais firetrap_relay_end, qu'on déclenche (il sera activé par le relais de démarrage du feu).

Le bouton rouge



Ici, il n'y a que 3 outputs très simples :

Output namedTargets entitiesVia this inputParameterDelay
OnIn firetrap_boutonrouge_son PlaySound <none> 0.00
OnIn firetrap_spark SparkOnce <none> 0.00
OnIn firetrap_relay_start Trigger <none> 0.00


Très simple. On joue le son du bouton, on actionne les étincelles une fois (SparkOnce) et on déclenche le logic_relay qui va à son tour déclencher le brasier :) .

Le relais de départ



On va enfin s'occuper du firetrap_relay_start. On va activer les env_firesources, les env_fire. On active aussi firetrap_relay_end, et on désactivé le firetrap_relay_start (il s'auto-désactive ^^ ). On en profite aussi pour allumer la light, 0.5 secondes après :) .

Output namedTargets entitiesVia this inputParameterDelay
OnTrigger firetrap_firesource Enable <none> 0.00
OnTrigger firetrap_relay_end Enable <none> 0.00
OnTrigger firetrap_fires Enable <none> 0.00
OnTrigger firetrap_relay_start Disable <none> 0.00
OnTrigger firetrap_firestart_son PlaySound <none> 0.00
OnTrigger firetrap_light TurnOn <none> 0.50


Le relais de fin



Output namedTargets entitiesVia this inputParameterDelay
OnTrigger firetrap_firesource Disable <none> 0.00
OnTrigger firetrap_firestop_son PlaySound <none> 0.00
OnTrigger firetrap_relay_end Disable <none> 0.00
OnTrigger firetrap_fires Extinguish 1 0.20
OnTrigger firetrap_fires Disable <none> 1.20
OnTrigger firetrap_light TurnOff <none> 0.35


Donc ici, on fait quasiment le contraire de ce qui a été fait avec le relais de départ. On annule tout, et on s'auto-désactive. Remarquez l'input plutôt particulier que possèdent les env_fire : Extinguish. C'est un input qui permet de réduire progressivement la taille des flammes à 0, en fonction de la vitesse en paramètre. Nous avons mis 1, pour que les flammes mettent une seconde à mourir, ce qui accentue un peu le réalisme :) .

Détecter les flammes, ainsi que le shoot

A ce moment, le tout devrait fonctionner.

Oui, mais on n'a pas parlé du bruit que font les flammes, on l'oublie ?


Non non non, on va le déclencher, mais pas avec les logic_relay. On va utiliser un détecteur de chaleur pour savoir si les flammes brûlent ou ne brûlent pas :) . De cette manière, le son sera joué exactement quand le brasier sera actif !

Pour ça, on va utiliser l'entité env_firesensor. Placez cette entité au centre des env_fire (au même endroit que les ambient_generic). Voici les paramètres :

  • Name : on ne met rien, pas besoin de l'appeler
  • Radius : 40
  • Heat level : niveau de chaleur. Laissez 32 degrés
  • Time at level : le temps avant de déclencher l'entité dès que la chaleur a atteint le Heat level. Laissez 0


Quand le niveau de chaleur est dépassé, l'output OnHeatLevelStart est déclenché. Quand le seuil redescend, c'est OnHeatLevelEnd qui est appelé. On va donc utiliser ces deux outputs pour jouer/muter le son :


Output namedTargets entitiesVia this inputParameterDelay
OnHeatLevelStart firetrap_fires_son PlaySound <none> 0.00
OnHeatLevelEnd firetrap_fires_son StopSound <none> 0.00


Voilà, ce n'est pas bien compliqué :) .

Ehhh, mais dans Ravenholm, quand on tire dans le gaz, ça s'embrase. Or ici, çe ne marche pas. Pourquoi ?


Parce qu'on n'a rien mis pour détecter le shoot ^^ .

J'ai pensé à une méthode simple pour faire ça. Je mets un func_button avec la texture nodraw sur le sol, et qui recouvre toute la surface des flammes. Ce bouton fait une unité de haut et est plaqué au sol. Le paramètre de façon à ce qui ne se passe rien de spécial, hormis si on tire dessus. Pour ça, je mets la propriété Health sur 2, et je coche le flag Damage Activates. Pour savoir si on a tiré sur le bouton, j'utilise cet output :

Output namedTargets entitiesVia this inputParameterDelay
OnDamaged firetrap_relay_start Trigger <none> 0.00


Image utilisateur
Voici ce que j'ai
Il existe un autre système pour détecter le shoot, en se basant sur le son produit par l'arme. C'est un peu compliqué ; je compte l'expliquer, mais actuellement, il faudra vous contenter de cette méthode :) ( ou de ce tuto ^^ ).
Chapitre précédent Sommaire Chapitre suivant

Partager

7 commentaires pour "Burn them, Brother !"
Note moyenne : 3.89 / 4 (103 votes)
Pseudo Commentaire
Hors ligne Le Neuvième Démon # Posté le 01/03/2009 à 14:25:22
Apple, cay le mal !
Avatar

Bonjour!
J'adore ce tuto, il me sert beaucoup mais il me manque des sons par exemple, les flammes qui brûlent et celui des flammes qui s'arrêtent, etc...
Je peux les trouver où?
Merci :)
Hors ligne Sox_44 # Posté le 15/08/2009 à 15:43:28
Avatar

D'abord, Bonjour tout le monde :)

Je pose ce poste pour vous faire part d'un petit problème :-°
Voilà: Enfaite je suis entrain de créer une map deathrun...Jusqu'à la tout va bien.

Sauf que un de mes pièges consiste a appuyer sur un bouton pour faire apparaitre des flammes avec un trigger_hurt (Bah oui, sinon sa serait pas marrant :D ).
J'ai donc proceder avec les output suivant:
______________
OnPressed/Feu1/StartFire/0.00 (env_fire avec StartDisable mit sur yes)
_______________
OnPressed/hurt_feu1/Enable/0.00 (trigger_hurt avec StartDisable mit sur yes)
_______________
OnPressed/Feu1/Extinguish/10.00
_______________
OnPressed/hurt_feu1/Disable/10.00
_______________

En me référant au sublissime tuto "Burn them, Brother!", tout est normal et devrais marcher!!
Malheureusement ce n'est pas le cas :(

Si quelqun pourrait m'aider qu'il m'en fasse part, Merci Beaucoup :lol:

PS: Désolé si quelques fautes d'orthographes se sont glissées dans mon texte, ce n'est pas mon fort :euh:
Hors ligne Lpu8er # Posté le 22/09/2009 à 15:35:20
[R34n1m4T3d]
Avatar
Groupe : Anciens
Flux RSS

Ville : Grenoble
Pays : France métropolitaine
Études : Licence Professionnelle SIL (Système Informatiques et Logiciel)

Attention, en tout cas pour TF2, l'env_fire est buggué et ne fonctionne pas.

Sox_44 > peut-être est-ce un problème similaire d'entitée non-fonctionnelle. Vérifies sur le wiki de Valve les entités utilisées. Pour ma part, Extinguish, indépendemment d'env_fire, plantait la map.
De même, vérifies avec Alt + P pour les outputs/inputs, puis avec le log de compilation des fois qu'une entité saute.

Le or exit(mysql_error()), nom d'un chien !!!
(et apprenez à concaténer avant de le faire)

Oui, oui, c'est exit(), pas die() (alias, toussa). Tant qu'on y est, je mettrais aussi une gestion Exception PDO Error. Ca fera beau en signature.
 
Hors ligne JyЯatøs # Posté le 02/01/2010 à 15:44:25
Avatar

Moi les env_fire (sous C.S.S) ne marche pas, il n'apparaissent pas...
Hors ligne manukikiprout # Posté le 12/10/2010 à 11:39:12
Nooooon !! Pas la rentrée !!
Avatar

Avis : Bon

Je n'ai pas testé, mais il est possible que dans ta technique finale pour que "quand on tire avec un flingue sur le gaz il s'allume", même avec un pied de biche on pourrai allumer le brasier ?

Enfin, pt'êt pas ! J'ai pas testé, mais je pense que tu n'as pas demandé de différencier les flingues des armes blanches...

Mon petit, cette paix est ce pourquoi luttent tous les vrais guerriers !
Il n'y a pas de fumée, elle vous pinceront aussi !
 

Voir tous les commentaires