Template6: Tutorial #2

Armes, IA et chemin à suivre

C'est le deuxième tutoriel pour l'apprentissage des nouveaux scripts des template 6.

Qu'allez-vous apprendre ?

Dans ce tutoriel nous continuerons à apprendre le système des nouveaux templates en ajoutant 2 éléments majeurs de tous les jeux de tirs à la première personne que sont les armes et l'intelligence artificielle.

Ce que je suppose comme acquis :

Vous devez avoir terminé le premier tutoriel de cette série avant de commencer celui-ci.


Part One: Weapons

Partie un: les armes

Nous allons continuer là où nous avons laissé le dernier tutoriel mais afin de faciliter les tests nous devons d'abord faire quelques changements sur la deuièeme partie du niveau, "future".

Démarrez WED et chargez le niveau "Future".

Une fois encore j'ai groupé les éléments pour rendre ce tutoriel plus facile à faire. Scope to sur le groupe "Group1" dans l'onglet Objects. Tout doit disparaître dans les vues à l'exception de la partie du niveau situé avant les premières portes.


Adding the Player Weapons Scripts

Ajouter le script des armes du joueur

Puisque nous continuons à partir de l'endroit où nous nou sommes quittés avec le tutoriel précédent, nous avons déjà les scripts pour les déplacements du joueur, pour les portes, les effets etc.

Pour ajouter des armes à notre joueur, tout ce que nous devons faire c'est d'utiliser l'option de WED "Add Script" (File->Add Script) et de sélectionner "plBipedWeap00.wdl":

C'est tout! Démarrez le niveau et vous devriez voir le changement:

Notre joueur a une arme.

Et si vous utilisez les touches A et E vous pouvez changer d'arme.

Clic gauche de la souris pour tirer un coup de feu.

Et voilà vous venez d'ajouter un système complet de gestion d'armes à votre jeu simplement avec une option d'un menu!


Modifying Weapons

Modifier les armes

Bien, ajouter des armes à votre niveau est facile mais regardons comment nous pouvons changer le comportement des armes sans avoir à réécrire une quelconque ligne de code.

Ouvrez la boite de dialogue de la personnalisation de "plBipedWeap00.wdl" (clic droit => customize):

La première chose que vous voyez c'est que la liste des changements que nous pouvons apporter est très longue incluant les modèles à la première et à la troisième personne et ce pour chacunne des armes utilisées. Nous verrons tout cela en détail mais pour l'instant nous allons nous concnentrer sur l'arme et les munitions que nous voulons donner à notre joueur au départ.


Starting Weapons and Ammo

Armes et munitions de départ

Jouez des ascenseurs sur la fenêtre de personnalisation pour arriver dans la section "Player Weapons".

Comme vous pouvez-le voir, le joueur peut avoir jusqu'à 8 possibilité d'armes. Le champ "Weapon Template" définit quel template nous utilisons pour ce numéro d'armes (nous verrons plus en détail le template sur les armes plus tard). "Starting Rounds" definit le nombre de munitions qu'il y a dans le chargeur de l'arme (c'est à dire combien de balles on peut tirer avant de devoir recharger l'arme). En cochant la case "player starts with weapon?", le joueur aura cette arme lors du démarrage du jeu.


Adding a Launcher

Ajouter un lance grenade

Nous allons ajouter une arme type lanceur de grenade à l'arsenal de notre joueur. Dans Weapon #4, mettez 101 dans Weapon Template, On démarrera avec 6 munitions dans l'arme (Rounds à 6) et on coche la case pour démarrer avec cette arme..

Exécutez le niveau et basculez sur l'arme n°4 (touche A une fois):


Weapon HUD

Si vous voulez un panneau de rappel pour les armes dans le coin supérieur gauche de l'écran vous pouvez ajouter un panneau qui montre les munitions disponibles dans votre chargeur. Il suffit d'ajouter le script "plBipedWeapHUD01.wdl" à votre projet:


More on Weapons

En savoir plus sur les armes

Nous en verrons plus sur les armes dans de futurs tutoriels mais pour l'instant nous en savons assez pour défendre notre joueur des sujets du prochain tutorial, l'IA.


Part Two: Basic AI

Partie 2: L'IA de base

Bien nous avons des armes mais rien sur quoi tirer ! Corrigeons cela en ajoutant quelques ennemis avaec un minimum d'intelligence comme des gardes...


Adding the FPS AI Script

Ajouter le script IA pour un FPS (jeu de tir à la première personne)

Le comportement ou IA (intelligence artificielle) d'une entité non joueur dans un jeu définit le type de jeu dont il s'agit.

Notre projet est un jeu de tir à la première personne (ou First Person Shooter = FPS) aussi nous allons ajouter le script "aiFPS01.wdl" à notre projet:

Ce script nous donne le comportement "AIFPS01_Guard", que nous pouvons atatcher à notre modèle "AI_Guard01" de notre niveau. Assurez-vous que AI_Guard01 est sélectionné dans la partie Object de la fenêtre Project. Clic droit et sélectionner Behavior:

