Une zone, c'est une région de la carte isolée du reste. Si par exemple on construit deux salle indépendantes, après compilation on obtient deux zones distinctes qui peuvent recevoir chacune, via l'item "ZoneInfo", des propriétés définies différemment pour l'éclairage, la pesanteur, les effets spéciaux comme le brouillard, l'écho, etc.. C'est de cette manière par exemple qu'on crée une piscine où la surface de l'eau sépare le milieu aérien du milieu aquatique.
Les zones sont visibles
dans l'éditeur dans le mode d'affichage spécifique dans la fenêtre
3D :
On voit bien là
l'intérêt qu'il pourrait y avoir, mais à moins de se téléporter
d'une zone dans l'autre, comment maintenir cette division fonctionnelle si les
deux salles sont reliées par un couloir ? Il suffit de placer dans ce
couloir une séparation (occlusion totale!) réalisée par
une feuille 2D qu'on ajoute avec
le bouton "AddSpecialBrush"
en
lui donnant la propriété "ZonePortal".
En fait seul
le paramètre "ZonePortal" est nécessaire. Par exemple
si on veut que cette forme serve aussi de vitre, on la rendra visible.
La feuille peut être
ajustée à l'ouverture ou déborder en zone vierge. En fait,
on pourrait utiliser une forme 3D pourvu qu'elle soit ajoutée dans le
niveau de la même manière via l'outil "AddSpecialBrush".
On définit alors une zone supplémentaire de transition.
Ajoutons deux "ZoneInfo"
à chaque bout de cette carte en définissant la couleur rouge pour
l'un et bleu pour l'autre. Lorsqu'on est dans le jeu, chaque zone a une lumière
colorée propre. La zone de transition pour laquelle on n'a ici rien défini
est noire. Lorsq'on s'y trouve, on voit bien ce qu'il y a dans les autres, mais
à moins de placer des sources lumineuses, rien dans la zone noire ne
peut être visible.
Evidemment,
plus la surface de séparation est importante, comme par exemple un vaste
plan d'eau, le cloisonnement d'un espace vaste pour isoler des effets de lumière,
plus le moteur est sollicité pour afficher en même temps tous ces
effets.
Si l'on veut qu'une zone
ait des propriétés spécifiques comme par exemple de milieu
aquatique, d'éclairage, de réverbération, il faut y ajouter
un acteur "ZoneInfo"
en plaçant l'icône n'importe où DANS l'espace de cette zone.
En placer UNE SEULE par zone. On la trouve dans le catalogue : Classes/Info/ZoneInfo.
Si le niveau ne comporte qu'une seule zone, les propriétés peuvent
être définies dans "LevelProperties/ZoneInfo..ZoneLight".
Les propriétés de chaque zone définie dans une carte sont
prioritaires sur les définitions données pour l'ensemble de la
carte dans "LevelProperties/ZoneInfo..ZoneLight".
D'une façon générale, les propriétés de zone sont définies a priori. Elles ne sont pas sensibles aux déclencheurs, à l'exception de la "PressureZone" qui doit être activée. Une seule propriété fait aussi exception : bPainZone (faux --> vrai). L'"Event" du déclencheur doit être égal au "Tag" défini dans "ZoneTag".
Les
propriétés sont accessibles par BD sur l'icône qui ouvre
la fenêtre des propriétés de zone :
Paramètres :
- bDestructive
: si vrai, les restes et carcasses diverses ne traînent pas
- bFogZone : si vrai, l'effet de brouillard est possible à partir
des sources de lumière. Si on veut que le brouillard soit visible dans
une zone à partir d'une autre zone, ce paramètre doit y être
activé
- bKillZone : Tue celui qui y entre (ne fonctionne pas)
- bNeutralZone : le joueur ne peut y subir de blessure du fait des propriétés
de cette zone
- bGravityZone : utilise le paramètre "ZoneGravity".
Pas d'effet propore
- bPainZone : Elle est inflige des blessures ; quantité définie
dans "DamagPerSec".
- bDestructive : elle détruit les carcasses
- bMoveProjectile : permet aux projectiles d'avoir leur vitesse affectée
par ZoneVelocity.
- bNoInventory : empêche que des objets d'inventaire puissent subsister
dans cette zone
-
ZoneTag : définit l'étiquette d'une
zone qu'on pourra activer par une gâchette "ZoneTrigger".
- ZoneFog et ZoneFlash dans ZoneLight :
permettent de changer l'aspect de brouillard coloré dans la zone concernée.
- ZoneTerminalVelocity : change la vitesse
de chute maximale dans la zone.
- bWaterZone
: définit un milieu aquatique. Bruits d'éclaboussures à
l'entrée et à la sortie de la zone. Comportement de nage à
l'intérieur. Il est préférable que la surface soit transparente.
- DamagePerSec : quantité de dommages
infligés par seconde. Par contre, une valeur négative donne des
points de vie (bPainZone doit être vrai).
- DamageString
: message affiché
- DamageType : concerne le comportement de l'écran et de l'affichage
- EntryActor : acteur qui apparaît quand le joueur entre dans la zone
(avec bWater vrai) - idem pour ExitActor
- EntrySound : son audible quand le joueur entre dans la zone (avec bWater vrai)
- Idem pour ExitSound
- MaxCarcasses : combien de débris
organiques peuvent être affichés en même temps
- ZoneGroundFriction : définit la
friction au sol : 4 par défaut. Des valeurs négatives élevées
correspondent à un sol glissant.
- ZoneFluidFriction : viscosité d'un
milieu liquide, qui définit bien sûr la vitesse de progression.
- ZoneGravity : Par défaut, la gravité
s'exerce verticalement sur l'axe Z donc, où elle prend la valeur -950.
La pomme tombe verticalement sur la tête de Newton.. Mais si l'on veut
figurer un courant, ou pourra donner des valeurs sur les autres axes :
- ZonePlayerEvent
: Evènement déclenché lorsqu'un joueur entre dans la zone
- ZoneTerminalVelocity : Vitesse de la chute, supplante la valeur de la gravité
- ZoneVelocity : ajoute une vitesse constante à tout ce qui bouge dans
la zone
-
AmbientBrightness : valeur lumineuse par défaut
- AmbientHue : coloration par défaut de la lumière ambiante
- AmbientSaturation : degré d'application de cette coloration (max à
0)
- TexUPanSpeed : affecte la vitesse de défilement des textures horizontalement
(paramètre USpan des propriétés de surfaces)
- TexVPanSpeed : idem pour le défilement horizontal
- ViewFlash : 0 à
-1 en association avec ViewFog contrôle la luminosité
- ViewFog : 0 à -1
-
bReverbZone : active/inactive l'écho dans cette zone
- CutOffHz : exclut les sons plus graves (fréquence plus faible que cette
limite)
- Delay : délai d'apparition de l'écho
- Gain : gain en volume de chaque écho
- MasterGain : gain global
- SpeedOfSound : à quelle vitesse jouer le son
-CloudZone : mortelle d'emblée.. Détruit aussi tout ce qui passe dans la zone : créatures, objets, et donc projectiles. Ceci peut être utilisé pour empêcher l'impact des projectiles sur des murs qui afficheraient le contenu de la boîte à ciel.
-KillingField (UT) : Ne fonctionne pas.
-LavaZone : Milieu volcanique de lave en fusion. Vite mortelle (dommages de 40 pdv par seconde). Message : "Burned", brûlé..
-LevelInfo : en fait placée automatiquement par le programme. On n'a pas à s'en préoccuper. Contient les spécifications du type de jeu.
-NitrogenZone : Milieu d'azote liquide.. très toxique (20pdv par seconde). Message : "Frozen", gelé..
-PressureZone
(UT) : Lorsqu'elle est activée par un déclencheur (l'action peut
être répétée), tout joueur à l'intérieur
est éclaté.. Elle est paramétrable notamment :
..........DieDrawScale : la taille du corps du joueur
..........DieFatness : la corpulence
..........DieFOV : facteur de zoom (90 = sans changement)
..........KillTime : délai avant de mourir
Le jeu mémorise qui déclenche l'action et qui la subit, ce qui
compte dans les points de jeu.
-SkyZone : surtout utilisé dans la boîte à ciel. Fonctionne comme une caméra panoramique dont l'image est projetée sur les surfaces qui ont l'attribut "FakeBackdrop" coché.
-SlimeZone : Milieu liquide toxique et vite mortel (-40 pdv par seconde).
-TarZone : Milieu liquide visqueux où l'on progresse lentement. Trop lentement..
-TeleporterZone : lorsque le joueur y entre, il est téléporté par le téléporteur défini dans "TeleporterZones TeleporterTag".
-ToggleZoneInfo : Ne fonctionne pas.
-VacuumZone : Mort subite..
-WarpZoneInfo : définit la zone de portail qui permet de passer d'un endroit à un autre, comme par téléport, mais avec en plus la possibilité de voir à travers le portail ce qui se trouve dans l'autre région. Voir à Portails pour le détail.
-WaterZone : milieu liquide où l'on se déplace en nageant et où on peut se noyer si on oublie de respirer. Cet inconvénienbt peut être paramétré à l'envers pour en faire une eau de vie qui régénère.
Lorsqu'on n'utilise pas de zone, ou à l'intérieur
d'une grande zone, il peut être utile de désigner un endroit avec
un nom :
- LocationName : le nom de ce lieu-dit
- Radius : l'aire désignée par ce nom
On a vu que le découpage d'une carte en zones permettait d'y définir des propriétés variées d'une région à l'autre. Mais ce découpage permet aussi au moteur du jeu de ne pas anticiper le calcul du rendu visuel d'une zone tant qu'on n'y a pas accès (visuellement ou physiquement). Il en résulte un accroissement relatif des performances d'affichage. C'est particulièrement important si on recherche plus de fluidité dans le jeu.
Dans le cas où le souci d'économie prédomine, et que l'on veut éviter que le moteur ait à calculer d'avance le rendu d'une zone, on optimisera ceci en plaçant les séparations dans des passages étroits dont les détours ou l'incurvation ou encore la présence de portes ne pemettront pas de voir directement la zone en question.
Ceci devient capital pour des cartes dont la dimension atteint 10 à 20 000 polygones. Il ne faut alors pas hésiter à cloisonner : Un niveau peut comporter jusqu'à 64 zones.
Pour tester ce problème du rendu, j'ai comparé deux situation d'une même carte : avec et sans zone. Il s'agissait d'une carte moyenne de 5500 polys. Le test n'a pas donné les résultats que j'attendais avec une absence de différence significative. Je compte retenter l'expérience prochainement ...