Chemins p1

CHEMINS

Si on construit un niveau avec des monstres, on peut créer l'architecture, placer un départ de joueur, disposer les monstres, et jouer sans autre préparation. Les créatures vont attendre dans leur coin d'être sollicitées par la présence du joueur, le bruit qu'il fait.

Si l'on veut que certaines créatures aient des comportements plus élaborés, qu'elles patrouillent, qu'elles réagissent de façon plus fine à la confrontation, en répartissant des rôles, en tendant des embuscades, il faut jalonner l'espace de repères qu'elle puissent utiliser.

Enfin sin l'on veut utiliser des "bots" pour un match à mort, ou pour aider le joueur, il est indispensable qu'un tel réseau de jalons soit installé.

LES POINTS DE NAVIGATION

Tous les points de navigation ont un paramètre "bPlayerOnly". Si vrai, seuls les joueurs (bots) utiliseront ce chemin.

PathNode : Les points de navigation "PathNode" sont accessibles dans le catalogue :
Classes/NavigationPoint/PathNode. Ce sont les jalons de base sont pour les "bots" . Une fois sélectionné, l'item peut être mis en place dans la f3d. Le BD déroule un menu où on sélectionne "Add PathNode here". Apparaît alors une petite icône en forme de pomme qui matérialise le jalon. On doit les placer ni trop près ni trop loin les uns des autres pour que le chemin résultant soit fonctionnel.

La règle est que de chaque point on puisse voir le précédent et le suivant. Les limites de zones (zone portals) ne sont pas des obstacles.

Lorsqu'on les a tous disposés et avant de les tester, il faut recompiler le niveau et appuyer sur le bouton "Paths Define".

En sélectionnant dans le menu des diverses fenêtres de l'éditeur View/Show Paths, on peut voir des lignes colorées qui relient ces divers points. Il faut alors repérer cexu qui ne sont pas fonctionneles et les réaligner, ou en rajouter et recommencer le processus. Ces lignes seront bleues pour les chemins les mieux dégagés et rouges pour ceux qui ne laisseront passer que les créatures de la taille du joueur.

La liaison se fait aussi avec des items tels que les points de départ du/des joueurs, les armes, munitions, bref les items de la classe "Inventory" et les autres types de points de navigation, tous ces éléments étant équivalents pour définir le réseau. Il est donc inutile et même nuisible d'être redondant. Il faudra tout de même les placer assez près des armes pour qu'elle soient utilisées.

Dans le cas d'un ascenseur, il faut placer des points particuliers : Un "LiftExit" à la sortie en haut et en bas, et un "LiftCenter" au centre de la plate-forme mobile. Tous doivent avoir le même "Tag".

PatrolPoints : Ces jalons de navigation permettent aux créatures de patrouiller sur un parcours défini. On les trouve dans le catalogue Classes/NavigationPoint/PatrolPoint. On les place dans le f3d comme vu plus haut. Mais ils doivent être plus rapprochés. Le premier doit être près de la créature qui doit l'emprunter. Il faut ensuite les ordonner successivement dans leur champ "Events/Tag" accessible dans la fenêtre des propriétés.
Dans le champ "PatrolPoint/Nextpatrol", mettre le nom du "Tag" du point suivant. Le dernier point bouclera sur le premier, pour que l'action soit continue.
"numAnims" = le nombre de fois que la créature doit jouer l'animation prévue dans le champ "PatrolAnim".
"PatrolSound" = Le son qui doit être produit lorsque la créature atteint ce point.
'PauseTime" = Le temps que doit passer la créature sur ce point avant de continuer.

Dans les propriétés de la créature, il faut inscrire "Patroling" dans le champ "Orders/Orders", et mettre dans le champ "OrderTag" la valeur du "Tag" du premier point de la patrouille.

