L'IA mimétique

Répondre
Partager Rechercher
Voilà, j'errait sur le vault en quête de scripts de génie passés inaperçus (et oui, parfois on en trouve), et c'est alors que je suis tombé sur ceci : NWN Memetic AI

Etant quelque peu intrigué par ce titre étrange, j'ai eu la bienheureuse intuition d'approfondir le sujet

Voilà le lien :
http://www.summermeat.net/memeticai/

Alors concrètement (mais pour être franc j'ai pas compris la moitié de ce qui est dit sur ce site) ça consiste en un système d'IA que je trouve absolument révolutionnaire.
Le système est basé sur 2 éléments fondamentaux :
- les memes (désolé je préfère pas traduire )
- les générateurs

Là ou ça devient carrément génial, c'est que tout est modulaire. Pour chaque créature, on définit sur on OnSpawn ses différents memes : se déplacer d'une certaine manière (waypoints, hasard, etc.), aller chercher quelque chose (de la nourriture par exemple), aller à un endroit en particulier, etc. Ensuite, pour chaque évènement de la créature, on définit une action à effectuer. Par exemple, une créature a pour unique but dans la vie de tourner en rond. Mais si elle rencontre une porte, alors elle l'ouvrira pour continuer. Bon ok l'IA de Bioware le fait déjà, mais c'est un exemple simpliste
Il y a différents types de memes, du permanent à l'éphémère, ainsi que différents priorités. Tout ça est franchement complexe (ou alors je suis débile ), mais c'est passionnant.

Ensuite viennent les générateurs. Ce sont les choses susceptibles de déclencher un meme. Je ne vais pas trop m'avancer de peur de dire des bêtises, mais en gros c'est ça.
Un exemple de générateur (qui peut être de pleins de types il me semble) serait une zone centrée sur un waypoint, qui lorsqu'un PJ rentre à l'intérieur déclencherait un dialogue sur ce PJ. Mais pour cela, pas besoin de triggers ni de OnHeartBeat. Tout ce fait grâce à des scripts récurrents, lancés selon une cadence optimisée pour leur fonction.

Bon ok, mon explication n'est pas claire mais le lien que je vous ai refilé l'est pas beaucoup plus et il est en anglais

Si vous en avez marre de la parlotte et que vous voulez du concret, alors c'est ici :
http://www.summermeat.net/memeticai/download.html

Essayez un des modules de démonstration pour voir Personnellement j'ai eu que le temps de tester le dernier, où on y voit un gamin qui courre dans une grotte sombre avec une torche, et des rats qui fuient la lumière des torches et qui le reste du temps se baladent et viennent vous mordre les orteils.
Hallucinant

Donc, disons que c'est un ensemble de scripts qui a un potentiel énauuuurme, mais à réserver aux experts ou aux téméraires

C'était Taern, en direct du Vault. A vous les studios
A priori pas énorme, je me suis beaucoup intéressé à cette mémétic AI à un moment, et je ne pense pas que ce soit beaucoup plus lourd que l'IA standard de Bioware, qui bien qu'elle ne fasse pas grand chose, en fait plein d'inutiles....

Cependant, comme je ne me suis pas vraiment penché sur les performances (point de vue matériel), je mets cet avis sous condition, si quelqu'un veut tester...
Je vais essayer de créer une ville réellement vivante, et on verra ce que ça donne.

En dehors de ça, je suis vraiment le seul à m'exalter devant la beauté d'un tel système ? Bon ok, j'en rajoute un peu, mais je suis vraiment fan de chez fan

Je dois rentrer dans la catégorie de gens dont l'auteur parle sur la page d'accueil :
"Ce projet est dédié à toutes les personnes qui veulent conquérir le monde grâce à une armée de robots dotés d'intelligence artificielle, mais qui sont trop fainéants pour le faire eux-même."

C'est une IA modulaire, donc il faut construire toi-même l'intelligence de combat de ta bestiole, néanmoins il doit déjà y avoir des trucs tout faits.
L'un des modules de démo montre l'affrontement de deux groupes de squelette équivalent en nombre, l'un des groupes est dirigé par l'IA de Bioware, l'autre par une mémétique IA...
Le résultat du combat est sans appel : la moitié des mémés squelette survivent à leurs adversaires plus classique.
Bah si les mémés sont programmés pour contrer les autres, forcément

Ensuite on fera des mémés2 pour contrer les mémés1, etc, etc...

C'est comme les editeurs de jeu qui sortent une version bugguée, puis un add-on qui corrige les bugs, puis l'add-on 2 qui corrige les bugs du add-on 1, etc

Bon je joue dans la mauvaise foi, je suis persuadé que ça doit être chouette de voir NWN-Sim's mais je préfère quand même l'I"A" des joueurs
Alors c'est là que nos avis divergent Delphinea

Comme le dit Jedaï, certains memes sont préinclus, cependant il y en a encore relativement peu de disponible car le système est encore en développement.
Enfin bon, d'une part on peut lier plusieurs memes pour former une séquence plus complète (j'adore ce truc ), et d'autre part en peut en faire nous-même.

