Dernière mise à jour : 22/06/2017 à 15h37

Current Project : ...

Index des tutoriaux

Scripting de bots

Introduction

Les capacités de contrôle très limitées des NPC dans l'UE1 ont été contournées dans l'UE2 en ajoutant les séquences scriptées qui permettent de définir des actions à faire exécuter par les bots en suivant des temps, des évènements, en contrôlant très précisément leurs comportements. Pour cela, il faut utiliser l'actor Scripted Sequence, qui se trouve dans l'actor browser sous Keypoint => AIScript => ScriptedSequence, mais nous y reviendrons par la suite.

Pour l'exemple, réfléchissons au scénario qui sera exécuté par le script ; vous serez dans une pièce avec une porte fermée. Dans l'autre pièce, un Skaarj, qui, si vous vous approchez suffisamment de la fenêtre, manipulera un ordinateur quelconque, ouvrant une porte qui vous bloque le passage. Voici une image de ce que j'ai :

Map de base

Commençons par ajouter le NPC : un joueur contrôlé par l'ordinateur (en fait par nous dans ce cas précis), qui répondra aux commandes : créez-le à partir de l'actor browser, il s'agit de l'actor Pawn :

Actor Pawn dans l'Actor browser

Placez le dans la pièce derrière la vitre. Pour vous, placez un PlayerStart dans la pièce où se trouve la porte. Allez dans l'Animation Browser (l'icône avec un grand A, à coté du Static-Mesh browser) :

Animation Browser

Faites Fichier => Ouvrir, et ouvrez celui qui s'appelle "skaarjanim.ukx". Sélectionnez le premier truc du menu sur votre gauche, puis quittez le browser. Allez dans les propriétés de votre Pawn, et dans l'onglet "display", cherchez la ligne "mesh" et cliquez sur "use" à coté. Votre Pawn change, mais les textures sont restées celles du Pawn par défaut.

Pawn Modifié

Pour changer la texture, il faut aller les trouver dans le Texture Browser. Il y en a deux : Celle de la tête et celle du corps. Pour les Skaarjs, il faut aller fouiller dans la package UT2004 PlayerSkins. Dans le groupe Skaarj 3, choisissez une skin de tête et une skin de corps. Dans les propriétés => display => skin, remplacez les 2 déjà présentes.

Pawn avec textures correspondantes

Nous avons le décor et nous avons le bot, nous allons maintenant placer quelques PathNodes et déplacer le Pawn, pour obtenir ce genre de configuration :

Configuration

Script

Ajoutez une ScriptedSequence :

ScriptedSequence dans l'Actor Browser

L'actor lui-même peut être placé absolument n'importe où. Pour une question de facilité, il est préférable de le garder près du Pawn contrôlé. Maintenant, allez dans les propriétés, et dans Events => Tag, mettez par exemple "Master" sans guillemets. Ensuite, dans AIScript=>ControllerClass, choisissez ScriptedController, qui défini la ScriptedSequence comme une suite d'action à exécuter par un bot.

ScriptedSequence Paramétrée

Ouvrez ensuite les propriétés du Pawn, et dans AI=>AIScriptTag, mettez "Master" aussi pour définir le Pawn comme esclave de la ScriptedSequence. Si vous avez bien tout suivi, une ligne devrait maintenant relier le Pawn à sa ScriptedSequence.

Lien entre ScriptedSequence et Pawn.

Nous devons maintenant programmer une suite d'action que le ScriptedSequence va faire exécuter au bot. Pour commencer, dans les propriétés de la ScriptedSequence, allez dans AI, cliquez sur le petit "+" à coté de "Action". Les boutons "vide" et "ajout" apparaissent au bout de la ligne. Cliquez sur "ajout" sur le coté. Vous aurez un menu déroulant : la liste d'actions. C'est en ajoutant des actions comme ceci que nous allons définir la liste des choses à faire par notre bot. C'est d'ailleurs le moment de réfléchir précisément à ce que nous devons faire faire à notre bot. Premièrement, il sera immobile et attendra passivement. Ensuite, le joueur passera dans un trigger, ce qui provoquera le mouvement du Skaarj vers l'ordinateur situé derrière lui. Là, il jouera l'animation de quelqu'un utilisant un ordinateur, et la porte s'ouvrira.

Pour la partie attente, choisissez "ACTION_PLAYANIM".

ACTION_PLAYANIM non paramétrée

