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 ?