Chemins de navigation dans Unreal Tournament :

Par rapport à ce qui était vu pour Unreal 1, des points spécifiques sont utilisés pour permettre aux robots de se repérer dans les différents types de jeux :



Je vais détailler ceux que j'ai cochés.

AlternatePath    
 

Dans les cartes de type "Capturer le drapeau", les robots peuvent être incités à utiliser des routes différentes pour accèder à la base ennemie. Cet item doit être placé au niveau des accès à la base ennemie (à la fin de la zone neutre). Les robots choisissent l'un d'eux et ensuite prennent le plus court chemin de ce point au drapeau ennemi.
- Si les routes d'accès ont des longueurs différentes, la valeur de "SelectionWheigh" permet de compenser ces différences en donnant une valeur plus forte au chemin le moins usité
.
- bReturnOnly = vrai indique que cette voie sera choisie par le robot de l'équipe associée à ce point lorsqu'il revient avec le drapeau (utilisateur=robot vassal de cette base).

    Cet item est donc spécifique de la base à laquelle il est associé.
AmbushPoint    
  Pour désigner un point où les robots sont invités à marquer une pause et à guetter l'ennemi pour défendre la zone avoisinante, ou simplement parcequ'il s'agit d'une bonne position de tir. Il s'agit de points non spécifiques car ils n'appartiennent à aucune équipe.
- bSniping = vrai (true) indique que le robot doit tirer à partir de cette position, et non pas aller sus à l'ennemi.
- SightRadius est le rayon à l'intérieur duquel l'ennemi sera aperçu.
     
DefensePoint    
 

Il s'agit également de points particuliers que les robots doivent occuper pour défendre une zone (quand vous donnez l'ordre). Mais ils sont propres à chaque camp.
- FortTag = Tag du FortStandard associé.
- Priority = niveau de priorité par rapport à d'autres DefensePoints.
- Team = le numéro de l'équipe associée (0=rouge, 1=bleu, 2=vert, 3=jaune).

Ces points sont directionnels pour être orientés vers l'endroit où l'adversaire est attendu :)

     
AssaultRandomizer    
 

Utilisé dans les cartes de type 'assaut'. Les robots tendent à choisir la voie la plus courte pour atteindre leur objectif. Ce point placé entre deux PathNodes de cette voie ajoute une valeur définie dans "ToggledCost" qui la pénalise et force ainsi le robot à choisir une autre route. Encore faut-il qu'il n'y ait pas de contournement possible trop près..

Cet item peut être activé/désactivé par une gâchette dont l'"Event" est égal à son "Tag". Il me semble qu'il est initialement inactif (voir exemple).

     
BlockedPath    
 

Dans les cartes de type 'assaut', les robots doivent atteindre dans l'ordre les objectifs, et pour éviter qu'ils ne s'égarent au-delà, il est utile de pouvoir leur fermer temporairement certaines routes en rajoutant une pénalité quasi infinie (extracost=100000000). Ces points sont placés entre deux PathNodes et doivent être désactivés par une gâchette lorsque l'objectif courant est atteint, pour ouvrir la voie à l'étape suivante. Encore faut-il qu'il n'y ait pas de contournement possible trop près..

Cet item désactivé par une gâchette ne peut alors plus resservir. J'ai trouvé dans WIKI un code qui permet de rendre cette action réversible.

     

 

TranslocDest    
 

C'est une catégorie de "LiftCenter" qui n'est pas liée à un mobile. Elle place un raccourci que les robots peuvent emprunter et qui les fait passer instantanément d'un point à l'autre du niveau.
- Au départ on place un "LiftExit"
- A l'arrivée on place un "TranslocDest", à côté d'un autre "LiftExit"
Ces trois points ont le même "LiftTag".

On placera un "TranslocStart" à la place d'un "LiftExit" si on veut que les robots aillent du "TranslocDest" à ce point.

     

 

