A. CRÉER UNE PORTE S'OUVRANT EN PLUSIEURS ÉTAPES.
Comme nous l'avons vu, pour afficher les portes, le moteur Infinity Engine utilise le tileset (overlay) de la carte en utilisant alternativement les tiles de base et les tiles alternatives du fond de carte. Ce qui limite considérablement les effets visuels que l'on veut produire comme, par exemple, visualiser plusieurs états d'ouverture d'une même porte, comme ceci :
On trouve un tas de briques :
On déplace les briques :
On ouvre la trappe :
En théorie, c'est impossible car on ne peut pas utiliser plus de deux images différentes sur la même tuile d'une carte.
En pratique, il suffit d'appliquer le vieil adage du moddeur masqué : en termes de modding, il n'y a pas de problème, il n'y a que des solutions.
Je sais, c'est une vieille rengaine, mais dans ce cas, ça fonctionne parfaitement.
L'astuce consiste à utiliser un fichier bam pour simuler l'un des états d'ouverture de la porte.
Comme je ne compte pas vous inonder de captures d'écrans, je pars du principe que vous avez assimilé les tutos précédents. Si ce n'est pas le cas, je vous incite fortement à les consulter avant de lire la suite, sinon, vous ne comprendrez pas grand-chose à la manip.
1. Créer le fichier bam d'animation de la trappe.
J'ai utilisé une animation simple, composée de deux images : -
Ce qui donne ceci :
Cette animation permettra de simuler l'ouverture de la trappe sur la carte (le cycle 0 correspond à la trappe fermée, et le cycle 1 à la trappe ouverte).
2. Créer la porte.
Puisque vous savez comment faire, je ne vous donne que le résultat :
Vous noterez que la porte est fermée et que j'ai coché la case « Transp » (Transparence).
>> Cette dernière est très importante : on l'utilise lorsqu'on crée une porte qui ne bloque pas la vision.
Sans oublier le fichier wed :
Récapitulons.
Voici la porte fermée :
Et la porte ouverte :
On n'oublie pas les impeded blocks :
À ce stade, on reste coincé par la limitation du moteur du jeu. C'est pour la contourner qu'intervient notre animation.
3. Ajouter l'animation sur la carte.
Je crée donc une animation sur la carte pour simuler l'ouverture de la trappe :
Et je la plaque sur la porte ouverte :
Vous remarquerez que j'ai choisi le cycle 0 (porte fermée) et que j'ai coché la case « No own light ». Cette dernière permet au moteur de moduler la teinte de l'animation lors des changements de luminosité selon l'heure de la journée (jour/nuit).
Le travail de préparation étant terminé, il faut maintenant mettre tout ceci en musique à l'aide de scripts. Et qui dit scripts... ?
Lecteur a écrit :
dit triggers !
Bravo ! On va finalement faire quelque chose de bon de vous...
4. Créer les triggers permettant de lancer les scripts.
Nous allons utiliser 4 region triggers utilisant tous le même script :
- Pierres (facultatif) : Affiche un message lorsqu'on s'approche du tas de pierres.
- Cache : Permet de déplacer les pierres.
- TrappeO : Simule le polygone magenta d'ouverture d'une porte et permet d'ouvrir la trappe et d'accéder à la carte suivante.
- TrappeF : Simule le polygone magenta de fermeture d'une porte et permet de fermer la trappe et d'interdire l'accès à la carte suivante.
En images :
Pierres
Cache
Les deux sont identiques :
TrappeO
TrappeF
Et on n'oublie pas le travel trigger et son point d'entrée :
Il est temps de passer à la potion magique qui fait fonctionner tout ceci : les scripts.
5. Écrire les scripts.
Nous utiliserons 2 scripts
- GW0001 : le script de la carte GW0001.
- GW0001Se : un script unique pour les region triggers. Mais vous pouvez très bien le décomposer en autant de scripts que de triggers (dans ce cas, n'oubliez pas de modifier le nom du script dans les onglets des triggers concernés).
et 2 variables :
- GWENTREE : une variable de carte permettant d'initialiser les triggers lorsqu'on entre pour la première fois dans la carte.
- GWEnt007 : une variable de carte permettant de gérer l'activation/désactivation des différents triggers, l'ouverture de la porte et l'apparition et la modification des séquences de l'animation de la trappe.
5a. Le script de la carte.
Commençons par le script de la carte (GW0001). C'est le plus simple et il se compose de deux blocs :
Comme son nom l'indique (« Initialisation »), le premier bloc désactive tous les triggers de la porte et l'animation de la trappe. Ainsi, la carte n'affiche que la porte fermée (le tas de briques).
Le second (« Accès à la cachette ») active le trigger Pierres lorsque la variable GWEnt007 est égale à 1. En fait, après un dialogue avec un autochtone. Auparavant, on passe devant le tas de briques sans remarquer qu'il dissimule une trappe.
5b. Le script des triggers.
Celui-ci est un peu plus complexe (pas tant que ça, en fait ]
[*]
Message automatique.
[*]
Tas de pierres.
[*]
Trappe.
[/LIST]
Facultatif dans le cadre de ce tuto, le bloc «
Message automatique » informe le groupe qu'il a loupé quelque chose en passant pour la première fois près du tas de briques.
Une fois le message affiché, la variable
GWEnt007 est incrémentée de 1, le trigger
Cache est activé et le trigger
Pierres désactivé.
Le bloc «
Tas de pierres » est activé par le trigger
Cache. La troisième partie simule le déplacement des briques et ouvre la porte.
La variable
GWEnt007 est incrémentée de 1, le trigger
TrappeF est activé, l'animation de la trappe (
Secret) activée et le trigger
Cache désactivé.
On obtient donc ceci à l'écran :
Le dernier bloc, «
Trappe », gère l'ouverture de la trappe et l'accès à la carte GW0007.
La troisième partie de ce bloc simule l'ouverture de la trappe :
Elle change la séquence de l'animation affichée : ce n'est plus la séquence 0 (trappe fermée) qui est affichée, mais la séquence 1 (trappe ouverte).
Activé, le travel trigger
Tran0007 permet de pénétrer (descendre) dans la carte GW0007.
Enfin, le trigger
TrappeO est activé et le trigger
TrappeF désactivé.
Et on obtient ce qu'on voulait :
Le quatrième partie du code ferme la trappe et condamne l'accès à la carte GW007 :
Voilà, vous avez saisi le principe (enfin, je l'espère).
Libre à vous de l'adapter en multipliant les étapes d'ouverture ou de fermeture en activant, désactivant plusieurs fichiers BAM ou plusieurs séquences d'un même fichier BAM.
Les possibilités sont infinies.
[/size]