DEUXIEME ETAPE : une porte, trois zones, une piscine et un Nali.

On va fermer le corridor par une porte pivotante qui sera réalisée par un mobile. Comme nous n'avons par encore fait subir de déformations à la FA, il suffit de sélectionner le cube, dans ses propriétés de choisir h=128, W=128, B=16. La FA apparaît centrée dans le corridor. Déplaçons-la au milieu du couloir. Là, comme nous avons une grille dimensionnée à 16 points et que la FA est positionnée par rapport à son centre, la rotation se ferait par rapport à ce centre. BD sur un angle de la FA, ce qui a pour effet d'aligner exactement la FA sur le mur, et aussi de placer le point de rotation à cet angle (la petite croix rouge se place sur le vertex choisi).
BG dans la barre d'outils sur "AddMover". Dans la vue de dessus, appuyer sur "B" pour masquer la FA. Le contour de la forme ajoutée est en violet vif. BG pour tout désélectionner car la FA est encore sélectionnée avec.
BD sur le mobile. Dans le menu choisir Mover Keyframe/Key1, ce qui va permettre de définir la position ouverte de la porte. Avec CTRL+BD, faire pivoter cette forme de telle manière que la porte s'ouvre dans la pièce. A nouveau BD/MoverKeyfram/Key0(Base), ce qui ramène la porte en position fermée.

Reconstruire et tester le niveau (F8 -->CTRL+L-->CTRL+P)

Dans le jeu, la porte a cette affreuse texture par défaut, elle s'ouvre bien quand on arrive dessus, et se referme après notre passage. Mais elle est noire de l'autre côté, ne devenant visible que si on lui tire dessus, et dans ce sens elle se s'ouvre pas car elle bute sur le joueur.

Ceci pour faire toucher du doigt certaines difficultés..

Tout d'abord, nous voulons que la porte ait un éclairage correct dans son déplacement. Il faut modifier :
Mover Properties/Mover/bDynamicLightMover=faux-->vrai. C'est efficace, mais ça consomme des ressources. Il sera en général préférable de bien placer les sources de lumière pour ne pas avoir à s'en servir outre mesure.

Il faudrait que cette porte ait une texture appropriée. Eh bien cela va régler à la fois cette question et celle plus générale du calibrage des dimensions. Revenons dans le niveau. Dans une vue quelconque, sélectionner la porte et l'effacer (touche DEL). Recompiler le niveau TOUJOURS après avoir effacé quelque chose. Réactivons la FA dans la vue de dessus (touche "B") et appuyons sur le bouton "Cube" qui nous restitue la silhouette de la porte. Plaçons bien cette forme au centre de la pièce actuellement vide, en s'aidant des trois vues. ajoutons cette forme . Déplacer au besoin la lumière si elle tombe juste dessus. Voilà un panneau suspendu en l'air. Allons dans la colonne de roite et revenons aux Textures Classes/Textures/NaliCast/Door et prenons SDOORN. Dans la vue 3D, BG sur une face de la "porte" puis SHIFT+B pour sélectionner toutes les faces. Recliquer sur la texture choisie qui recouvre alors notre porte.

Plusieurs méthodes sont alors possibles, mais qui reviennent toutes à obtenir une intersection de la forme particulière avec un cube qui l'englobe, pour produitre une forme bien définie.
Sélectionner la FA. Choisir dans le menu Reset/Reset scaling (par précaution). BD sur le bouton cube, dans les Cube properties redéfinir les trois dimensions avec la valeur de 160. Placer la FA ainsi obtenue de façon à ce que sons centre coïncide avec celui de la forme de la porte. Appuyer sur le bouton "intersect".
La FA entoure maintenant exactement la forme de la porte dont elle contient les attributs de textures.

Dans les fenêtre 2D, replacer cette forme à la position de la porte. BD sur un coin pour l'aligner et placer le pivot. Réinstaller le mobile comme précédemment. Effacer le panneau au centre de la pièce. Recompiler. Un mobile n'est jamais visible dans la f3d sous forme solide, mais seulement en fils-de-fer fushia.

Pour éviter ce problème de la porte qui bute sur le joueur et n'avoir pas à faire des contorsions rapides pour tenter de l'esquiver au moment où elle s'ouvre dans le "mauvais" sens, il y a deux possibilités :
- Soit à modifier la propriété
Mover Properties/Mover/MoverEncroachType/ME_ReturnWhenEncroach-->ME_IgnoreWhenEncroach. La porte est alors indifférente aux obstacles et s'ouvre en passant au besoin à travers le coprs du joueur. Efficace lais peu réaliste.
- Soit à placer devant la porte un déclencheur qui l'ouvre un peu en avance.