Allez, j'y retourne
L'IA des joueurs est pas mal (bien que parfois très défaillante il faut bien l'admettre, c'est un truc totalement buggé et chaotique même chez les perso d'alignement loyal ), mais donner une IA aux monstres est bien aussi.

Du moment que mon gros dragon qui est censé être assez fort se donne la peine de lancer des Time Stop, des Disjonction et je ne sais quoi d'autre sur mon Ensorceleur 20 de test, au lieu de lancer des dissipations de base et de lui courir après pour le renverser (ouais mon dragon est un tricheur qui passe son temps à renverser ses adversaires au corps à corps), ça me suffit.

A croire qu'il a prit la grosse tête et qu'il se dit que c'est vraiment pas la peine d'utiliser toute sa puissance contre mon Ensorceleur alors que quelques coups de patte suffisent... Il est peut-être plus intelligent que ce que je croyais finalement .

Me reste plus qu'à essayer de jeter un oeil à cette IA (ou à attendre que Taern trouve quelques jolis trucs )
Le problème d'une IA de séquence de lancement de sorts (ou de n'importe quoi d'autre en combat), c'est qu'il suffira de 2 ou 3 affrontements à un joueur intelligent pour en saisir les failles et pour détruire ton monstre sur lequel tu as passé 3 jours à scripter l'IA. Et tu vas faire quoi après ? Rescripter une IA pour contrer le joueur ? Ou alors créer une IA aléatoire ?

