www.amigos3d.fr www.amigos3d.fr www.amigos3d.eu www.amigos3d.eu

Amigos3D

 
Volets animés - Animated shutters.
 

Pour ce tutorial je vais supposer que vous avez déjà quelques connaissances en mapping…et en scripting ; et que vous connaissez bien le fonctionnement de Mohradiant… !
Ici je vais vous apprendre à faire des volets animés (très simple) puis à forcer le mouvement qui les fait s’entrechoquer selon événement…(un peu plus compliqué), et enfin à leur ajouter un son : utilisation des alias (là, ça devient sérieux !).
Donc pour commencer, vous aller créer votre carte (vous savez comment faire : ciel, point de départ des joueurs,… ! je n’y reviendrais pas) avec une maison (à 2 étages de préférence), et 5 fenêtres minimums (mais pas toutes sur le même mur, c’est important !).
Ce qui devrait vous donner à peu près ceci :

I ) Faire des volets animés

Nous allons donc maintenant créer les volets !
Faites 2 brushs d’épaisseur 4 (c’est la norme…), dont la hauteur est un peu plus grande que celle de la fenêtre à laquelle ils sont associés (pour plus de réalisme bien sûr !), et dont la largeur est environ la moitié de la largeur de la fenêtre : afin qu’ils coïncident lorsqu’ils seront fermés ! Vous les placerez perpendiculairement au mur (s’aider avec la vue XY top) et de chaque coté de la fenêtre !
Je pense que l’image suivante vous aidera à mieux comprendre :

Il faut maintenant texturer ces brushs !
Tapez wood dans la boite de dialogue située juste en dessous de la barre d’outil, appelez la console des textures (avec la touche T ), puis tapez dans la boite de message située dans la console des textures : shutter_set2. Remarque, vous pouvez également trouver cette texture en allant dans Texture/central_europe.

Maintenant texturez vos faces de brush avec cette texture (n’oubliez pas : CTRL + F pour étaler la texture sur toute une face) ! Mais vous pouvez utiliser une autre texture de bois pour les côtés du brush.
Il est très important de ne pas oublier de texturer le coté du brush situé du coté du mur : c’est a dire celui ou est situé la charnière du volet (dans la réalité), en effet, cette partie sera visible lorsque le volet sera en mouvement.
Sur cette illustration, j’ai volontairement supprimé une partie du mur pour que vous puissiez mieux voir de quoi je veux parler :

Voilà, maintenant que c’est fait, vous allez créer, comme pour une porte rotative, le brush avec la texture origin qui sera l’axe de rotation de votre volet lorsqu’il bougera, c’est en quelque sorte la charnière !

Maintenez sélectionné ce brush origin et sélectionnez en même temps l’un des 2 volets, faites clique droit et transformez les en script_object !

Maintenez toujours l’axe et le volet sélectionnés puis appelez la console des entités (avec la touche n), puis donnez leur les clé/valeur suivantes :
-> s’il s’agit du volet situé à droite de la fenêtre : targetname/rshutter
-> s’il s’agit du volet situé à gauche de la fenêtre : targetname/lshutter

Note : Attention, ne vous fiez pas à ce que vous voyez dans la vue 2D, Il faut toujours se placer dans la vue 3D en face des volets pour savoir lequel est à gauche, et lequel est à droite !!
Et bien maintenant vous pouvez faire la même chose pour tous les volets, à toutes le fenêtres...
Voilà, ce sera très court pour la partie scripting : Il vous suffit juste d’ajouter cette ligne sous level waittill prespawn :
exec global/shutter.scr

II ) Forcer l’entrechoquement des volets selon évènement:

