Aller au menu - Aller au contenu

Icône L'IA : Intelligence Artificielle

Mise à jour : 22/07/2009
1 414 visites depuis 7 jours, dont 18 sur ce chapitre classé 94/786
Allons bon... vous ne saviez pas que les marines disposaient d'une intelligence (très) artificielle ? ;o)
Ne nous moquons pas toutefois, parce qu'en activant le niveau difficile ils deviennent assez coriaces, et réagissent assez bien à ce que nous faisons. Certes, aujourd'hui d'autres jeux existent qui prennent en charge une IA encore plus développée, mais vous verrez que celle de Half-Life est déjà assez complète et que l'on peut faire bien des choses...

Nous verrons donc comment ajouter des monstres dans une map (c'est facile vous verrez), puis comment les faire bouger et exécuter certaines actions (ce qui est un peu plus dur...).
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Ajouter des monstres

Entités concernées : entités commençant par "monster_"
Type d'entité : entités-point
Difficulté : assez facile

Vous verrez : le terme "monstre" est trompeur. Voici ce que l'on trouve dans les entités "monster_" :
  • Des aliens et des marines : oui, eux ce sont des monstres, des vrais, des méchants, qui ne cherchent qu'à vous découper en petits morceaux.
  • Des objets explosifs : ce sont par exemple les mines lasers (monster_tripmine). Celles-ci, contrairement à weapon_tripmine, sont déjà posées à l'angle d'un couloir et attendent patiemment le joueur... ce sont donc des ennemis.
  • Des personnages alliés : scientifiques, barneys etc... Ils ne veulent pas votre mal (en théorie) et cherchent à vous aider. Utiles pour créer un scénario et mettre de l'ambiance !


Comme vous pouvez le voir, les "monstres" sont variés, et ils sont très nombreux ! Je vous laisse le soin de les découvrir et de les placer dans les niveaux à votre guise.
Comme le joueur, surélevez un peu l'entité du sol pour éviter que le monstre ne reste coincé au départ...

Voici 2 propriétés propres aux monstres que vous devez connaître. Ce sont des triggers un peu particuliers :
  • TriggerTarget : nom de la cible à déclencher lorsque la condition de "Trigger Condition" est remplie (voir ci-dessous).
  • Trigger Condition : indiquez une condition qui déclenchera le trigger. Par exemple, si vous mettez "50% Health Remaining", une entité sera appelée lorsque le monstre n'aura plus que la moitié de sa vie (pourquoi pas un tremblement de terre pour mettre de l'ambiance ;)
    • No trigger : rien ne se passera, l'entité n'appellera aucune cible (par défaut).
    • See Player, Mad at Player : lorsque le monstre a vu le joueur et l'a en ligne de mire. Bref, il est en train de lui foncer dessus :)
    • Take Damage : lorsque le joueur a blessé le monstre.
    • 50% Health Remaining : lorsque le monstre n'a plus que 50% de sa vie.
    • Death : lorsque le monstre est mort.
    • Hear World : lorsque le monstre arrive dans la partie.
    • Hear Player : lorsque le monstre entend le joueur arriver.
    • Hear Combat : lorsque le monstre entend le joueur combattre d'autres monstres.
    • See Player Unconditionnal : lorsque le monstre voit le joueur.
    • See Player, Not in Combat : lorsque le monstre voit le joueur, mais seulement s'il n'est pas déjà en train de combattre.


Au niveau des flags, on a généralement ceux-ci :

  • WaitTillSeen : attend de voir le joueur avant de commencer à bouger.
  • Gag : empêche le monstre de parler (idéal pour faire taire un scientifique).
  • MonsterClip : le monstre sera bloqué par l'entité func_monsterclip, qui fonctionne comme la texture CLIP, sauf que celle-là concerne uniquement les monstres. Le joueur ne sera donc pas bloqué par elle.
  • Prisoner : le monstre restera immobile, il ne réagira à rien.
  • WaitForScript : attend un script pour agir.
  • Pre-Disaster : dans l'histoire de Half-Life, il y a deux moments. Le premier, au tout début, c'est quand tout va bien, que tout est calme... avant le désastre. Le second, ben c'est après l'expérience de Gordon qui a tourné au cauchemar. Si vous cochez cette case, les monstres (en particulier les scientifiques et les barneys), réagiront comme si tout allait bien (première période donc). Sinon, ils parleront entre eux des aliens, des explosions et de toute cette joyeuse apocalypse :)
  • Fade Corpse : le corps disparaît une fois que le monstre est mort.