Sélectionnez "AIFPS01_Guard" dans la liste de choix qui s'affiche et pressez OK:

Compilez le niveau avec "Update Entities" et exécutez-le.


Our First "Kill"

Notre premier "meurtre"

Lorsque vous vous dirigez vers la première porte du niveau vous allez rencontrer un garde qui vous regarde:

La meilleure façon d'attirer son attention c'est de lui tirer dessus à plusieurs reprises:

Après une bonne rafale dans le corps (dépendant de l'arme utilisée) le garde mourra sur le sol:


Modifying FPS AI

Modifier l'IA du FPS

Le comportement de l'ennemi peut être changé de la même façon que nous pouvons modifier le comportement du joueur. Ouvrez le panneau de personnalisation (Behavior) pour l'entité AI_Guard:

La plupart des valeurs du haut de ce tableau sont semblables aux valeurs du joueurs et nécessitent peu d'explications. Intéressons-nous aux valeurs du bas:

La section arme (Weapon) inclut un identifiant (ID) qui est le même que la variable "Weapon Template" dans le script plBipedWeap00 script. Nous pouvons mettre 2 pour donne une mitraileuse au garde:


Setting the Muzzle Vertex

Paramétrage du sommet de la bouche de feu

La valeur du sommet est un petit peu plus intéressante. Elle définit quel sommet du modèle sera utilisé comme bouche de feu pour l'arme (la bouche de feu étant l'endroit d'où est sensée partir la balle). Pour l'instant cette valeur est à -1, ce qui signifie qu'on utilisera le milieu du modèle pour le coup de feu. Ce que nous aimerions faire c'est de paramétrer ce départ du coup de feu par rapport au modèle guard.

Pour cela, Démarrez l'éditeur de modèle (MED) et chargez le modèle Guard qui se trouve dans le répertoire future (le nom du modèle est "badguy_gun.mdl"):

Dans MED nous allons à présent zoomer sur l'extrémité de l'arme et en se mettant en mode vertex, sélectionnez le sommet qui vous semble le plus approprié pour représenter la sortie de la balle (désolé de ne pouvoir être plus précis):

Notez le numéro diu sommet dans la partie en bas à droite de la fenêtre MED, ici 679. Fermez MED et ré-ouvrez le panneau de comportement du garde dans Wed. Saisissez le numéro relevé dans le champ Vertex, recompilez le niveau (Update Entities) et exécutez-le:


Accuracy and Reload Rate

Précision et vitesse de rechargement

Pour avoir différents IA vous pouvez changer la précision et la vitesse de tir de chacun. La variable AccReload est une variable "compressée", ce qui signifie qu'elle contient en fait 2 informations disctinctes séparées par la décimale.

La partie qui se trouve à gauche de la décimale concerne la précision du tir de l'IA avec cette arme. Cette valeur est ajoutée à la valeur de base de précision de l'arme et est mesurée en degrés. A chaque tir de l'IA, un vecteur est calculé depuis la bouche de feu de l'arme (ou l'origine de l'IA) jusqu'au centre de la cible. Ce vecteur est ensuite "dévié" d'une valeur aléatoire dans une limite de -x à +x où "x" est la valeur "précision" de l'arme ajoutée à la valeur "précision" entrée ici.

La partie à droite de la décimale est ajoutée au temps (en ticks) qui est donné pour recharger l'arme après chaque tir.

La plupart du temps vous ne toucherait pas aux réglages de l'IA, le faisant tirer à la vitesse et avec la précision de l'arme utilisée mais un reproche qui était fait aux templates précédents c'est que le joueur ne pouvait pas tirer en "arrosant". C'est à présent possible grâce à ces valeurs que vous mettrez à 0 autrement.

Avec les valeurs ci-dessus le garde IA en aura vite terminé avec vous!


AI Senses

Les sens de l'IA

Notre IA a la possibilité de "voir" et "d'entendre" le joueur. Cela peut paraître une fonction très avancée mais c'est en fait très simple.

Le FOV (Field of View ou Champ de vision) de l'IA est un cône 2D faisant face à l'IA. La longueur de ce cône (en quants) est stockée dans la valeur FOV avant la décimale. La largeur du cône est mesurée en degrés et se trouve après la virgule:

En mettant la valeur 360° pour le cône, l'vous ne surprendrez jamais l'IA:

L'écoute est basée sur le même principe. L'IA pourra entendre le joueur s'il se trouve dans le rayon d'action donné pour la distance mesurée en quants. En effet entendre fonctionne sur le même principe que voir sauf que la valeur en degré sera toujours 360. Voici une réprésentation graphique de ces 2 sens (orange = la vision, bleu = l'écoute):

Ces 2 sens se chevauchent. Si le joueur se trouve dans l'une des 2 surfaces colorées et qu'il n'y a aucun obstacle (comme un mur par exemple) entre lui et le joueur alors l'IA saura où se trouve le joueur.


Finished

Terminé

C'est tout pour l'IA de base. Vous pouvez donc à présent donner un peu de vie à votre niveau avec des combattants IA. Le seul problème est qu'ils se contentent de statiooner attendant l'arrivée du joueur. Bien que cela fut acceptable dans des FPS dans le passé ou que cela reste potable pour des gardes montant la garde, pour le reste ça ne présente pas beaucoup d'intérêt. C'est pourquoi dans la prochaine leçon nous allons apprendre à notre IA à suivre un chemin défini.


Part Three: Path Following

Partie trois: suivre un chemin

C'est vrai qu'une salle remplie de mauvais garçons qui vous attendent dans une pièce pour vous tirer dessus à vue date des années 1990, nous sommes au 21ème siècle! Les joueurs assidus des FPS attendent un peu plus de leurs jeux actuels.

Des chemins à suivre peut donner l'illusion que le joueur a des endroits où aller et des choses à faire sans demander beaucoup d'effort de votre part.


Path Following vs. Path Finding

Chemin à suivre contre chemin à trouver.

Vous avez du entendre parler de "Pathfinding" (chemin à trouver) dans les jeux. Cela peut vouloir dire beaucoup de choses mais pour notre propos c'est la capacité qu'a une entité pour calculer un chemin depuis sa position vers une autre position sur la carte. C'est simple en théorie et les bases le sont mais ça devient vite compliqué lorsque vous ajouter des choses comme des objets 3D, des géométries arbitraires, des objets qui se déplacent etc.

Ce que nous allons apprendre dans cette leçon c'est le "Path Following" (chemin à suivre). Dans le path following, nous créons un chemin à l'intérieur du niveau dans WED et nous demandons à l'entité de le suivre. Non seulement c'est plus facile pour le jeu à gérer en temps réel mais cela permet au créateur du niveau (vous) d'avoir le plein contrôle de où va l'entité et plus important comment elle y va.


Creating a Path

Créer un chemin

La partie la plus difficile au sujet du path following est la création du chemin lui-même. Dans le niveau future j'ai déjà créé un chemin pour vous mais nous allons en créer un nouveau juste pour comprendre.

Dans la fenêtre Project dans l'onglet Object, "Scope To..." sur le groupe "Lift" à l'intérieur de Group3:

Dans la barre de menu de WED, sélectionnez Object->Add Path:

Vous devez voir apparaître une petite boîte dans le niveau (en rouge) et un objet nommé "path_001" dans votre groupe:

Allez-y et déplacez le petit carré rouge à la position montrée sur cette image (à peu près).


Adding Nodes

Ajouter des noeuds

Bien pas trop difficle pour l'instant?? Mais un chemin composé d'un seul point (appelé "node" ou noeud) n'est pas très utile si vous voulez que votre entité fasse quelque chose.

Pour pouvoir ajouter de nouveaux noeuds nous devons d'abord sélectionner "Vertex Move" dans la barre d'outils:

Puis nous pouvons cliquer n'importe ou dans le niveau pour ajouter un nouveau noeud au chemin:

Ajoutez des noeuds de manière à créer un chemin qui fasse le tour de l'ascenseur comme sur cette image:

Si la position d'un noeud ne vous convient pas vous pouvezle déplacer par un clic-glissé. Si vous cliquez à côté du noeud il va vous en créer un autre faites juste [cntl-z] pour l'effacer.

Pour connecter le dernier noeud avec le premier (pour créer un chemin fermé) sélectionnez le dernier noeud et tout en maintenant la touche ctrl enfoncée cliquez sur le premier noeud:

Vous n'êtes pas limité à faire des chemins fermés avec ce nouveau système de chemin mais c'est le plus facile à faire aussi c'est tout ce que nous verrons ici.


Attaching Entities to Paths

Attacher une entité aux chemins

Bien, à présent que nous savons créer des chemins voyons comment on peut faire pour qu'une entité IA le suive.

"Scope to..." sur Group2 et sélectionnez l'entité AI_Guard02.

Clic droit sur l'entité (dans la liste ou dans le niveau au choix), sélectionnez Behavior, puis sélectionnez l'action AIFPS01_Guard.

Clic droit de nouveau sur l'entité mais cette fois-ci choisissez Properties. Assurez-vous que l'onglet "properties" est sélectionné dans la boîte de dialogue Object Properties qui apparaît:

Cliquez sur l'icône répertoire près du champ Path. Sélectionnez "path_000" dans la liste dérouante qui apparaît:

Recompilez le niveau (souvenez-vous d'utiliser "Update Entities") et exécutez-le.

Une fois que vous aurez passé le premier garde (dégommez-le) et ouvert la porte, vous noterez que le deuxième garde suit un chemin. Si le garde prend conscience de votre présence (vouslui avez tiré dessus ou il vous a vu) il cesse de suivre son chemin et vous attaque.


Finished

Terminé!

C'est terminé. Vous avez acquis les bases nécessaires pour faire un jeu de tir à la première personne. Etant bien entendu que nous n'avons vu que le minimum des bases dans ces tutoriels.

Pour plus d'informations je vous envoie vers la lecture du manuel, la consultaion des diifférents forum et le WIKI (http://www.conitecserver.com/wiki/index.php).

Bon amusement avec 3DGameStudio!