Nous allons maintenant passer à une partie un peu plus compliquée : Faire s’entrechoquer les volets selon événement !
Ici j’ai choisi l’explosion d’un canon !
Vous allez donc créer un flak 88 destructible, comme c’est remarquablement bien expliqué dans les tutoriels de notre ami Tropheus.
Utilisé le tuto pour la carte et le script ! (attention, il s’agit d’une méthode valable uniquement pour les cartes en solitaire. Placez votre canon pas trop éloigné de la maison pour que l’effet final soit bien réaliste.
Ce qui devrait vous donner quelque chose comme ceci :

Une fois fini, vous allez sélectionner tous les volets (et leur brush origin), se situant sur le mur auquel fait face le canon ! Et vous allez leur donner comme clé/#group et valeur/1

Ici, 1 est le numéro que vous attribuez au groupe de volets, et qui va vous servir ensuite dans le script pour les faire bouger!
C’est une bonne idée de regrouper les volets par « mur », et de donner à chaque groupe de volets situé sur un mur différent, une valeur différente ( 1, 2, 3, 4,…).
Cela vous permet de créer de magnifiques effets pour le passage d’un avion juste au dessus de la maison par exemple, ou une explosion localisée.
Bien, ce tuto s’arête ici en ce qui concerne le mapping ; maintenant place au script !
Votre sript doit désormais ressembler a ça : (sans la ligne rouge)

Pour une carte en solitaire.

//nom de la carte: tutorial_volets

main:
// set scoreboard messages
setcvar "g_obj_alliedtext1" "Tutorial pour les"
setcvar "g_obj_alliedtext2" "volets animés"
setcvar "g_obj_alliedtext3"
setcvar "g_obj_axistext1" "Réalisé par Danker"
setcvar "g_obj_axistext2" "en s'inspirant des tutos"
setcvar "g_obj_axistext3" "de Surgeon et de Tropheus"
setcvar "g_scoreboardpic" "none"

level waittill prespawn

level.script = maps/tutorial_volets.scr
exec global/shutter.scr
exec global/exploder.scr

level waittill spawn

thread obj1

end

//*** l'explosion du flak ***//
obj1:

$bomb1_trigger waittill trigger
$bomb1 model "animate/explosive.tik"
$bomb1 playsound plantbomb1
$player loopsound bombtick
$player stopwatch 5
wait 5
$player stoploopsound
$bomb1 playsound explode_tank
waitthread global/exploder.scr::explode 1
$bomb1 remove
radiusdamage $hurtobject1 250 600
wait 0.2
thread global/shutter.scr::shuttrig 1

end

pour une carte multijoueurs avec objectif


//nom de la carte : obj_tutorial_volets
main:

setcvar "g_obj_alliedtext1" "Détruire"
setcvar "g_obj_alliedtext2" "le canon de 88mm"
setcvar "g_obj_alliedtext3" ""
setcvar "g_obj_axistext1" "Défendre"
setcvar "g_obj_axistext2" "le canon de 88mm"

setcvar "g_obj_axistext3" ""

setcvar "g_scoreboardpic" "none"

level waittill prespawn

level.script = maps/obj/obj_tutorial_volets.scr

exec global/exploder.scr
exec global/shutter.scr

level.dmrespawning = 0
level.dmroundlimit = 4
level.clockside = "axis"

level.defusing_team = "axis"
level.planting_team = "allies"

level waittill spawn

level.bomb_damage = 200
level.bomb_explosion_radius = 1048

level waittill roundstart

$bombe1 thread global/obj_dm.scr::bomb_thinker
$bombe1 thread victoire_axe
thread victoire_allies $bombe1

end

//*** Victoire des alliés ***//
victoire_allies local.bombe:

while (local.bombe.exploded != 1)
{
wait 0.1
}
wait 0.2
thread global/shutter.scr::shuttrig 1
wait 1.5

teamwin allies

end

//*** Victoire des allemands ***//
victoire_axe:

level waittill axiswin

end


En fait il vous suffit juste de rajouter cette simple petite ligne :
thread global/shutter.scr::shuttrig 1

Comme je viens de le faire en écrivant cette commande en rouge. Cela active l’entrechoquement des volets juste au moment de l’explosion (si vous ne comprenez pas pourquoi, référez vous aux indications de script dans le tutoriel de Tropheus ou dans le tutoriels sur l’objectif par explosion).
Ici 1 est la valeur de groupe que vous avez donné aux volets.
Vous pouvez mettre plusieurs fois cette ligne de suite, en changeant à chaque ligne le nombre (valeur de groupe) ce qui permettra de faire s’entrechoquer plusieurs groupes de volets en même temps. Et si vous commandez une petite attente entre chaque entrechoquement, par la commande « wait x » (ou x est un nombre), vous pourrez ainsi simuler l’effet du souffle de l’explosion qui fera bouger les groupes de volets les uns à la suite des autres en fonction de leur éloignement par rapport au lieu l’explosion. C’est très joli à voir.

III ) Ajouter des sons aux volets animés:

Maintenant nous allons donner un son aux volets, ou plus précisément, nous allons déclarer les sons des volets.
En effet le script qui commande le mouvement des volets (mohda/main/pak0.pk3/global/shutter.scr) commande également l’exécution de certains sons à des moments précis.
Or, comme vous le savez peut-être, les sons de MOHAA on besoin d’un alias (une sorte de rappel de l’emplacement du fichier son et qui définit également ses paramètres tels que le volume, la fréquence, et le canal sur lequel il est joué) dans le sript afin que le jeu les reconnaisse. Ces alias (ou déclarations) de fichiers sons sont présent dans un fichier nommé ubersound.scr. Ce fichier est sensé être lu par le jeu à chaque lancement de carte, ainsi l’on n’aurait pas besoin de déclarer les sons dans chaque script chaque fois qu’on en utilise, mais Medal of Honor est un jeu qui, malgré sa qualité de réalisation, et malgré les patchs correctifs, possède encore des bugs, et ce fichier ubersound.scr n’est pas lu lorsque l’on lance une carte.
Si vous voulez connaître la raison, la voici : Chaque carte lorsqu’elle est présente sous forme de fichier .pk3 peut posséder un fichier ubersound.scr (situé dans un dossier ubersound.scr) qui est censé être lu, à vous allez donc insérer dans votre sript les alias de ces sons (que vous trouverez ici : mohaa/main/pak0.pk3/ubersound/ubersound.scr ). Comme ceci : (placez les au même endroit pour une carte multijoueurs).

