Faire sauter un mur. (2 méthodes)
(Vous allez apprendre à faire sauter un mur avec une bombe et avec un bazooka.)

retour au sommaire

Tutorial écrit par Tropheus en s'inspirant de celui de Mohaarox

1/ Mapping

Comme vous en avez l'habitude maintenant, construisez  une map avec tous les éléments nécessaires. (info_player_start, worldspawn etc...)
Comme nous avons 2 murs à faire exploser, nous allons en construire 2, le premier en pierres qui sera détruit par une bombe et le second en ciment lui sera détruit par un bazooka.

a/ Le mur de pierres.
Le mur de pierre constituera le premier groupe d'objets manipulés par le script "exploder". On donnera donc la valeur 1 à la clé #set  pour tous les éléments qui le nécessitent.
a1/ le mur détruit
Tout d'abord occupons-nous du mur en pierre. Vous allez donc créer un brush que vous allez mettre en "caulk".

Ensuite grace à l'outil "clip"  découpez le comme vous voulez, puis enlevez les parties qui doivent disparaître après l'explosion.
Ensuite, selectionnez tous les brushes et dans la vue 2D transformez les en "script_object".
Tant qu'ils sont sélectionnés donner leur les key / value suivantes :
#set / 1
targetname / explodersmashed

Ensuite, vous pouvez les texturer comme vous le désirez, Attention de n'oublier aucune face.

a2/ Le mur intact.
Construisez maintenant un second brush de la même taille que celui détruit. Il constituera votre mur intact.
Une fois construit, texturez-le, puis transformez-le en script_object de la même façon que précédemment.
Superposez-le à l'autre mur.
Appliquez-lui les key / value suivantes :
#set / 1
targetname / exploder

a3/ Le système de mise à feu.
Tout d'abord l'explosion.
Dans la vue 2D clic_droit/fx/explosion/wallexploder et vous placez votre explosion à l'endroit désiré.
key / value
#set / 1
targetname / exploderfire

Ensuite la bombe.
Créer un script_model que vous placez au bon edroit puis vous lui donnez les key / value suivantes :
model / items/pulse_explosive.tik
targetname / bomb1
$trigger_name / bomb1_trigger

Puis le declencheur.
Pour le trigger un petit brush qui englobe le tout que vous transformez en trigger_use.
ensuite donnez les key / value :
targetname / bomb1_trigger

Le hurtobject
Un petit brush avec la texture "no draw" que l'on convertit en scipt_object et auquel on donne ces key / value :
targetname / hurtobject1

Le pointeur.
pour faire poinetr le compas du joueur. Un script_origin avec les key / value:
targetname / obj1

A la fin vous devez avoir quelque chose comme ceci :

Il ne vous reste plus qu'à rajouter des débris.
Pour cela construisez des petits brushes, tarnsformez-les en "script_object" cette fois-ci séparement sinon ils ne feront qu'un.
Pour chacun donnez leur les key / value :
#set / 1
target / p1 (ou un autre numéro pour un autre débris.)
targetname / exploderchunk

Pour les directions que doivent prendre les débris il faut que vous placiez les script_origin auquels vous donnerez les key / value suiavntes :
#set / 1
targetname / p1 ou un autre numéro en fonction de la cible désigner par l'exploderchunk.

Voila votre premier mur terminé voici à quoi il peut ressembler.



b/ Le mur de ciment.
Le mur de ciment constituera le second groupe d'objets manipulés par le script "exploder". On donnera donc la valeur 2 à la clé #set  pour tous les éléments qui le nécessitent.

Dans ce cas aussi, la préparation des murs reste la même. Il n'y a que la valeur de la key #set qui doit être 2.

mur détruit
#set / 2
targetname / explodersmashed

mur intact
#set / 2
targetname / exploder

A l'endroit du tir vous mettez une explosion. Ici, j'ai pris fk/explosion/bombwall
#set / 2
targetname / exploderfire

Un hurtobject qui ne me semble pas nécessaire car vous ne tirerez pas sur le mur à bout portant.
targetname / hutobject2

Un trigger_multiple
Il englobe le tout c'est à dire la partie qui touchée par le tir déclencera l'expolsion et la destruction.
targetname / bomb2_trigger
setthread / obj2
health / 50