Un monstre peu intelligent, tu peux laisser Bioware le guider (les squelettes par exemple, c'est pas très futé), pour les monstres style le gros dragon, rien de tel que de l'incarner toi-même en tant que MD, crois moi ça vaut tous les scripts d'IA qui existent

Je ne dis pas qu'un tel système est inutile, loin de là, je comprends que certains types de module puissent avoir besoin de donner une attitude plus cohérente à leurs monstres/PNJ.
Mais dites vous bien que les joueurs en face auront vite fait de trouver la faille dans votre IA et ça reviendra au même que de se trouver face aux bots de Bioware.
Y a un truc qui me gène (même si je me suis bien amusé avec le mod ). Quand les rats s'approchent d'une source lumineuse d'un tile, ils fuient, quand ils s'approchent du garçon qui tiens la torche, ils fuient aussi mais si c'est nous qui tenons une torche, ils ne fuient pas. C'est dû à quoi ça ?
Citation :
Rescripter une IA pour contrer le joueur ? Ou alors créer une IA aléatoire ?
Le but d'une véritable IA c'est précisément de ne pas avoir à faire ça.
L'IA, ça n'est pas du tout mon domaine, pour être très franc je n'y connais rien, mais pendant mon cursus j'ai rencontré des gens qui se sont spécialisés là dedans. Le nom d'IA appliqué aux scripts de combat des jeux vidéo est à la limite de la publicité mensongère . Le minimum pour une IA c'est que son comportement soit évolutif, elle doit pouvoir apprendre. Ne nous trompons pas, il est tout à fait possible de programmer cela (cf algorithmes génétiques, réseaux neuronaux...) . C'est de là que vient la personne qui à lancé cette idée de mimétique appliquée à NWN je crois, peut-être un pro ou alors un amateur éclairé, je n'en sais rien, et suis incapable d'en juger. Toujours est-il que ce n'est pas un type de programmation qu'il a inventé, il s'agit plutôt d'appliquer une version (très) simplifiée de ce qui se fait en recherche en intelligence artificielle à NWN.
Dans le cadre d'un affrontement homme machine, il n'existe pas de "stratégie optimale" contre une IA ainsi programmée. L'application est évidemment très limitée par le cadre du jeu vidéo. Ceci dit, penser que de deux programmes, le plus complet, le plus satisfaisant de façon générale, est celui qui consomme le plus de ressource, est généralement une erreur si les design ne sont pas comparables.
Quoi qu'il en soit, d'après le module de test, cela ressemble plutôt à une série de scripts automatiques de comportement, voir de réaction; plutôt qu'une véritable IA.

Je ne vois nulle par les rats assimiler que quand ils s'approchent de la torche ils prennent des baffes et que c'est mal pour eux, ils reviennent toujours ces bêtes rats
Tu as absolument raison, je me suis un peu laisser emporter :bouffon: .
Le fait est que "modulariser" les comportements me semble une bonne approche et comme l'explique le site (j'ai regardé vite fait ceci dit), cela permet aussi d'avoir des comportements de groupe, des interactions complexes, les comportements pouvant passer d'une créature à l'autre, ou entraîner une réaction spécifique sur une autre créature , sans pour cela que cela coûte plus chère que DetermineCombatRound, qui ignore à peu près tout de l' environnement, et qui n'est pourtant pas vraiment économique.
Quelqu'un de Bioware a dit qu'ils refaisaient l'IA de combat pour SOU ceci dit, une bonne chose parce que franchement, le ratio résultat/ressource est pas très bon pour l'instant (et les scripts qui viennent se greffer dessus ne peuvent pas vraiment corriger le tir) . Un des gros problème est l'usage systématique du ClearAllActions, qui vient de la façon un peu crétine à mon avis, avec tout le respect qui est du au code Bioware bien sûr , dont ils ont implémenté ActionAttack, ce dernier point ayant peu de chance de changer j'en ai peur. Certes ça permet de pas avoir de bug sans se prendre la tête, mais c'est une solution un peu trop radicale .
Pour ce qui est des rats, ce serait quand même moins intéressant s'ils n'y revenaient pas non? Après tout les rats ne sont pas des flèches non plus...
Le problème est que si on veut garder une certaine cohérence, l'IA ne pourrait s'appliquer qu'à un être (monstre ou PNJ) qui resterait en vie
Et souvent, dans le cas d'une créature tout du moins, elle survit rarement à plus d'un affrontement contre la même personne utilisant la même tactique (en supposant que cette dernière utilise à chaque fois la même tactique, ce qui est peu probable dans le chef d'un PJ ayant atteint l'âge de raison).
Donc, le fait de créer une IA ne sert à rien pour ce genre de créature, vu qu'elles n'auront jamais à assimiler quoi que ce soit, car elles mourront avant ou bien affronteront un autre adversaire ou une autre tactique.

Pour ce qui est des actions de groupe, les fonctions de Bioware existent déjà, et rien ne vous interdit de changer les scripts de combat par défaut par un script à votre sauce (je l'ai d'ailleurs fait pour les prêtres d'un même temple, qui lorsqu'ils sont attaqués, les meilleurs combattants vont au corps à corps et les soigneurs se placent en deuxième ligne et soignent tout en lançant des sorts de protection, pour ensuite venir au corps à corps et les autres soigner, etc).
Dans ce genre de cas là oui, ça peut avoir son utilité, mais je n'appelle pas ça de l'IA personnellement
Que de réactions ça fait plaisir à voir.