//nom de la carte: tutorial_volets

main:
// set scoreboard messages
setcvar "g_obj_alliedtext1" "Tutorial pour les"
setcvar "g_obj_alliedtext2" "volets animés"
setcvar "g_obj_alliedtext3"
setcvar "g_obj_axistext1" "proposé par Danker"
setcvar "g_obj_axistext2" "en s'inspirant des tutos"
setcvar "g_obj_axistext3" "de Surgeon et de Tropheus"
setcvar "g_scoreboardpic" "none"

local.master = spawn SricptMaster

local.master aliascache shuttersqueak_01 sound/mechanics/Mec_ShutterSqueak_01.wav soundparms 0.5 0.2 0.8 0.4 250 2500 auto loaded maps "m dm obj"
local.master aliascache shuttersqueak_02 sound/mechanics/Mec_ShutterSqueak_02.wav soundparms 0.5 0.2 0.8 0.4 250 2500 auto loaded maps "m dm obj"
local.master aliascache shuttersqueak_03 sound/mechanics/Mec_ShutterSqueak_03.wav soundparms 0.5 0.2 0.8 0.4 250 2500 auto loaded maps "m dm obj"
local.master aliascache shuttersqueak_04 sound/mechanics/Mec_ShutterSqueak_04.wav soundparms 0.5 0.2 0.8 0.4 250 2500 auto loaded maps "m dm obj"
local.master aliascache shutterhit_01 sound/mechanics/Mec_ShutterHit_01.wav soundparms 0.5 0.2 0.8 0.4 250 2500 auto loaded maps "m dm obj"


level waittill prespawn

level.script = maps/tutorial_volets.scr
exec global/shutter.scr
exec global/exploder.scr

level waittill spawn

thread obj1

end

//*** l'explosion du flak ***//
obj1:

$bomb1_trigger waittill trigger
$bomb1 model "animate/explosive.tik"
$bomb1 playsound plantbomb1
$player loopsound bombtick
$player stopwatch 5
wait 5
$player stoploopsound
$bomb1 playsound explode_tank
waitthread global/exploder.scr::explode 1
$bomb1 remove
radiusdamage $hurtobject1 256 384
wait 0.2
thread global/shutter.scr::shuttrig 1

end

N’oubliez pas de rajouter, juste avant les allias, cette petite ligne :
local.master = spawn SricptMaster
Pour vous aider a mieux comprendre ce qu’est un alias, je vais en décrire un :
local.master C’est la variable qui sert à créer les alias.
aliascache shuttersqueak_01 sound/mechanics/Mec_ShutterSqueak_01.wav ici vous définnissez le nom du son et son emplacement.
soundparms 0.5 0.2 0.8 0.4 250 2500 auto loaded maps "m dm obj" Cette partie définit l’intensité du son (1er paramètre) ainsi que plusieurs paramètres que je ne connais pas.
L’avant dernier paramètre correspond à la distance à partir de laquelle le son commence à faiblir, et le dernier correspond à la distance au delà de laquelle le son n’est plus audible ! (pour en savoir plus, allez voir le tuto sur les sons localisés. C’est ça l’organisation SANS faille de Caskami :-° :p)
aliascache shuttersqueak_01 sound/mechanics/Mec_ShutterSqueak_01.wav soundparms 0.5 0.2 0.8 0.4 250 2500 auto loaded maps "m dm obj"
Toute cette partie est celle que vous trouvez dans le ubersound.scr ! Il faut y rajouter le petit : local.master devant et aussi rectifier la toute dernière partie entre "guillemets" qui apparaît souvent ainsi dans le ubersound.scr : « m1L1 » ou « m2l3 m2l4 » et qu’il faut remplacer par : « m dm obj» je ne suis pas sûr de l’utilité de ce changement, mais il me semble qu’il permet de charger automatiquement ces sons pour les maps solo, dm et obj…
Pour le fichier *_precache.scr, allez voir le tuto sur les sons localisés où il est ce qu’il faut mettre.
A noter que si vous essayez sous En Formation ou sous L’Offensive, il faut faire un petit restart dans la console pour bien entendre les sons… Pour éviter ce problème, il faut faire un ubersound.scr personnel, mais ça c’est expliqué dans le tuto sur les sons localisés.
Vous pouvez, bien entendu, changer le son des volets (en importer par exemple), auquel cas il faudra IMPERATIVEMENT garder les mêmes noms (ex : shuttersqueak_01) et ne changer que le chemin du son : sound/volets/Mon_son_1.wav

Voilà je crois que j’ai tout dit ! Maintenant si vous vous posé encore des questions, il y a le forum.

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

 
Retour à la liste des tutoriels.
 

Echange de bannières échange de bannières Référencement gratuit !
 

Erreur : No such file or directory