Le chemin que décrivent ces points de patrouille doit être dégagé. Un obstacle de faible dimension pourra être contourné, mais une porte fermée, même si une gâchette permet à la créature de l'ouvrir, restera un obstacle définitif. que la porte soit ouverte avant le franchissement souhaité n'y change rien. Par contre, si on place un "LiftExit" de chaque côté de la porte, il n'y a plus de problème.

 

 

AlarmPoint :
Utilisé en conjonction avec "AlarmTag". Lorsque l'acteur déclenchant l'atteint, il active toute créature dont le "Tag" est dans son "Event".
-
NextAlarm : le point d'alarme suivant éventuel où aller ensuite.
- pausetime : combien de temps passer ici
- ducktime : combien de temps attendre après avoir joué l'animation prévue dans "AlarmAnim" et seulement si elle est prévue.
- AlarmAnim : animation exécutée lorsque la créature atteint le point d'alamre.
- bStrafeTo : si vrai, la créature se déplacera latéralement en faisant face au joueur en rejoignant le point d'alarme. Elle pourra tirer.
- bAttackWhilePaused : si vrai, la créature tirera sur le joueur ( ou sur sa dernière position visible) pendant la phase "ducktime".
- bNoFail : si vrai, la créature ne renoncera jamais à atteindre le ploint d'alarme. Si faux et si la créature ne peut rejoindre commodément le point, elle abandonnera.
- bStopIfNoEnemy : Si vrai, et que l'ennemi n'est pas visible, la créature attendra de voir le joueur, sinon elle continuera le processus prévu.
- bKillMe : La créature va haïr et détruire l'instigateur, même si ce n'est pas initialement son but.
- bDestroyAlarmTrigger : La créature est détruite quand elle atteint le point d'alarme (et qu'il s'agit de son but).
- ShootTarget : si "bAttackWhilePaused" est vrai et que ce champ contient le "Tag" d'un acteur différent du joueur, la créature tirera dessus plutôt que sur le joueur.
- AlarmSound : son joué en même temps que l'animation.

Homebase

Une créature qui aura une base définie par le même tag qu'elle, si elle craint le joueur, elle se repliera sur sa base et là seulement fera face. En atteignant sa base, elle se tourne dans la direction définie par celle de la base. Elle vérifiera aussi s'il existe des "ambushpoints" de même tag où elle pourra se positionner.

InventorySpot

Insérés automatiquement durant la phase "PATHS DEFINE" pour identifier les endroits où sont placés les objets préhensibles (pour les "bots").

LiftCenter

A placer dans l'ascenseur, au niveau de la position "key0" du mobile, là où on veut que se tiennent "bots" et créatures. Le "LiftTag" doit être égal au "tag" de l'ascenseur.

Le mobile lui-même doit avoir pour paramètre "Object-->StandOpenTimed" car "BumpOpenTimed" n'est pas compris par les robots qui interprètent le mobile comme porte. Cela dit, les robots peuvent comprendre les ascenseurs actionnés par gâchettes. Dans des situations complexes avec des délais via "dispatcher", il faut les aider à actionner le système par exemple en associant le LiftCenter/LiftTrigger au tag de la gâchette qui contrôle l'ascenseur.

MaxZDiffAdd, vaut 0 par défaut. Il peut définir une distance entre le robot et le LiftCenter qui soit considérée comme abordable. Ceci est utile si le robot doit attendre l'ascenseur à une position en retrait sur un escalier ou une rampe.

MaxDist2D est la distance maximum entre le robot et le "LiftCenter". Par défaut à 400 unités.

LiftExit

Doivent être placés aux points d'entrée et de sortie de l'ascenseur, à 16 u du bord. Leur "LiftTag" doit être égal au "tag" de l'ascenseur. Ils peuvent aussi être placés de part et d'autre d'une porte que les créatures doivent franchir au cours d'un trajet défini par les "PatrolPoints" notamment. Ils permettent aux robots de joindre deux points malgré une discontinuité.

KEYPOINTS