Pour répondre à Mastokk, si les rats ne réagissent pas à ta torche, c'est parceque c'est pas vraiment prévu et que paradoxalement ça compliquerait beaucoup le script. (et c'est là qu'on sent encore l'absence du OnEquip... ouin )
Quoique maintenant que tu en parle j'essaierais bien de modifier ça

D'autre part, Sire Pom-pom a vu tout juste. Ce système de "mimétique" s'inspire beaucoup d'une approche du comportement humain utilisée dans de vraies IA. Même si évidemment NWN ne deviendra jamais vraiment un simulateur de vie, il est possible de s'en rapprocher de manière assez amusante.

Alors maintenant que j'ai déjà quelques bonnes heures d'expérience sur le montre (car oui, c'est un monstre : je n'ai jamais vu de scripts écrits de cette manière, c'est simple, on en oublie que c'est du NWScript ), je vais pouvoir vous faire part de ce que j'ai appris, et surtout corriger ce que j'ai dit plus haut.

Donc, concrètement le système fonctionne ainsi (je simplifie hein) :

- tout d'abord, on assigne des memes à des créatures; ce sont des comportements (ou des séquences de comportements) qui ont un niveau de priorité ainsi que des "flags" (par exemple, FLAG_REPEAT pour un meme qui devra se répéter à l'infini).
Les memes sont définis de 2 manières : soit par script (i_<nomdumeme>_<suffixe>), soit par libraire, le plus simple étant d'après moi le script.
A chaque meme correspond 3 "évènements", désignés par les suffixes _go, _end, _brk (début, fin et annulation) (les 2 derniers sont optionnels)
Un bon exemple est celui des rats : ils possèdent un meme de basse priorité (un comportement d'arrière plan en quelque sorte) qui leur fait faire l'équivalent d'un WalkWayPoints.
Jusque là, rien de bien compliqué

- ensuite viennent les générateurs; c'est eux qui vont tirer parti des évènements d'une créature. Comme pour les memes, les générateurs possèdent plusieurs évènements, qui sont ici évident : _atk (OnAttacked), _see (OnPerception), etc.
Ils se définissent par script ("g_<nomdugénérateur>_<suffixe>") ou par libraires.
On va assigner ces générateurs sur le OnSpawn des créatures, tout pareil que les memes.
Les rats possèdent un générateur appelé g_goto_see, qui est enclenché (avec StartGenerator(), puisqu'il est également possible de pauser, voire d'arrêter un générateur) sur leur OnSpawn. Sur le OnPerception des rats, ce script va être lancé et les rats vont automatiquement s'approcher de l'objet qu'ils voient (il y a quelques conditions supplémentaires, mais en gros c'est ça).

- puis viennent les events. Ils se définissent comme les deux objets ci-dessus ("e_nom_suffixe"), mais eux se rapprochent plus d'un UserDefinedEvent. Ils sont déclenchés d'une façon similaire, c'est à dire qu'un autre script pourra envoyer un signal n, et si l'event possède un trigger sur le signal n, alors il se lance. Comme les autres, tous pleins de paramètres possibles, enfin pour l'instant j'en suis pas là
Pour en revenir aux rats, ils possèdent un event avec un trigger sur le signal n=200. Cet event, appelé e_avoidlight_go (avoid light = éviter la lumière), les fait s'enfuir en courant (si tant est qu'on rat peut courir) et en couinant.
Mais quand donc est déclenché cet event ? c'est là qu'entrent en jeu les emitters (émetteurs ? emmetteurs ? éméteurs ? bon on va garder le mot anglais )

- les emitters sont différents du reste puisqu'ils n'ont pas de script associé; ils se définissent par une commande à rallonge (13 arguments, j'ai compté), puis peuvent être assignés à tout et n'importe quoi : location, créatures et objets il me semble. En fait ce sont des AreaOfEffect d'un rayon de 10m (valeur qui n'est pas augmentable, et diminuable à ses risques et périls, vu qu'un rayon inférieur à 10m fait semble-t-il intervenir un script récurrent un peu lourdingue), et il est possible de définir ce qui arrive lorsque quelqu'un pénètre dans cette zone. Texte sur le PJs, dialogue, autres trucs bizarroïdes et surtout : envoi d'un signal à la personne qui vient de rentrer

En clair : les rats se baladent par défaut dans la grotte en suivant leurs waypoints. Si ils aperçoivent un PJ, ils lui fonce dessus et lui couinent dans les oreilles pendant un petit moment avant de le laisser tranquille et de retourner à ses occupations. Si jamais ils entrent dans le rayon d'un emitter de type "lumière" (il y en a un, mobile, sur le petit garçon, et un sur chaque torche à l'entrée de la grotte), alors ils s'enfuient, restent à l'écart pendant un certain temps puis reprennent leur ronde de waypoints.
Voilà, vous connaissez le secret des rats luminophobe