Mais suffit-il de placer un monstre pour qu'il fonctionne dans votre niveau ?
Eh bien non ! Vous allez voir que l'on doit au moins leur donner des nodes...

Utilisation des nodes

Entités concernées : info_node et info_node_air
Type d'entité : entités-point
Difficulté : très facile

Imaginez que les info_node sont comme des waypoints pour les bots. Les monstres ont besoin de savoir où ils peuvent aller dans votre niveau... ce qui évitera donc qu'ils se prennent bêtement un mur !

Le code de Half-Life se charge de dire au monstre d'attaquer, riposter, fuir etc... Vous, vous devez juste indiquer au monstre où il peut aller. C'est tout :)
Ne placez les info_node que lorsque votre map est terminée. En effet, si vous la modifiez après, vous aurez peut-être besoin de déplacer les info_node, et dans ce cas bonjour la galère !
Les info_node ressemblent sous Worldcraft à de grands rectangles jaunes. Il faut les placer tout près du sol, à une distance raisonnable les uns des autres. Evitez aussi de les placer trop près des murs si le monstre est grand, car il pourrait se coincer dedans, intelligent comme il est ;)

Image utilisateur

Tout ce que vous devez retenir, c'est qu'un monstre va d'un node à un autre, sans se soucier de savoir s'il y a quelque chose au mileu. Veillez donc à ce que rien ne gêne le passage du monstre entre 2 nodes !

Lorsque vous lancez la map, un message "Node graph out of date. Rebuilding..." apparaît, et fait travailler votre ordinateur quelques secondes. Que se passe-t-il ? Half-Life génère un fichier nomdevotremap.nod dans le dossier maps/graphs. Celui-ci contient les coordonnées liant les nodes de votre map, très importantes pour que les monstres sachent où se déplacer...
Pensez à livrer ce fichier avec votre map pour éviter que les joueurs ne soient bloqués quelques secondes avant le lancement de la partie !

Animation des monstres

Entité concernée : scripted_sequence
Type d'entité : entité-point
Difficulté : difficile

Animer un monstre est un peu plus compliqué. Si vous voulez qu'il effectue un mouvement précis, il va falloir vous servir de l'entité scripted_sequence.

A mon avis, le meilleur moyen de vous faire comprendre comment ça fonctionne, c'est un exemple. Je vous propose cette petite histoire : un scientifique est déshydraté, il va au distributeur de boissons, mais manque de chance sa pièce reste coincée et il se met à frapper la machine comme un forcené.
Bon, c'est pas vraiment un scénario digne de Spielberg, mais c'est un bon début pour commencer notre carrière de cinéma ;) Si vous arrivez à réaliser cette scène, vous saurez tout faire (il suffit d'adapter le décor). Suivez bien ce que je vous dis !

Commencez par créer une salle, que vous décorerez à votre guise (pour ma part je m'amuserai pas à faire des décors ;). Placez à un bout de la salle un monster_scientist (un scientifique), et à l'autre bout de la salle un distributeur de boissons (textures GENERIC 106). Placez une entité scripted_sequence juste devant le distrib'.
Vous devez placer le scripted_sequence juste au niveau du sol (au pixel près). Sinon, ça ne marchera pas. Par ailleurs, pensez à "coller" cette entité devant le distributeur, parce que s'il y a un écart on ne comprendra pas dans quoi le scientifique met sa pièce ^^
Voici ce que vous devriez voir :

Image utilisateur

A gauche, le scientifique, à droite le distributeur avec le scripted_sequence collé juste devant.
Notez que rien ne doit gêner le passage du scientifique au milieu !

Commencez par donner un nom (name) au scientifique. Nous l'appellerons "chercheur" dans notre exemple.
C'est tout ce que vous aviez à faire pour le scientifique.

Passons maintenant au scripted_sequence. Voici les propriétés utiles que vous devez modifier pour la plupart :
  • Angle du radar : modifiez l'angle du radar en haut à droite de manière à ce que cette entité soit dirigée vers le distributeur. Sinon, le scientifique risque d'effectuer son animation du mauvais côté !
  • Name : nom de l'animation. Dans notre exemple, nous appellerons cette animation "boire".
  • Target Monster : nom du monstre qui va effectuer l'action. Ici, il s'agit de "chercheur".
  • Action Animation : c'est l'action que va effectuer le monstre. Il faut choisir la bonne, sachant qu'il doit y en avoir quelques centaines rien pour les scientifiques !
    Mais comment je trouve le nom de l'animation ?
    Pourquoi croyez-vous que je vous ai parlé de Half-Life Model Viewer dans les précédents chapitres ? Lancez ce programme, ouvrez le pak de Half-Life, et sélectionnez "models/scientist.mdl". C'est le model du scientifique.
    Allez dans l'onglet "Sequence", et là choisissez la séquence qui vous plaît ^^ Dans notre cas, la séquence qui nous intéresse s'appelle "buysoda", c'est donc cela que nous allons écrire dans la champ de l'attribut "Action Animation". :)
  • Idle Animation : ce n'est pas vital de remplir ce champ. C'est le nom de l'animation que le monstre effectuera lorsqu'il n'aura plus rien à faire. Il sera donc au stade "idle", et la répétera autant de fois que nécessaire, avant qu'il ne soit perturbé.
  • Move to Position : cela détermine de quelle manière le monstre se rend au scripted_sequence.
    • No : par défaut. Le monstre ne se rendra pas au scripted_sequence pour effectuer l'action. Vous pouvez donc placer cette entité où vous le voulez : le monstre restera à la place où il est pour faire son animation.
    • Walk : le monstre marchera en direction du scripted_sequence. C'est cette valeur que nous allons mettre pour notre exemple.
    • Run : le monstre courra en direction du scripted_sequence.
    • Instantaneous : le monstre se retrouve instantanément comme par magie à l'emplacement du scripted_sequence. C'est un peu une téléportation quoi ;)
    • No - Turn to Face : le monstre ne bougera pas de là où il est, mais il regardera en direction du scripted_sequence.
