PORTAILS
Les Portails (Portals) sont de petites zones qui permettent non seulement de se téléporter d'une zone à une autre, mais aussi de voir au travers ce qui se trouve dans cette zone, comme s'il se fût agi d'une porte ouverte. Les projectiles passent également par le même chemin. Cette zone de téléport (Warp Zone) est largement utilisée tant dans les niveaux en solo que dans les matchs à mort, mais est assez délicate à réaliser.
Le Portail se compose en
fait de deux petites zones identiques dans leur composition, leurs textures,
leurs dimensions, qui sont placées dans deux zones différentes
et distantes que l'on veut relier. Elles peuvent aussi se trouver à des
endroits plus ou moins éloignés d'une même zone. On réservera
le nom de portail à la feuille qui limite la zone de téléport
et qui constitue pratiquement sa porte d'accès.
La zone de transit peut
être placée dans un mur, comme on le ferait d'une porte, mais elle
peut aussi être installée au milieu d'un espace, comme un isoloir,
un placard.. Elle ne possède donc qu'un accès.
Pour tester le mécanisme,
construire deux salles distinctes, de proportions et de textures différentes,
éclairées aussi de couleurs différentes, pour que le contraste
soit bien visible. Les deux salles doivent être vastes pour qu'on ne soit
pas gêné. Placer un point de départ pour le joueur (PlayerStart).
Contruire maintenant une boite dont les dimensions intérieures doivent pouvoir contenir les créatures que l'on veut faire transiter. Pour le joueur lui-même, un cube de 128 sera confortable. Le plus simple est de créer un cube de 160, de l'ajouter sur le sol d'une salle, puis de réduite la FA à un parallélipipède de 128*128*160, qu'on place de telle manière qu'on puisse excaver le premier cube en laissant un côté ouvert. Intersecter la FA dans le premier cube et soustraire.
Redimensionner la FA pour qu'elle englobe cette construction. Intersecter pour obtenir une forme fille qui est une copie parfaite de cette construction. Se placer dans l'autre salle, et ajouter.
Pour transformer ces deux
renfoncements en zones, il faut les délimiter par une feuille 2D que
l'on va placer à 8 unités du bord pour fermer la paroi qui a été
évidée. On ajoute cette feuille en tant que "SpecialBrush"="ZonePortal",
dans chacune des deux ouvertures. Peu importe la texture de cette feuille, elle
ne sera pas visible puisqu'on verra ce qui se passe dans l'autre pièce.
Par contre, il est préférable pour éviter toute erreur
que cette texture aie les même dimensions que la feuille sur laquelle
elle s'applique. Il est commode de faire du 256*256 ;ces dimensions conviennent
aux joueurs comme aux créatures.
Attention : le truc ici est que la feuille 2D est appliquée à la seconde boite après une rotation de 180°. Si on effectue d'emblée cette rotation en plaçant la seconde boite, il ne faut pas bien sûr l'appliquer à la feuille 2D qui sera donc déplacée par simple translation après qu'on ait posé la première porte de zone. Une fois l'opération accomplie, l'angle entre les deux boîtes peut devenir quelconque. |
Après avoir recompilé le niveau, on peut vérifier dans la f3d en mode "viewzone" que les zones obtenues ont bien des couleurs différentes.
Pour leur attribuer les
propriétés de téléport/télévue, il
faut les définir en plaçant dans chacune une icône "WarpZoneInfo"
que l'on trouve dans le catalogue à Classes/Info/ZoneInfo/WarpZoneInfo.
Dans la fenêtre de
propriétés de cet item dans la première pièce, préciser
les valeurs de deux champs :
- OtherSideURL : nom de la destination, par exemple Z2
- ThisTag : nom de cet endroit, par exemple Z1
- destinations : dans le cas où on veut que ce portail donne accès
successivement à plusieurs autres (jusqu'à 8 au total), on entre
leur "Tag" dans les champs.
Il faut alors une gâchette ayant pour "Event" le "Tag"
de ce portail (celui qui se trouve dans "Events/Tag !!) qui actionne ainsi
le changement de destination accompagné bien sûr du changement
d'affichage correspondant. Le sens se fait du bas de la liste vers le haut,
soit de la position 7 à la position 0.
Recompiler, sauver et tester. On doit pouvoir se déplacer tout autour de la cabine, regarder par l'ouverture ce qui se trouve dans l'autre salle, et s'y rendre en entrant dans cette cabine.
En fait il n'est pas nécessaire, comme je l'ai lu dans certains tutoriaux, de modifier le paramètre "bDirectional" dans les propriétés avancées. De même, il n'est pas nécessaire d'avoir une rotation de 180° d'une cabine par rapport à l'autre. Un angle quelconque fonctionne. En revanche, il est indispensable que les deux cabines aient les mêmes dimensions intérieures et que la feuille de délimitation de zone ait été correctement initialisée avant d'être placée. Il suffit en effet qu'il y ait un alignement de texture différent d'une feuille à l'autre pour que le résultat soit aléatoire. En outre, la surface d'une feuille est inversée par rapport à l'autre. Pour éviter toute erreur, procéder comme suit :
1 - créer un vestibule, le copier dans la FA, construire son double après rotation à 180° (provisoirement).
2 - Placer la feuille qui
délimite la zone à l'issue du premier vestibule. En faire autant
pour le second, mais SANS opérer de rotation. Les feuilles 2D doivent
être en miroir l'une de l'autre.
4 - Placer les "warpzoneinfo"
et recompiler.
3 - Sélectionner l'ensemble composé par un vestibule et son portail, et à ce moment là seulement l'orienter comme on veut. Le problème qui se pose, c'est que les formes originelles qui le composent (lorsqu'il n'est pas obtenu par intersection) se dissocient lors de la rotation. Le plus simple est alors d'intersecter chaque boîte séparément, de l'effacer, et de la remplacer par la forme résultante qu'il sera possible d'orienter cette fois sans perdre ses rigoureuses dimensions.
Cela dit, il m'est arrivé, notamment dans CTF-AwazMir (Ued2), d'avoir des "HOM" récurents après des modifications de la carte suivies de recompilations complètes. Après avoir vainement cherché l'erreur, je me suis aperçu que ces anomalies disparaissaient en recompilant après que tout soit terminé, et en sus du processus habituel, seulement la géométrie et les lumières.. et ça marche..
Dans UED2, une WarpZone peut donner successivement accès à une série de WarpZones en activant l'item WarpZoneInfo :
chaque activation du trigger T entraîne un changement de destination de 1 à 8, puis on retourne à la position 1 et la boucle recommence. W0 est la warpzone de départ et Wn les warpzones de destination.
Pour la réaliser, il faut construire deux zones comme ci-dessus, de taille plus réduite pour correspondre à celle d'un écran video.
Devant la boîte qui sera du côté de l'écran de contrôle, on placera un ou deux "BlockAll" ou un "InvisibleCollisionHull" pour éviter que les projectiles, voire les joueurs, ne passent à travers !
Et devant la boîte du côté de la caméra, on placera une feuille opaque, non solide, unilatérale, orientée de telle façon que les arrivants ne puissent pas voir ce qui se passe du côté de l'écran ! Cette feuille à un seul côté reste transparente vue par la caméra.
Un portail est lié à un autre portail, mais en fait ces relations peuvent être mutilples : plusieurs portails peuvent aboutir à une même terminaison.
Un portail invisible, c'est-à-dire
dont on aura rendu toutes les surfaces invisibles outre la feuille 2D, sera
:
- Non fonctionnel après recompilation. Si un seul portail est traité
ainsi, il peut encore servir de destination.
- Fonctionnel s'il n'y a pas recompilation après qu'on ait traité
les surfaces.
Un portail peut être constitué par une zone invisible et non solide.
Chacune de ses faces donne alors une vue correspondant à son orientation,
et le transfert est orienté lui aussi. Suivant l'orientation, des effets
de miroirs curieux peuvent résulter (le joueur se voit lui-même
de dos..). Cette zone peut avoir une épaisseur très faible (4
u). Il est alors souhaitable de réduire l'échelle des icônes
pour les placer correctement. Le joueur franchit cette mince paroi dans n'importequel
sens.
Deux portails liés et placés face à face entraînent un effet de miroir avec vue à l'infini.
Pour que les portails soient utilisés par les robots, il faut placer un "PathNode" à l'intérieur ou mieux à chaque issue devant la sortie. On peut aussi placer des friandises (munitions, armes..) de chaque côté pour les motiver.