EarthQuake

L'épicentre d'un tremblement de terre peut être activé pour secouer le point de vue du joueur pendant un temps défini, mais aussi optionnellement en le projetant de-ci de-là. Cet effet n'existe que pour le joueur. Pour que les acteurs alentour soient concernés également, utiliser le "ThrowStuff". Les paramètres sont :

ThrowStuff

Cet item projette les objets mobilisables ou/et les joueurs dans une direction donnée ou de façon aléatoire. Leur étiquette "Tag" doit correspondre à celle de l'"Event" de cet item.

- Throwvect : la vitesse sur le vecteur orienté.

- Si Numthrows est plus grand que 1, les acteurs seront sollicités de nouveau après le délai indiqué dans "interval".

- Si bRandomize est vrai, le throwVect sera aléatoirement changé pour chaque secousse. En ayant Numthrows > 1 et bRandomize=vrai (true) on simule la perturbation d'un environnement pendant un tremblement de terre.

MakeNaliFriendly

Quand il est actionné par une gâchette, ce point clé rend amicaux touts les Nali du niveau. C'est utile si on les a effrayés auparavant, ou pour régler une situation où les Nali doivent remercier le joueur pour un service rendu (comme de tuer un Skaarj qui s'en prenait à l'un d'eux).

Jumper

Quand il est actionné par une créature, la fait sauter dans la direction où il pointe. Son action peut être limitée à une seule fois, ou à une seule classe d'acteurs. Le paramètre "JumpZ" précise la hauteur du saut et donc du point de chute.

FearSpot

Ce point clé fait que les créatures vont éviter une l'aire où il est placé. encore faut-il qu'il n'y ait pas de chemin qui soit défini dans cette aire. Le point peut être initialement actif ou non en renseignant le champ "bInitiallyActive".

InterpolationPoints

Cet item se trouve dans Classes/Keypoint/InterpolationPoint. Ce sont des points particuliers qui vont jalonner un chemin que le joueur parcourt automatiquement, comme s'il volait, dans le mode de jeu "Intro". On peut en placer autant qu'on veut.

1 - Placer au point de départ un "PlayerStart" en hauteur, de façon à ce qu'il tombe au début du jeu et entre ainsi dans le champ d'une gâchette, en même temps que se trouve amorcé le mouvement dans un glissement souple.

2 - Sous le joueur, placer une gâchette, de telle sorte que le joueur en tombant entre dans son champ d'action. Donner un nom spécifique dans le champ "Event/event.

3 - Placer n'importe où un "SpecialEvent" dont le "Tag" correspond à l'"Event" de la gâchette. Donner au champ "Event" un autre nom spécifique. Mettre l'item "Object/InitialState" sur "PlayerPath".

4 - Placer les points d'interpolation de façon à décrire un chemin qui parcoure le niveau. Donner à leurs "Tag" la valeur de l'"Event" du "SpecialEvent". Dans les propriétés de ces points, préciser :
- bEndOfPath : vrai seulement pour le dernier point. Optionnel seulement si on veut réaliser un parcours en boucle. Dans ce cas rapprocher le dernier point du premier.
- RateModifier : concerne la vitesse à chaque segment. Une valeur de 0.5 donne une vitesse correcte pour qu'on ait le temps de regarder le décor..
- Position : entrer ici l'ordre des points. 0 pour le premier, 1 pour le second, etc..
- Dans les f2d, contrôler l'orientation de chaque point qui sera celle de la caméra.

5 - Dans les propriétés du niveau, définir "DefaultGameType" en tant que "Intro" (Classes/Info/GameInfo/UnrelGameInfo/Intro).

6 - Recompiler et tester.

En fait il est possible de placer ce systèmedans une carte SP à un moment choisi. Le jouur parcourt alors un cycle qu'on terminera par un InterpolationPoint qui aura bEndOfPath = VRAI. Remettre alors RateModifier à 1 !!