Je vois déja Delphinea rappliquer pour me crier dessus que tout ça, c'est faisable aussi simplement avec des scripts tout petits et astucieux, que y'a pas besoin de tout ce boxon etc. Et ben, à vrai dire, t'as tout à fait raison Ce qui est intéressant, ce n'est pas de faire en sorte qu'un rat fuie une torche et point barre. Ce qui est intéressant, c'est le fait de pouvoir ajouter de nombreux comportements différents, de changer leur priorité, d'utiliser les events pour créer des réactions réalistes, de superposer les générateurs pour complexifier les réactions des PNJs à l'infini.
L'intérêt d'un tel système, c'est qu'il n'a pas vraiment de limite. Alors que bidouiller l'IA de Bioware pour en faire quelquechose de sympa, ça tourne rapidement au casse tête chinois (j'ai déja essayé :/). Ici, contrairement aux apparences, et une fois qu'on maîtrise le système, créer un comportement complet est loin d'être compliqué. Les routines internes se chargent d'affecter les actions aux PNJs, de les réactualiser, de déclencher le bon script au bon moment, etc. En clair, avec de tels outils tu n'utilise même plus ClearAllActions().

Maintenant, vous pensez ce que vous voulez, mais personnellement j'en suis encore sur le cul

Cela dit, le réel intérêt de ce système à mes yeux n'est pas vraiment ludique (puisqu'une IA très développée, si elle n'est pas parfaite, ne vaut pas vraiment le coup), mais expérimental . Enfin personnellement je m'amuse autant qu'avec mes Lego quand j'étais gosse

Bon, c'est pas tout ça mais je suis crevé Bonne nuit à ceux qui auront eu le courage de lire ça jusqu'au bout :bouffon:
J'ai tout lu

En gros ils ont créé une bibliothèque de OnScripts pour faciliter la vie des créateurs de module qui veulent donner un aspect "vivant et réaliste" à leurs PNJ/Monstres sans devoir le scripter eux-même, mais en utilisant simplement leur nomenclature et leurs fonctions.

C'est utile, ça y a pas à dire, disons que ça mâche le boulot. (Mais c'est pas de l'IA )

Néanmoins
Citation :
Le problème d'une IA de séquence de lancement de sorts (ou de n'importe quoi d'autre en combat), c'est qu'il suffira de 2 ou 3 affrontements à un joueur intelligent pour en saisir les failles et pour détruire ton monstre sur lequel tu as passé 3 jours à scripter l'IA. Et tu vas faire quoi après ? Rescripter une IA pour contrer le joueur ? Ou alors créer une IA aléatoire ?
Je veux pas que mon dragon se contente d'une séquence de sort mais plutot d'un truc du genre :
- le PJ a des sorts actifs de bas niveau sur lui : dissipation
- le PJ a des sorts actifs de haut niveau sur lui : disjonction
- S'il n'y a plus de dissipation, utiliser les disjonction et vice-versa.
- Si les PJs sont regroupés dans une même zone : sort de zone
- etc.

Prend 2 archers et un gros monstre et regarde ce qu'il se passe. Le premier archer tire, le monstre va vers lui, il s'enfuit. Le second tire, le monstre fait demi-tour et va vers lui, il s'enfuit. Et ainsi de suite. Balancer Arrêt du Temps et Doigt de Mort serait bien plus simple mais ce crétin de dragon veut rien comprendre.

Bon, faudra que je me penche sur tout ça dès que j'ai un peu plus de temps libre. Allez hop, dans les favoris pour pas oublier.
Je suis d'accord avec Delphinea, un dragon c'est pas de la chair à PJ qu'on spawn à droite ou à gauche.

Maintenant, quand un DM contrôle un dragon, il a pas accès au souffle. :o( C'est quand même dommage.
T'es sûr pour le souffle ? Il me semble l'avoir vu.

Click droit sur la bestiole pour faire apparaitre le menu radial et en fouillant un peu tu dois arriver sur une "icone" te donnant accès aux pouvoirs du monstres. Pour le dragon, tu trouve le souffle et l'aura de terreur.
Par contre, je me rapelle pas si ces pouvoirs sont mis automatiquement lorsqu'on crée un dragon dans le toolset.

Le dragon était un exemple, c'est juste une des bestioles que j'ai le plus tester. Et il serait pas fait pour mettre à droite à gauche, faut pas exagérer non plus je vais pas laisser trainer n'importe où une créature pouvant raser une ville...
Bon je vais créer plein de gob et raler sur leur intelligence lamentable (bien que pour eux ce soit un peu normal ).

[Edit] : Pour avoir accès au souffle, il faut prendre le contrôle de la créature mais pas avec les pleins pouvoirs (ou alors j'ai pas su le voir dans ce mode là).
Citation :
Je veux pas que mon dragon se contente d'une séquence de sort mais plutot d'un truc du genre :
- le PJ a des sorts actifs de bas niveau sur lui : dissipation
- le PJ a des sorts actifs de haut niveau sur lui : disjonction
- S'il n'y a plus de dissipation, utiliser les disjonction et vice-versa.
- Si les PJs sont regroupés dans une même zone : sort de zone
- etc.
Si tu veux simuler un semblant de cohérence, ton dragon devrait d'abord faire une détection avant de balancer son artillerie, je parle en action pas en script. Tu peux modifier le sort d'identification de façon à ce qu'il fonctionne comme un sort de détection de la magie (avec intensité, type de magie, etc)
-Si le dragon détecte de l'abjuration très intense, il lancera une disjonction; s'il détecte de la divination très faible, il est fort possible qu'il ne lance rien et attaque directement.
-Ensuite, le dragon lancera un de ses sorts selon ce qu'il a détecté.

l'IA de Bioware fonctionne comment ? Prenons l'exemple d'un mage PNJ.

Si le Mage possède des sorts de mage à lancer, il le fera comme suit:
(Il a 25% de chance de procéder dans cet ordre):
-> Utiliser ses capacités de soin s'il est blessé.
-> S'il possède un sort défensif ou de protection, il lancera la version plus puissante en premier, ensuite la plus faible, ensuite sur ses alliés.
-> Ensuite il lancera ses "buffs" (sorts d'amélioration) personnels, et ensuite sur les autres s'il lui en reste.

(Deja à ce moment là tu as le temps de le buter 10 fois, mais "heureusement" il y a 75% de chance pour qu'il utilise un sort offensif directement sans passer par la phase de "protection")

-> S'il est attaqué au corps à corps, il fera ceci:
- Si l'opposant est seul: Sort Offensif de Contact (le plus haut niveau d'abord, ensuite en décroissant jusqu'à trouver un qui peut être utilisé); ensuite sort à distance (au corps à corps, oui oui ), ensuite un sort de zone, et pour finir n'importe quel sort offensif.
- Si les opposants sont plusieurs: Sort Offensif de Zone (le plus haut d'abord, etc); ensuite sort de contact puis sort à distance.
-> S'il est attaqué à distance, il fera ceci:
- Si la distance est supérieure à 5.0 et si il y a au moins un allié à portée de la cible, il lancera un sort qui n'a pas d'effet de zone.
- Si la distance est supérieure à 5.0 et si ils sont au moins 2 ennemis, il lancera un sort de zone.
- Ensuite il lancera n'importe quel sort de distance qu'il possède.
-> S'il voit des ennemis à distance, il fera sensiblement la même chose que ci-dessus.
-> Il utilisera un sort offensif
- Il attaquera la créature visible la plus proche de la même faction que celui l'ayant attaqué. (Le bon truc, tu tires de loin et tu laisses ton pote au corps à corps, il mangera le sort )
- Il va d'abord vérifier qu'il possède un sort offensif qui n'a pas d'effet de zone, et lancer le plus haut niveau qu'il possède; ensuite n'importe quel sort à portée, et pour finir n'importe quel sort de contact.
-> S'il n'en a plus, il attaquera au "corps à corps".
- Si l'opposant est seul, il s'approchera pour l'affecter par un sort de contact, puis de distance, puis d'effet de zone, etc... bref la série habituelle du robot-mage
- S'ils sont plusieurs, d'abord le sort de zone, ensuite robot-mage.

Bref, on remarque vite que les PNJ mages font tous la même chose, et le plus ridicule est qu'ils choisissent d'attaquer ou de se protéger selon le résultat d'un integer "Random"

Si tu veux bosser l'IA de combat, c'est dans le "nw_i0_generic" que ça se passe
Je rajouterais un petit truc sans importance.

- Contre 3 vénérables dragons d'or, mon dragon lance Dissipation de la Magie (les dragons d'or le tapent au corps à corps).
- Contre 5 vénérables dragons d'or, il se souvient qu'il a des sorts de niveau 9 .

Euh ? Il faut qu'il affronte des ennemis de quelle puissance pour se remuer un peu ? Après ça, c'est normal qu'il s'amuse à affronter mon Ensorceleur au corps à corps (par contre il lance de temps en temps des Doigts de Mort, c'est un bon début).

Bon, j'irais regarder le "nw_i0_generic" même si je suis quasiment certains de rien y comprendre...
En fait il utilise son meilleur "Talent" en fonction du CR de ce dernier. Voici ce que dit la fonction utilisée dans ce cas là:

GetCreatureTalentBest
Code PHP:

// Get the best talent (i.e. closest to nCRMax without going over) of oCreature,
// within nCategory.
// - nCategory: TALENT_CATEGORY_*
// - nCRMax: Challenge Rating of the talent
// - oCreature
talent GetCreatureTalentBest(int nCategoryint nCRMaxobject oCreature=OBJECT_SELF
Alors le plus drôle reste à venir, regarde ça

Tu te demandes certainement quelle valeur va prendre nCR dans la fonction ici au-dessus. Tu te dis le CR des ennemis, et ben non...raté, regarde plutôt la fonction retournant la valeur de nCR:

Code PHP:

int GetAssociateCRMax()
{
    
int nCR;
    
/*
    if(GetAssociateState(NW_ASC_HAVE_MASTER))
    {
        object oEnemy = GetNearestCreature(CREATURE_TYPE_REPUTATION, REPUTATION_TYPE_ENEMY, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN);
        oEnemy = GetFactionStrongestMember(oEnemy);
        int nHD = GetHitDice(oEnemy);
        if(GetAssociateState(NW_ASC_OVERKIll_CASTING))
        {
            nCR = 20;
        }
        else if(GetAssociateState(NW_ASC_POWER_CASTING))
        {
            nCR = nHD * 2;
            if (nCR > 20) {nCR = 20;}
            if (nCR < 5) {nCR = 5;}
        }
        else
        {
            nCR = nHD + 4;
            if (nCR > 20){nCR = 20;}
        }
        return nCR;
    }
    */
    
return 20;

Toute la fonction en Rem, pour avoir un CR ayant une valeur constante: 20

Mais en ce qui concerne les dragons en particulier, voici le script d'IA correspondant:
Code PHP:

else if(nClass == CLASS_TYPE_DRAGON)
        {
            
//Use healing
            
if(TalentHeal()) {return;}
            if(
TalentCureCondition()) {return;}
            if(
d100() < 15)
            {
                if(
TalentRangedEnemies(oIntruder)) {return;}
                if(
TalentMeleeAttacked(oIntruder)) {return;}
            }
            if(
TalentPersistentAbilities()) {return;}
            if(
TalentAdvancedProtectSelf()){return;}
            if(
TalentUseProtectionOnSelf()) {return;}
            if(
TalentDragonCombat(oIntruder)) {return;}
        } 
Donc ici on peut voir que le dragon va en priorité:
- Se soigner
- Attaquer les ennemis à distance ou au corps à corps dans 15% des cas
- Utiliser ses capacités innées (aura de peur, etc)
- Se lancer ses meilleurs sorts de protection
- Se lancer ses autres sorts de protection
- Attaquer à l'aide de ses capacités de Dragon, qui sont dans l'ordre:
- Son souffle
- Ses attaques spéciales de mêlée (renversement, etc)
- Le fabuleux: "ActionAttack(oTarget);" une des fonctions les plus daubesques de NWN

Bref, rien de glorieux dans tout ça, pas une once d'IA
Ah, là, je dois avouer que je suis déçu par Bioware
Enfin bon, l'IA d'un jeu comme NWN n'est pas aussi primordiale que celle d'un bon gros jeu de stratégie

Bon, si j'ai le temps et le courage, j'essaierais de faire une IA de dragon plus intéressante avec les mimétiques, mais je promet rien
*3 tubes d'aspirines plus tard*

Arfeuh, pas très génial le dragon... Et dire que c'est la même chose pour tous les PNJs j'ai l'impression...

Par contre, je confirme que pour ce qui est de se soigner, il sait faire, mais c'est bien le seul truc qu'il fait correctement. Et encore...

Bon, je crois que je vais attendre de voir s'ils ont modifié tout ça dans SoU (c'était prévu je crois), ce sera le plus simple.

Et ça fait quoi si je mets 1000 (autant prendre un très gros chiffre) au lieu du 20 pour le CRMax ? Ca devrait changer quelque chose au niveau des attaques qu'il utilise ?

[Taern] : Pourquoi faire une IA de dragon ? Une IA générique réglée comme du papier à musique serait tout aussi bien, ensuite libre à chacun de la modifier suivant ses créatures non ? Et si cette IA générique existe déjà, ben il reste plus qu'à en faire une spécifique pour chaque créature (ça doit être drole de voir des gobs courir dans tous les sens lorsque des ennemis trop puissant pour eux les chargent).
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés