Gaming Zone Communautes Battlefield PiTrust Communautes Mods
SommairemapstutorielsforumtétéchargementsdiversLes liensLivre d'Or
25/. Exploser un mur avec une charge explosive

 

Nous allons reprendre le même principe que notre mur à exploser au PanzerFaust, sauf que cette fois-ci, ce sera en posant une charge explosive. Pour cela, nous allons procéder comme la précédente fois, et faire une nouvelle ouverture dans notre mur. Filtrez les modèles statiques pour une meilleure visibilité.

Ajoutons maintenant nos brushs dans l'espace creusé en appliquant la texture SHADOWCASTER (cf. Détruire un mur au Panzerfaust). Filtrez ensuite ce brush (touche H).

Ajoutez le mur intact en le texturant correctement puis, donnez-lui (tous les brushs sélectionnés) la fonction script_brushmodel. Nous allons lui donner la ligne targetname mur_avant. En fait, à partir de notre script, nous indiquerons au moteur quand il faut afficher ou faire disparaître les brushs mur_avant. Filtrez ensuite les brushs (touche H).

Ensuite, créez ce que sera le mur après son explosion. Chose faite, sélectionnez tous les brushs et donnez-leurs la fonction script_brushmodel. Ajoutez maintenant la ligne targetname mur_après. Filtrez ensuite les brushs (touche H).

Nous allons maintenant compliquer les choses, faire en sorte que les barrils volent au moement de l'explosion (à l'aide de la fonction exploderchunk. Affichez de nouveau les modèles statiques puis sélectionnez les 3 barrils que vous trsnformerez en script_model.

Pour notre tutorial sur le mur à exploser avec un panzerfaust, nous avions utiliser la chaine script_exploder 1, ici nous prendrons une chaine de déclenchement différente à savoir script_exploder 2. Nous allons ajouter une autre commande à cela, une fonction script_delay. Un script_delay permet de décaler le déclenchement d'une explosion ou d'un mouvement à partir du déclenchement du TRIGGER. Dans notre exemple, nous allons mettre un déclenchement de l'action à 15,6 secondes (nous verrons plus loin pourquoi) : script_delay 15.6.

Pour mémoire, un script_exploder seul fait disparaître les brushs ou entités au déclenchement.

Nous allons maintenant créer nos barrils qui volent à l'explosion. Pour cela, nous avons besoin de 3 autres barrils en script_model. Première chose à faire, les rattacher à la chaine script_exploder 2. Deuxième chose, synchroniser le mouvement de ces barrils avec la disparition des 3 autres barrils, ajoutez donc un script_delay à 15.5. Le mouvement sera alors déclanché 0.1 seconde avant la disparition des 3 autres modèles précédents. Comme précisé plus haut, la fonction qui permet de déplacer des script_model ou script_brushmodel est la fonction exploderchunk, ajoutez donc la ligne targetname exploderchunk.

Pour indiquer dans quel sens iront les modèles, nous allons là aussi ajouter des script_origin à chacun des 3 modèles exploderchunk. Ajoutez alors 3 script_origin et rattachez chacun des modèles à un script_origin. Pour mémoire, sélectionnez d'abord le modèle, puis le script_origin et faites un CTRL + K. La flèche rouge doit aller vers l'origin.

Dans la suite de ce tutorial, nous allons placer les barrils par terre, après leur envole. Pour cela, à partir de la vue XY Top faites en sorte de ne pas trop éloigner les script_origin.

Ajoutez maintenant 3 nouveaux script_model barrils mais cette fois-ci couchés sur le flanc que vous placerez aligné prêt de chacun des script_origin (en vous basant sur la vue XY Top). Les flèches rouges du screenshot suivant vous montre où se trouvent les script_origin par rapport à nos 3 nouveaux script_model.

Ensuite ajoutez les lignes script_exploder 2, targetname exploder (les modèles seront affichés après le déclenchement du TRIGGER selon le script_delay) et un script_delay 16.3 (soit 16.3 secondes après le déclenchement de notre TRIGGER).

Le problème des script_model est qu'ils n'ont pas de collmaps, en d'autres termes on peut les traverser. Pour cela, nous allons devoir créer des CLIP pour créer manuellement les collisions de ces barrils à terre. Comme il ne faut pas qu'ils (les CLIP) soient activés avant l'explosion, nous allons les mettre en script_brushmodel. Créez donc 3 brushs (soit en les faisant de la forme du barril avec une texture CLIP NOSIGHT METAL, soit en reprenant son collmap) puis mettez-les en script_brushmodel.

Ensuite, comme pour les modèles de barrils précédents, ajoutez : script_exploder 2, targetname exploder et script_delay 16.3.

Il nous reste à placer le modèle d'explosif et son TRIGGER.

Prenez le modèle xmodel/explosivepack_objective_incomplete que vous transformerez en script_model ajoutez lui la ligne targetname bombe. Le targetname bombe sera ensuite utiliser à partir du script que nous allons créer pour faire fonctionner tout cela.

Créez maintenant le déclencheur, un TRIGGER_USE et ajoutez la ligne script_exploder 2. Nous allons ajouter une fonction qui permettra d'afficher un message dans le jeu à savoir : Appuyez sur [Utilisez] pour poser la bombe. Ceci se fait avec la ligne : hintstring Appuyez sur [Utilisez] pour poser la bombe. Vous pouvez bien-sûr mettre n'importe quel message différent.

Dernière chose à faire, rattacher notre déclencheur à notre modèle d'explosif. Sélectionnez d'abord le modèle, puis le TRIGGER_USE et faites un CTRL + K. La flèche bleue doit aller vers le TRIGGER_USE.

Voici au final une vue d'ensemble de notre création. Nous en avons fini avec le mapping, passons maintenant au script.

