Les WarpZones
Introduction
Pour un jeu qui s'appelle Unreal, il est tentant de créer des maps sans gravitées, où les gens marchent sur les murs, etc. Mais bien sur, cela exige pas mal de techniques.
Pour repousser les limites de la réalité et du bon sens, il existe un système nommé "WarpZones", qui permet d'enchainer des pièces de façon parfaitement fluide même si elles n'ont aucun lien entre elles, et cela en quelques secondes à peine.
Le fonctionnement d'une Warpzone
Qu'est-ce qu'une Warpzone ? C'est avant tout une zone délimité de la carte dans laquelle est placée non pas une zoneinfo habituelle, mais une zoneinfo particulière et modifiée appelée WarpzoneInfo. Cet acteur est une sorte de teleporteur de masse : elle ne possède pas de rayon de téléportation, mais téléporte tout ce qui entre dans sa zone vers une autre WarpZoneInfo qui lui a été indiqué. Jusque là, rien de différent d'un téléporteur.
Mais en fait, c'est très différent : un téléporteur est un actor invisible qui déplace le joueur d'un point à un autre de la carte sans préavis. La WarpZone est un PORTAIL vers l'autre zone : en regardant vers la zoneinfo, le joueur voit l'endroit où il va arriver, et peu tirer à travers. La Warpzone permet de donner l'illusion de continuité parfaite même quand les deux pièces sont parfaitement séparées, permettant de défier non seulement les lois élémentaires de la physique (un tout petit cube dans lequel se trouve une salle complète par exemple), mais aussi, en jouant sur les rotations de portals, de coller des pièces par le plafond pour que les joueurs d'une pièce aient des ennemis se déplaçant au dessus d'eux, tête en bas, voir sur les murs.
Au travail
Comme d'habitude avec l'Unreal Engine, la bonne surprise est que l'effet est très complexe, mais que le moteur se charge de tout à partir de manipulations simple du mapper.
Les pièces bouclées
Le premier effet intéressant que l'on peu obtenir avec des WarpZones est celui des pièces "bouclées". C'est à dire une pièce dans laquelle une ouverture donne sur un autre... Dans la même pièce !
Dans cette grande salle, deux portes, plus ou moins en face l'une de l'autre. J'ai laissé un petit décalage, et vous allez comprendre pourquoi dans quelques temps.
Pour créer une Warpzone, il faut commencer par délimiter les zones. Pour cela, nous allons placer un portal. Cliquez sur le bouton "sheet" pour créer une feuille, et utilisez le Vertex-Editing pour la modifier de façon à ce qu'elle bouche hermétiquement l'ouverture :
Maintenant, il faut savoir que pour qu'une warpzone fonctionne correctement (pour qu'on puisse voir de l'autre coté), il faut que la texture appliquée sur le zone-portal soit transparente car elle est visible dans le jeu. Dans les versions précédentes du moteur, la texture n'était pas affichée, et on voyait par défaut de l'autre coté.
Pour cela, il va falloir utiliser une texture totalement noire et lui donner comme propriété particulière la transparence du noir. Pour cela, nous allons créer une texture nouvelle.
Dans le Texture Browser, faites File=>New (fichier=>Nouveau). Choisissez comme package MyLevel, Group Warplayer, et nom Warpzone (par exemple). Dans le champ "MaterialClass", choisissez dans le menu déroulant FinalBlend. Ensuite, cliquez sur "New".
Tout en gardant ouverte la fenêtre de propriétés qui s'ouvre, allez dans le package de textures UCGeneric, group Solid Colours. Cliquez sur la texture Black*.
Dans la fenêtre de propriétés de votre texture toute nouvelle, cliquez à coté du champ "material" sur le bouton "util". La texture noire est maintenant prête à être paramétrée pour devenir invisible. Changez pour cela le champ "Frame Buffering" en "FB_Brighten".
Maintenant, fermez la fenêtre de propriété, et allez dans le package MyLevel pour sélectionner votre belle texture invisible.
Ajoutez maintenant votre sheet en tant que Zone Portal. Une fois que ce sera fait, dupliquez votre sheet de et ajoutez-la dans l'autre entrée, toujours en faisant en sorte que la sheet bouche le passage de manière étanche (vous pouvez pour cela faire une sheet plus grande qui dépasse des dimensions de l'ouverture :
Il ne reste plus qu'à poser les actors WarpZoneInfo, qui se trouvent dans l'actor browser sous la ZoneInfo :
Placez-en un dans une des deux zones que vous avez créé. Dans ses propriétés, observez l'onglet "WarpZoneInfo".
Ce n'est pas dur, il n'y a que quatre propriétés, et les noms sont assez explicites :
BNoTelefrag : Si cette propriété est à Vrai, des joueurs pourront traverser simultanément la warpzone. Si elle est mise à Faux, un des deux joueurs sera pulvérisé par l'autre au moment où il se matérialisera.
Dans notre cas, nous mettrons cette propriété à Vrai pour éviter tout carnage stupide.
Destinations : Cette propriété devrait permettre d'alterner les destinations. On ne l'utilise quasiment jamais avec des WarpZones.
OtherSideURL Il va falloir ici mettre le tag de la Warpzone qui servira de destination. Nous choisirons de mettre "Warpdest1" (sans les guillemets).
This Tag : Dans ce champ, on paramètre le tag de la warpZoneinfo actuelle. Nous mettrons "Warpdest2" (sans les guillemets).
Et ensuite ? Il suffit de dupliquer la WarpZoneInfo (ctrl+W), de la déplacer dans l'autre zone et d'inverser les champs "Warpdest1" et "Warpdest2". L'effet est prêt. Ajoutez un playerStart et testez la map :
Comme vous pouvez le voir, la salle se prolonge maintenant elle-même. Si vous passez le jeu en troisième personne (F4), vous pourrez même vous voir. Mais si vous regardez bien, vous verrez que la pièce se prolonge mais pas indéfiniment : à partir d'un certain nombre, un trou bsp se fait voir. En effet, vous ne pouvez pas voir à travers plus d'un certain nombre de WarpZones. Dans la mesure du possible, essayez d'empêcher les lignes de vue d'une warpzone sur une autre, car cela entraine ce genre de problèmes.
De plus, il se peut que votre pièce ne se répète pas du tout et laisse à la place un seul grand trou BSP : cela est du à l'orientation de votre sheet : en effet, lorsque vous ajoutez votre première sheet, le moteur garde son orientation en mémoire. Or, si vous entrez dans une warpzone par une face d'une sheet, vous devez ressortir par la face opposée de l'autre sheet. Vous suivez ? Non ? Normal, c'est assez difficile à expliquer.
Prenons par exemple la pièce que nous venons de bâtir. Si vous avez fait pivoter la sheet de 180° avant de l'ajouter la deuxième fois, les ouvertures étant dans des sens opposées l'une à l'autre, la sheet va se retrouver Dans le même sens que l'autre relativement à son ouverture. Si les deux ouvertures étaient parallèles, c'est à dire que l'on rentrerait par le nord pour sortir par le sud, il faudrait faire pivoter la deuxième sheet de 180°. Dans notre cas, nous entrons par le nord et ressortons EGALEMENT par le nord. Donc la sheet, déplacée normalement, présente le sens de sortie opposé au sens d'entrée de la première sheet.
Comme une image vaut mieux que mille mots, voici l'explication visuelle plutôt que verbale :
Voici comment il faut faire. Le joueur suit le chemin 1 et ressort en 2. La sheet est orienté vers l'intérieur à son point de départ, alors qu'elle est orientée vers l'extérieur à son point d'arrivée. On aurait pu inverser l'orientation des sheets, et cela n'aurait rien changé, mais il aurait fallu changer l'orientation des Deux sheets. Si on en tourne une de 180°, on aura un trou bsp. Il faut alors sois la retourner, soit tourner l'autre.
Voici la mauvaise situation, construire votre map ainsi donnera des trous BSP à la place des warpzones :
Dans un cas comme ça, vous aurez des trous BSP. La raison ? La feuille du bas est orientée vers l'intérieur de la zone, principale de la map, mais la feuille du haut aussi. Elles pointent dans la même direction, le moteur essaye donc de rendre ce qu'il y a derrière elles : rien. De plus, le joueur qui part de 1 arrivera dans le mauvais sens en 2. Comme il avance, il va se retrouver instantanément en train de faire comme s'il faisait le chemin 3 et ressortir en 4. Si vous manquez de chance, il y aura la même chose en 4 et le joueur sera bloqué à la jonction entre les deux warpzones, pris dans le Warp indéfiniment, à moins qu'il ne s'arrête exactement sur la jonction de la zone d'où il est parti en 1 et fasse machine arrière.
Ceci est pour ce genre de Warpzones qui se prolongent d'elle mêmes. Voyons maintenant le cas des Warpzones parallèles : le problème est exactement inversé :
Ici, la situation est bonne : en effet, le joueur rentre dans la warpzone par la face positive et ressort par la face négative. Il pourrait faire l'inverse, mais le principal est que le joueur sorte par la face opposée d'où il est entré.
Les boites géantes
Pour ceux qui connaissent Doctor Who, cette partie peu vous permettre de recréer l'effet de leur QG. Pour ceux qui ne connaissent pas, eh bien leur fameuse base d'opération était une cabine téléphonique toute à fait normal, mis à part qu'elle contenait une salle de douze mètres, tout en étant pas plus grande qu'une cabine normale de l'extérieur.
Avec les Warpzones rien de plus facile : créez une salle de 384*1024*1024, et ajoutez dedans, collé au sol, un cube de 256*256*256. Ce sera notre cabine téléphonique à nous :
Maintenant, soustrayez dans ce cube de 256 de coté, un cube plus petit de 240 de haut et de 224 de longueur et de largeur. Soustrayez le en le collant au sol et à un des cotés :
Maintenant, soustrayez ailleurs dans votre map une pièce de 384*1024*1024. Ensuite, ajoutez contre une des parois, une planche de 256*256 et soustrayez à travers cet épaisseur, un cube de 240*224*224 :
Maintenant, placez des sheets hermétiques et placez des WarpZoneInfo. Ensuite, testez votre map depuis le premier cube : cela défie toutes les lois de la physique : vous avez une pièce de douze mètres dans une boite qui n'en fait que 2 !
Les projectiles à travers le Warp
Il est à noter qu'en appuyant sur la touche tab en cours de jeu, et en tapant "loaded" (sans les guillemets), vous obtenez toute les armes et 999 munitions pour chacun d'entre elles. Ainsi, vous pourrez tester l'effet des projectiles. Vos roquettes et autres tirs de flak passeront de l'autre coté et poursuivront leur trajectoire de manière parfois assez déroutante. Ainsi, les éclats de flak verront leur trainée jaunâtre étirée à l'extrême pendant un instant, les roquettes tirées en spirale se disperseront dans le plus grand chaos, il est même des cas ou les boules vertes du Link Gun feront deux mètre dans la salle de l'autre coté de la warpzone, repartiront dans l'autre sens, et ce deux ou trois fois de suites.
Quand aux tirs de minigun, de sniper, ils ne passeront pas la Warpzone : seuls les projectiles dont la position est calculé à chaque instant (comme les roquettes etc.) y parviendront : les projectiles dit "instant hit", qui touche immédiatement la zone ciblé sans se soucier de sa distance, ne pourront pas le faire, car le travail de ces vecteurs à travers les warpzones n'est pas supporté pour ce genre de projectiles.
Vous savez maintenant tout ce qu'il y a à savoir sur les Warpzones : leur construction, leur fonctionnement. Vous pouvez créer des maps délirantes avec ce procédé, ou les utiliser simplement pour donner du piquant à une partie. Pour trouver des exemples très ludiques, vous pouvez aller voir sur les sites suivant :
Unreal Realm Of Concepts est un site très intéressant pour les warpzone sous Unreal 1 (en anglais).
Site d'Amisa, pionnier des tutoriaux d'Unreal, la partie "mes cartes" regroupe plusieurs de ses créations utilisant souvent des WarpZones et des systèmes complexe de cartes où la position des joueurs est indiqué etc.