JumpSpot    
 

C'est une catégorie de "LiftCenter" qui n'est pas liée à un mobile. Ce point doit être placé associé à des "LiftExit" avec le même "LiftTag". Il indique au robot qu'il peut sauter à partir de ce point pour atteindre un autre point relativement peu accessible, en sautant. Il y parvient directement en utilisant son tamponnoir ou grâce à une faible gravité, ou en utilisant des bottes de saut qu'on aura eu le soin de placer dans les environs immédiats.
Le jumpspot est placé à l'arrivée près d'un LiftExit. Un autre LiftExit marque le point de départ.
- bAlwaysAccel : permet au robot d'atteindre à coup sûr le point d'arrivée.

- bImpactJump : les robots pourront utiliser ou non le "ImpactHammer" ou tamponnoir pour sauter.

     

 

ControlPoint

   
  Ce point de navigation utilisé dans les partie de type "Domination" doit être placé près du sol et normalement espacé des autres points de navigation. Son aspect dépend de l'équipe qui en a le contrôle à un moment donné. Des évènements peuvent être associés lorsqu'une équipe prend le contrôle.
- bSelfDisplayed : si vrai c'est l'affichage sous forme d'un grand X qui est visible.
     

 

Teleporter    
 

Tout joueur ou robot qui touche ce point est envoyé au point de destination spécifié dans le champ "URL" où on met le "Tag" du point de destination (un autre teleport). Si ce champ est vide, ce point est utilisé seulement comme point de destination.

La destination peut être dans une autre carte du répertoire MAPS si l'adresse a la forme : nom_de_la_carte#tag?peer
- Le nom de la carte est donné sans l'extension *.unr mais suivi sans espace de #
(exp : macarte2#)
- Le tag est celui du téléport cible (à défaut ce peut être un PlayerStart)
- Peer indique au programme de charger une nouvelle carte (pas nécessaire en fait..)

La destination peut être un serveur sur le Net avec "Unreal://server.domain.com/nomdelacarte/nomduteleport".

Paramètres :
- bEnabled : précise si le téléport est actif ou non (activation par gâchette).
- bChangeYaw : si vrai, le sujet téléporté verra son orientation modifiée et définie par celle de ce point.
- bChangeVelocity : si vrai, le sujet téléporté aura sa vitesse modifiée avec la valeur définie en ce point.

Pour rendre visible ce point, on utilise généralement le VisibleTeleporter (UT) ou une décoration dont on modifie les propriétés :
1 choisir une déco (barrel, UtFlare, TorchFlame, ce que vous voulez..)
2 Dans les propriétés avancées, modifier les paramètres :

- AmbientGlow : 100 par exp
- DrawScale : pas trop petit
- DrawType : DT_Sprite
- Style : Sty_Translucent
- Texture (par exemple sélectionner 'SpaceFx.worm3a')
- bUnlit=vrai
3 rajouter une lumière dans le ton choisi pour éclairer les alentours
4 Placer le teleporter au milieu et laisse mijoter :-)

     

 