Le pointeur.
pour faire poinetr le compas du joueur. Un script_origin avec les key / value:
targetname / obj2

Voila si vous voulez des débris vous faites comme pour l'autre mur en mettant la valeur 2 à la clé #set
vous devriez avoir ceci :

 

2/ le scripting.

Voici la partie que vous attendez tous ..... Le scripting.

//mapping : Tropheus
//scripting : Tropheus inspiré de mohaarox

exec global/ai.scr
exec global/loadout.scr maps/test_mur.scr

main:

        level waittill prespawn
    
exec global/exploder.scr
  level waittill spawn
    $player takeall
    waitthread global/items.scr::add_item "explosive"
    $bomb2_trigger nottriggerable
    waitthread global/objectives.scr::add_objectives 1 2 "Faire sauter le mur de pierres" $obj1.origin
    set_objective_pos $obj1
    thread obj1
end
////////////////////l'explosion du mur de pierres/////////////////////
obj1:
    $bomb1_trigger waittill trigger
    $bomb1 model "animate/explosive.tik"
    $bomb1 playsound explosive
    $player stopwatch 5
    vwait 5
    $player stoploopsound bombtik
    $bomb1 playsound explode_tank
    $bomb1 remove
    waitthread global/exploder.scr::explode 1
    radiusdamage $hurtobject1 1256 628
    waitthread global/objectives.scr::add_objectives 1 3 "Faire sauter le mur de pierres" $obj1.origin
    set_objective_pos $obj2
$bomb2_trigger triggerable
end
//////////////////// Explosion du mur en ciment//////////////////////
obj2:
    waitthread global/objectives.scr::add_objectives 2 2 "Faire sauter le mur en ciment" $obj2.origin
    waitthread global/exploder.scr::explode 2
    radiusdamage $hurtobject2 1256 628
    waitthread global/objectives.scr::add_objectives 2 3 "Faire sauter le mur en ciment" $obj2.origin
    wait 2
    thread levelend
    end
///////////
    levelend:
    waitthread global/objectives.scr::current_objectives 0
    iprintln "Mission terminée."
    exec global/missioncomplete.scr test_mur
    end

Une explication?

//mapping : Tropheus
//scripting : Tropheus inspiré de mohaarox

exec global/ai.scr
exec global/loadout.scr maps/test_mur.scr

main:

        level waittill prespawn
    
exec global/exploder.scr
  level waittill spawn
    $player takeall
    waitthread global/items.scr::add_item "explosive"//pour avoir des bombes
    $bomb2_trigger nottriggerable//on bloque le second trigger pour garder une chronologie dans les actions.
    waitthread global/objectives.scr::add_objectives 1 2 "Faire sauter le mur de pierres" $obj1.origin
    set_objective_pos $obj1
    thread obj1
end
////////////////////l'explosion du mur de pierres/////////////////////
obj1:
    $bomb1_trigger waittill trigger
    $bomb1 model "animate/explosive.tik"
    $bomb1 playsound explosive
    $player stopwatch 5
    vwait 5
    $player stoploopsound bombtik
    $bomb1 playsound explode_tank
    $bomb1 remove
    waitthread global/exploder.scr::explode 1//fait exploser le groupe 1
    radiusdamage $hurtobject1 1256 628
    waitthread global/objectives.scr::add_objectives 1 3 "Faire sauter le mur de pierres" $obj1.origin//objectif rempli
    set_objective_pos $obj2//le compas pointe sur le second objectif
$bomb2_trigger triggerable//on active le trigger
end
//////////////////// Explosion du mur en ciment//////////////////////
obj2:
    waitthread global/objectives.scr::add_objectives 2 2 "Faire sauter le mur en ciment" $obj2.origin
    waitthread global/exploder.scr::explode 2//fait exploser le groupe 2
    radiusdamage $hurtobject2 1256 628
    waitthread global/objectives.scr::add_objectives 2 3 "Faire sauter le mur en ciment" $obj2.origin
    wait 2
    thread levelend
    end
///////////
    levelend:
    waitthread global/objectives.scr::current_objectives 0
    iprintln "Mission terminée."
    exec global/missioncomplete.scr test_mur
    end

Bon voici cette partie terminée. Pour le multi les thread restent les mêmes. Seules les définitions en tant qu'objectifs seront différentes.

Télécharger le pk3

Tropheus