D'abord, nous allons créer un nouveau fichier FX pour les besoins de ce tutorial que nous appellerons bombe_fx.gsc où nous mettrons :

main()
{
precacheFX();
}

precacheFX()
{
level._effect["mp_bomb"] = loadfx("fx/explosions/mp_bomb.efx");
level._effect["exp_concrete"] = loadfx("fx/map_kharkov1/exp_concrete.efx");
}

Pour information, l'utilisation du FX fx/explosions/mp_bomb.efx génère un effet d'explosion et de fumée et le FX fx/map_kharkov1/exp_concrete.efx génère une animation de débris au moent de l'explosion.

Voyons maintenant ce que nous devons faire pour notre script principal. Les lignes en rouge sont à ajouter au script :

main()
{
setCullFog (0, 6500, .32, .36, .40, 0);
ambientPlay("ambient_mp_brecourt");

maps\mp\_load::main();

level thread maps\mp\tuto_fx::main();
level thread maps\mp\tuto_fenetre::main();
level thread maps\mp\mortier_fx::main();
level thread maps\mp\bombe_fx::main();
level thread maps\mp\_tankdrive_gmi::main();
level thread maps\mp\_jeepdrive_gmi::main();

precacheModel("xmodel/explosivepack");

game["allies"] = "american";
game["axis"] = "german";

game["american_soldiertype"] = "airborne";
game["american_soldiervariation"] = "normal";
game["german_soldiertype"] = "wehrmacht";
game["german_soldiervariation"] = "normal";

level thread mortier();
level thread avions();
level thread bombe();

}

mortier()

{
mortier = getentarray ("mortier","targetname");
while (1)
{
wait (5 + randomfloat(5));
GoodPosition = false;
while (!GoodPosition)
{
rand = randomint(mortier.size);
GoodPosition = true;
players = getentarray("player", "classname");
for(i = 0; i < players.size; i++)
{
if (distance(mortier[rand].origin,players[i].origin) < 200)
{
GoodPosition = false;
break;
}
}
}
mortier[rand] playsound("mortar_incoming");
wait (1.9);
origin = mortier[rand] getorigin();
playfx (level._effect["mortar_explosion"][randomint(2)], origin);
mortier[rand] playsound("mortar_explosion");
radiusDamage(mortier[rand].origin, 200, 200, 0);
}
}

avions()

{
level.PlaneSpeed = 3;
spitfire = getent ("spitfire","targetname");
messerschmitt = getent ("messerschmitt","targetname");

temp = getent (spitfire.target,"targetname");
spitfire.dest = temp.origin;
spitfire.start = spitfire.origin;
spitfire hide();

temp = getent (messerschmitt.target,"targetname");
messerschmitt.dest = temp.origin;
messerschmitt.start = messerschmitt.origin;
messerschmitt hide();

wait 2;
while (1)
{
messerschmitt thread passage_avions("son_messerchmitt");
wait 1;
spitfire thread passage_avions("son_spitfire");
wait 30;
}
}

passage_avions(sound)

{
if (isdefined (sound))
self playsound (sound);
wait 4;
self show();
self moveto(self.dest, level.PlaneSpeed, 0.1, 0.1);
wait level.PlaneSpeed;
self hide();
self.origin = self.start;
}

bombe()
{
bombe = getent ("bombe","targetname");//on déclare le targetname bombe en entité
bombe.trigger = getent (bombe.target,"targetname");
mur_avant = getent ("mur_avant","targetname");//on déclare les brushs mur_avant en entité
mur_apres = getent ("mur_apres","targetname");//on déclare les brushs mur_apres en entité

mur_apres hide();//les script_brushmodel mur_apres ne sont pas affichés
while (1)
{
bombe.trigger waittill ("trigger",other);//déclenchement du TRIGGER-USE - les script_delay sont déclenchés
if ((isplayer (other)) && (other.pers["team"] == "allies"))
break;
}

bombe playsound ("MP_bomb_plant");//son joué pour la pose de la bombe
bombe.trigger delete();//le TRIGGER_USE est effacé
bombe setmodel ("xmodel/explosivepack");//le modèle explosivepack_objective_incomplete est remplacé
wait .5;// on attend 0.5 seconde
bombe playLoopSound("bomb_tick");//on joue le son du compte à rebours
wait 15;// on attend 15 secondes (soit 16 secondes depuis le déclenchement du TRIGGER
bombe stopLoopSound("bomb_tick");//on stoppe le son du compte à rebours
origin = bombe getorigin();//on récupère l'origine de la bombe
bombe delete();//on efface le modèle de la bombe
playfx(level._effect["mp_bomb"], origin);//on déclenche le FX mp_bomb
playfx(level._effect["exp_concrete"], origin);//on déclenche le FX exp_concrete
radiusDamage(origin, 500, 2000, 1000);//on assigne une zone de danger autour de l'origne de la bombe
mur_apres show();//les script_brushmodel mur_apres sont affichés
mur_avant delete();//les script_brushmodel mur_avant sont effacés
}

NB : radiusDamage (self.origin, range, max_damage, min_damage)

Vous pouvez maintenant compiler votre map et tester le fruit de votre travail.

Les fichiers (.map - .gsc - csv) de notre tuto 25/. se trouve ici. Pour l'utiliser, à partir du menu FICHIER, sélectionnez IMPORTEZ (.map) ==> IMPORTEZ NOUVELLE MAP.

Par Caskou - 2005 Copyright © by CaskAmi Prod. Tout droit réservé.

 

Page générée en

Design / concept Amigos3D - Copyright ©2006 CaskAmi Prod. Tous droits réservés.
Caskami.com est hébergé; par Eliott-Ness.