Elle permet de faire jouer au NPC une animation que vous choisirez. Cliquez sur le petit "nouv" à coté, et en dessous, dans "baseAnim", tapez le nom de l'animation à jouer. Pour la connaitre, ouvrez l'Animation Browser et cherchez une animation qui convienne. Pour ma part, je choisis "Idle_Rest". Tapez simplement le nom de l'animation, sans guillemets. Pour que le bot la joue en boucle, dans les propriétés de l'action, mettez bLoopAnim à Vrai.

Comme nous voulons que la séquence commence lorsque le joueur s'approche de la fenêtre, placez un Trigger devant la fenêtre mettez dans l'event "StartSequence" (ou tout autre event que vous imaginerez), et réglez le radius :

Trigger

Le bot répondra à l'event envoyé par le Trigger. Ajoutez dans ses propriétés une "ACTION_WAITFOREVENT". L'action est ajoutée en dessous de l'action précédente. Dans "ExternalEvent", mettez l'event de votre Trigger, dans mon cas, "StartSequence".

ACTION_WAITFOREVENT

Jouer des animations et se déplacer :

Il faut maintenant indiquer au bot ce qu'il devra faire lorsque l'Event sera envoyé. Ajoutez dans la ScriptedSequence une action "Action_MOVETOPOINT" et dans "DestinationTag", mettez par exemple "Destination". Mettez la même chose dans le tag du PathNode placé juste devant votre Static-Mesh d'ordinateur. Ainsi, notre Skaarj, ira jusqu'au Static-Mesh (en suivant les PathNodes disponibles), pour exécuter la suite.

Ajoutez à votre Scripted sequence une action "ACTION_SETVIEWTARGET", et dans "ViewTargetTag", mettez par Exemple "MyTarget", et entrez la même chose dans le tag du Static-Mesh.

MyTarget

Maintenant, une précision : SETVIEWTARGET forcera votre bot à se tourner vers l'ordinateur, mais si une autre action est spécifiée, elle se déclenchera sans attendre qu'il n'ait fini de se tourner. Il faut donc ajouter une action qui stoppera l'exécution de la suite pendant un court instant, afin que le Skaarj ait le temps de se tourner. Pour ceci, ajoutez une ACTION_WAITFORTIMER, qui interrompt le script pendant la durée en seconde indiquée dans son PauseTime. Mettez quelque chose entre 0.2 et 0.7.

Pour figurer la manipulation de l'ordinateur, vous pouvez utiliser par exemple l'animation "gesture_alt". Rajoutez une ACTION_PLAYANIM à votre ScriptedSequence et dans baseAnim, taper gesture_alt. Tout comme l'ACTION_SETVIEWTARGET, l'animation peut être interrompue si une action est déclenchée ensuite. Pour éviter ceci et attendre que l'animation ait été réalisée jusqu'au bout, ajoutez une ACTIOn_WAITFORANIMEND, qui est prévue justement pour stopper le script jusqu'à ce que le bot termine son animation.

Il ne reste plus qu'une chose à faire : ouvrir la porte. Pour ceci, ajoutez une ACTION_TRIGGEREVENT, et dans Event, mettez la même chose que dans le tag de votre mover de porte. N'oubliez pas de mettre votre porte en mode TriggerOpenTimed, et rebuildez pour faire bonne mesure.
Testez votre map. Approchez-vous de la fenêtre, et observez votre bot allez devant le pc, faire quelque chose (sans doute entrer un code secret), et la porte s'ouvre.

Le bot s'anime La porte s'ouvre

La scène est perfectible cependant. Vous pourriez faire en sorte que le bot marche au lieu de courir en ajoutant au tout début de la séquence une ACTION_WALK. Vous pourriez le faire se tourner vers le joueur à la fin de la séquence en utilisant une ACTION_TURNTOWARDPLAYER suivie d'une ACTION_WAITFORTIMER. De plus, il est possible que le bot ait un comportement inattendu une fois le script terminé, car il vous considère bien évidemment comme un ennemi. Pour cela, il faut utiliser une ACTIOn_SETALERTNESS et la régler en ALERTNESS_IgnoreAll.

Il existe une grande quantité d'action, dont le rôle est facilement compréhensible à travers leur nom. N'hésitez donc pas à explorer toutes leurs possibilités dans d'autres maps afin de voir si vous pouvez les faire parler, sauter etc. Pour des explications détaillées action par action, visitez UDN.

2005-2016, by Hellkeeper.

Valid XHTML 1.1 CSS 2.1