Au niveau des flags, on a :
  • Repeatable : cette animation pourra être déclenchée plusieurs fois.
  • Leave Corpse : si le monstre meurt durant son animation, son corps disparaît.
  • No Interruptions : rien n'empêchera le monstre d'effectuer son action jusqu'à la fin, même si le joueur lui envoie 3 roquettes dans la face ;)
  • Override AI : le code de Half-Life ignorera l'intelligence artificielle du personnage. Il effectuera son action quoiqu'il arrive.
  • No Script Move : ne replace pas le personnage à la fin du script.
Schématiquement ça donne ça :

Image utilisateur

Pour activer l'animation, il va falloir utiliser un trigger. L'entité à activer est le scripted_sequence.
Placez donc un trigger_once (avec Target = "boire") pas trop loin dans la map : dès que le joueur rentrera dedans, le scientifique ira boire un coup... enfin, il essaiera du moins ^^

Hop ! Je suis allé vous faire un petit screenshot sous Half-Life pour vous prouver que tout cela marche :

Image utilisateur

Pas mal hein ? ;)

Ce n'est pas évident à comprendre du premier coup, mais je vous conseille de persévérer. Une fois qu'on a compris le fonctionnement des scripted_sequence, on ne les lâche plus :)
Comme vous pouvez le voir, l'intelligence artificielle de Half-Life est pleine de ressources cachées ! Je parie que bon nombre d'entre vous auront envie d'essayer de mapper pour Half-Life solo après avoir lu ce chapitre... et pourquoi pas, de développer un mod si vous vous en sentez le courage, et si vous trouvez suffisamment de personnes pour vous aider !
Chapitre précédent Sommaire Chapitre suivant

Partager

2 commentaires pour "L'IA : Intelligence Artificielle"
Note moyenne : 3.81 / 4 (47 votes)
Pseudo Commentaire
Hors ligne nap56 # Posté le 24/07/2009 à 12:27:14
Avatar

Merci tu explique super bien ^^ mais tu sais avec quel logiciel on peut faire ca? Et en fait j'ai desinstaller half-life de mon PC pour le passer a quelqu'un, peut on quand même le faire sans avoir half-life?
Et il y a t-il la même chose pour half-life 2?
Hors ligne L?mp # Posté le 29/11/2010 à 21:36:18
Avatar

Bonsoir, j'ai un soucis. Je n'arrive pas a créer de monstre (snarks) sur une map pour le mod Counter strike est-ce normal ou ai-je fais une erreur?

Je m'explique, j'ai créé une pièce avec un plafond qui s'ouvre (2 func_door_rotating) qui est déclenché par un trigger avec le passage du joueur (trigger_multiple). Et je voudrais que quand le plafond s'ouvre des snarks tombent! J'ai bien mon entité monster_snarks j'ai bien mes infos_nod au sol mais en test map rien ne se passe a part le plafond qui fonctionne bien, mais pas de snarks qui tombent... Une idée? une aide? s'il vous plait.

Voir tous les commentaires