FlagBase

   
  Définit la position du drapeau dans les parties de type "Capturer le drapeau".Il doit être bien fiché dans le sol (pas flotter au-dessus sinon il n'est pas reconnu). Il doit y en avoir deux :
- Team = 0 pour l'équipe rouge, 1 pour l'équipe bleue.
     

Liens entre cartes

Le passage d'une carte à une autre dans le cours du jeu en mode joueur solitaire se fait de la même façon pour Unreal et UnrealTournament. Il s'agit d'un mouvement linéaire et non réversible qui utilise l'acteur Teleporter.

Si l'on se souvient de Quake, on passait d'un niveau du jeu à un autre mais le processus était réversible. En revenant dans le niveau précédent, on le trouvait dans l'état où on l'avait laissé, et on pouvait accéder à une autre carte encore, grâce à une clé ramenée de ce périple. Bref, la mémoire des actions était conservée, ce qui n'est pas le cas dans notre affaire. Bien sûr on peut avoir deux versions d'un niveau (comme dans "One Day" pour U1), qui permettent de marquer deux temps différents, le jour et la nuit, mais ce n'est pas satisfaisant si l'on imagine une grande structure subdivisée en niveaux où l'on puisse se déplacer et agir à sa guise, sans ordre prédéfini.

Une telle structure est en effet trop lourde à organiser en une seule carte. Il est plus facile de concevoir des modules limités aisément éditables, sur lesquels on peut fignoler les détails. Du point de vue du joueur, le ralentissement lié au changement de carte n'est pas un gros inconvénient.

Une solution peut être d'utiliser la propriété bEnable des teleports. En gros, à chaque action dans un niveau correspond un couple défini de teleports unidirectionnel dont l'utilisation active l'état correspondant dans le niveau de destination.

Par exemple, je suis dans le niveau A. La sortie est inaccessible, la clé se trouvant dans le niveau B. J'utilise le téleport actif qui me conduit à B. Je prends la clé. C'est-à-dire que je fais disparaître le mobile qui la représente, et que j'active un nouveau téléport, situé au même endroit que le téléport par lequel je suis venu, et je retourne en A avec la clé, mais ce mouvement là m'amène sur un téléport physiquement distinct qui met le niveau dans l'état correspondant via un dispatcher. Voilà pour le principe.

Le problème est que lorsque le joueur arrive dans une carte, l'évent de l'acteur dans le rayon duquel il se trouve est inactif. Donc le téléport de retour ne peut agir via son Event. L'astuce est de placer ce téléport dans une boite. Un autre téléport situé juste après transporte le joueur au point désiré tout en activant cette fois le Dispatcher qui met le niveau en état. A chaque voyage impliquant une action spécifique correspond une boite "noire".

Dans la petite carte d'exemple faite de deux cartes (niveau 1et niveau 2), on voit le clignotant rouge au-dessus de la porte qui indique qu'on ne peut l'ouvrir. Un message propose d'aller chercher la clé dans le niveau 2. Les téléports sont dans un renfoncement. Un voyant coloré violet signale que nous en sommes au premier voyage. Arrivés dans le niveau 2, la clé est bien visible :-) et il n'y a qu'à la prendre. On retourne par la zone de téléport vers le niveau 1, dans la boîte noire (rouge ici) qui active la gâchette commandant la porte puisque nous avons la clé. Le voyant de la porte passe au vert. Dans la salle suivante, la sortie reste bloquée, mais un message indique que la pièce secrète du niveau 2 commandant cette sortie est maintenant accessible. On repart vers le niveau 2, le voyant est bleu cette fois indiquant qu'un nouveau téléport est activé, le précédent inhibé, qui nous amène via une boite noire (bleue..) au niveau 2 et là il n'y a plus de clé et en approchant de la paroi du fond, celle-ci s'ouvre et on rentre dans une petite pièce vide où un message nous dit que la sortie du niveau 1 est accessible. Retour au niveau1 donc, un nouveau téléport nous fait passer par une boite orange qui met le niveau 1 en état. Le voyant est vert au niveau de la sortie, et un téléport nous envoit de là à l'intro d'UT histoire de faire une fin.
Reste un problème d'affichage de messages d'erreur concernant les téléports, qui n'empêche pas le processus, et que je vais corriger..

TELECHARGER la carte d'exemple (Vous devez avoir installé auparavant les ScriptedLights lumières codées)

NOTES EN VRAC

Un moyen simple de motiver les robots pour aller dans un endroit, sans rajouter d'objet est d'en ajouter un mais d' en annuler le contenu en modifiant les paramètres :
- Dans filter/OddsOfAppearing mettre 0
- Dans Inventory/MaxDesirability mettre une valeur d'autant plus élevée qu'on voudra que ce soit efficace.