Sélectionnons le mobile et déplaçons-le carrément au milieu du couloir pour avoir un peu de recul. TOUJOURS RECOMPILER le niveau après ce genre de manipulation. Seulement voilà, la porte en s'ouvrant rentre maintenant dans le mur ! Bon, il suffit de redéfinir la position 2 du mobile : BD/Mover Keyframe/Key 1 puis BD+CTRL pour ajuster la rotation.

Sélectionner maintenant dans le catalogue Classes/*Triggers/*Trigger. BD dans la vue 3d à un bout du couloir et choisir l'option "Add Trigger here" apparue dans la deuxième ligne. L'icône de la gâchette apparaît . La sélectionner dans la vue d'en haut avec le BD et choisir "Trigger Properties". Cliquer ensuite sur "Event" et donner à ce champ la valeur "porte".
BG pour désélectionner puis BD sur le contour du mobile et choisir "Mover Properties".
Donner comme valeur de "Tag" la même chaîne littérale "porte". A ce moment, une ligne rouge apparaît qui relie la gâchette et sa cible, la porte. Nous avons choisi le mot "porte" par commodité, n'importe quel nom conviendrait pourvu que ce soit le même, et qu'il soit unique dans le niveau. Il faut encore préciser une chose dans les propriétés du mobile : Mover Properties/Object/Initialstate/BumpOpeneTimed-->TriggerOpenTimed. Ceci afin d'indiquer que le mobile doit réagir, non pas à la proximité du joueur, mais à l'activation d'une gâchette.
Revenons sur la gâchette. Sélectionnons-la avec le BD et choisissons "Duplicate" (Bien veiller à ce qu'il n'y ait qu'un objet sélectionné à la fois). Une copie se place aussitôt à côté. Déplaçons cette copie à l'autre bout du couloir.
Voilà ce que nous obtenons en vue de dessus et latérale.

F8-->CTRL+L-->CRTL+P. Vous voyez que la porte s'ouvre quel que soit le côté d'où on l'aborde, à condition de lui laisser le temps quand on est dans le "mauvais" sens.

On pourrait ne mettre qu'une gâchette au milieu, dans la porte, en lui donnant une rayon de collision suffisant, si nous avions choisi une distance d'activation plus courte.

Allons maintenant dans la pièce "bleue". Réinitialiser la FA. Si on le fait par le menu de la barre principale Brush/Reset/.. Eh bien on n'a pas le choix en fait et le "reset" est global (All), replaçant la FA au point central de la carte. Il faut alors aller la chercher et la ramener là où l'on était Encore une petite imprécision de l'éditeur. Peu importe. Si on effectue cette réinitialisation à partir du menu qui surgit au BD, la FA peut rester à sa place, ce qui est tout de même plus pratique.

Redéfinir les dimensions à h=128, W et B=384. Plaçons la FA au centre de la pièce bleue et dans la vue latérale, descendons-la de manière à ce que son plafond corresponde au plancher de la pièce.
Dans le catalogue à droite, choisissons une texture : Textures/NaliCast/WMCS. Appuer sur le bouton d'excavation . LA piscine est creusée, mais elle est vide. Pour la remplir, nous allons ajouter un niveau liquide grâce à une feuille . On en définit les propriétés par BD/Sheet Properties
Choisir l'alignement horizontal (Floor/Ceiling), et 384 comme dimensions du carré.Appuyer sur "Build" et "Close". Le niveau est prêt. Positionnons-le juste à une case (16 unités) au-dessous du sol de la pièce.

Maintenant il va falloir choisir une texture liquide. Ouvrir le catalogue Textures : Load et charger "Liquids.utx". Sélectionnez selon votre goût une de ces textures animées.

Appuyer maintenant sur le bouton "Add Special" et choisir "water" dans le menu affiché
Les propriétés du "film liquide" sont alors sélectionnées : transparent, bilatéral, non solide, il délimite une zone. Appuyer sur "Add Special" puis sur "Close".

Rien ne se passe ? Mais si : masquez la FA dans une f2d, vous verrez alors une ligne verte qui indique la présence de la feuille. Recompilez le niveau. Maintenant vous voyez la surface de l'eau s'animer.

Pour que l'eau ait une "réalité", il faut encore ajouter quelque chose dans la zone correspondant à la masse liquide : une "ZoneInfo". Prendre dans le catalogue Classes/*Info/*ZoneInfo/WaterZone. Il faut hélas se servir des touches du clavier haut/bas pour rendre cette sélection active. Ensuite BD dans la f3d et sélectionner la ligne 2 : "Add WaterZone here". L'icône d'information de zone apparaît

On peut recompiler, sauver et tester le niveau. Eh oui, on a une vraie piscine ! Et le bruit avec !
Dans la vue 3d, changeons le mode : mode-->Zone/PortalView. La feuille que nous avons placée délimite en effeet deux zones de couleurs différentes. Elles ont des propriétés différentes, par exemple l'effet de la pesanteur qui n'est pas le même dans et hors de l'eau..

 

Vous vous sentez seul dans ce niveau ? Une présence amicale nous fera du bien. Retournons dans le catalogue. En cliquant sur le + devant info, on replie le menu. Déplier "Pawn" plus bas, puis "ScriptedPawn" et enfin "Nali". Dans la vue 3d, remettre le mode d'affichage dynamique et avec le BD afficher le menu et choisir "AddNali here". Mettez-le hors de l'eau, merci pour lui. Vous venez de donner vie à un indigène à 4 bras.

Recompilez, sauvez et testez. Il vit ! Mais il ne sait pas encore faire grand-chose. Nous allons lui faire parcourir notre petit domaine. Pour qu'une créature, qu'il s'agise d'un gentil Nali ou d'une brute épaisse, ou encore des "bots" que l'on ajoutera dans dans un niveau "Deathmatch", puisse utiliser intelligemment l'espace, il faut baliser celui-ci en déployant des "NavigationPoints" que nous traduisons pas "balises". Aller dasn le catalogue Cleasses/*NavigationPoint/*PatrolPoint pour ce cas précis. Toujours la petite corvée de valider la sélection en déplaçant et replaçant le curseur avec les flèches du clavier. BD dans la f3d et "Add PaprolPoint here". Placez ces balises tout autour en vous déplaçant dans la f3d, comme indiqué sur le plan.

Ensuite il faut BD sur une de ces balises et sélectionner l'option "Select all PatrolPoint actors". Toutes les balises sont colorées en vert et prolongées par une flèche rouge. Cette flèche indique l'orientation du personnage lorsqu'il sera à ce point. Vous pouvez modifier chacune de ces balises en la sélectionnant individuellement (BG dans zone vide pour tout désélectionner puis BG ou mieux BD sur la balise). CTRL+BD et déplacements de la souris font leur office. Mais pour que le chemin que vous avez jalonné soit actif, il faut donner des valeurs qui permettent de les chaîner. Dans l'ordre indiqué sur le plan, on va cliquer successivement avec le BD sur les balises et ouvrir les "PatrolPoint Properties".

Deux champs sont importants : le "Tag" qui contient le nom de la balise et le "Nextpatrol" qui contient le nom de la balise suivante dans le chemin.
Tout simplement, la balise 1 débute la série, indique la balise 2, qui indique la 3 et ainsi de suite. La dernière balise, la 11, indique pour suivante la 1, fermant la boucle.

Il faut maintenant donner l'ordre au Nali de se remuer un peu. Désélectionner tout, BD sur le Nali et ouvrir les "Nali propriétés". Dérouler "Orders" et écrire dans le champ "Orders", EXACTEMENT "Patroling", sans les guillemets, bien sûr. Fermez la fenêtre, désélectionnez tout.

Il faut encore modifier les propriétés des gâchettes qui pour l'instant ne sont sensibles par défaut qu'au passage du joueur.

BG sur l'une d'elles, et en gardant la touche CTRL enfoncée, BG sur l'autre. On peut ainsi de façon générale sélectionner précisment plusieurs items. BD sur l'un des deux qui confirme que deux sont bien sélectionnés. Choisir "Trigger Properties (2 selected). Modifier le champ Trigger/TriggerType/TT_PlayerProximity" en "TT_AnyProximity". Comme ça le Nali aussi aura la clé pour ouvrir la porte !
Maintenant on peut recompiler, sauver, et tester le niveau suivant la séquence bien rodée je pense :
F8 (Rebuild, Close) CTRL+L CTRL+P.

Prenez un bain dans la piscine et regarder le Nali qui doit venir de l'autre pièce. La porte s'ouvre à son passage. Il fait le tour de la piscine et retourne poursuivre une ronde infinie. Il marque un petit temps d'arrêt sur chacune des balises. Nous verrons plus tard toutes les ressources cachées pour des scenari plus élaborés. En attendant désélectionnez tout, comme après chaque opération, et je ne le répèterai plus.

On aurait pu aussi, au lieu de créer un chemin de navigation, se contenter de changer un des paramètres du Nali (Naliproperties/Orders-->Roaming), ce qui lui aurait intimé l'ordre de déambuler de façon aléatoire dans le niveau. Le chemin créé est valable pour toutes les créatures du niveau et les "bots" éventuels.

Et si le bassin se trouvait dans une petite cour, à ciel ouvert ?