M   E   N   U

  N  E  W  S
    News
       Mugen News
       Site News
       Old News

 D  O  W  N  L  O  A  D
    Characters
       Athena 2001
       Athena 2002
       Neo Athena
       Evil Ryu
       Violent Ken
       Lynn Baker
       Karin
       Sissy
       Sakura
    Hosted
       Diao
       Kyo
    Stages
       Neogeo 1
       Neogeo 2
       Neogeo 3
       Neogeo 4
       EFZ
       EFZ 2
       Melty Blood
       Others
    Add-ons
       Screen Pack
       Tools/Others
       Video

 W  I  P
    Characters
       Mina

 D  O  C  S
    Tutoriels (FR)
       Personnages
       Stages
       Barres de vie
       Screen Pack
       Intro-Fin
    FAQ (FR)
       Lexique
       Mugen
       Personnages
       Stages
       Screen Pack
       Communauté
    Mugen Torch
       Text in French
       Text in English

 A  R  T  S
       Iris-Net



Tutorial Création et Adaptation de personnages sous Mugen par Sunny : 5eme Partie


L'intelligence artificielle (AI)


Pour la dernière grosse partie sur la création d'un perso, nous resterons dans le CMD. L'objectif en créant une intelligence artificielle est de ne pas laisser le programme gérer n'importe comment le perso lorsqu'il en a la charge. Laissée à elle même, l'IA de base se contente d'exécuter des commandes aléatoirement. Or, nous nous voulons que notre perso effectue spécifiquement certaines actions à des moments clés : lorsque notre perso ou notre adversaire se trouve dans certains états.

La création de l'IA se passe en deux temps : l'activation de l'IA et son exécution.

Activation de l'IA

Pour éviter que le programme n'exécute n'importe comment les commandes, nous allons diviser la deuxième partie du CMD en deux : une partie qui sera réservée au joueur et une autre pour l'IA. Nous différencierons les deux parties par une variable. Lorsque celle-ci sera activée, seules les commandes de l'IA pourront être exécutées. La variable quand à elle ne pourra activée que par une commande que seul Mugen pourra exécuter.

Explications : dans son IA de base, Mugen choisit aléatoirement une commande dans la première partie du CMD et regarde dans la deuxième partie du CMD si elle est exécutable. Si elle est exécutable, Mugen effectue l'action qui lui est associée. Dans le cas contraire, il en choisit une autre, toujours aléatoirement, et regarde si elle est exécutable...

Lorsque l'on définit une commande dans la première partie du CMD, il est théoriquement possible de créer n'importe quoi : on peut par exemple demander que le joueur appuie sur les quatre directions simultanément, ou qu'il effectue une combinaison de 15 touches en 1 seul tick. Humainement, il est impossible d'effectuer ce type d'action. Par contre, ces commandes ne gênent pas le moins du monde l'IA de base, puisqu'elle n'essaie pas de les effectuer - elle en est capable (voir ce que j'ai dit au paragraphe précédent) !
Pour créer une IA, nous allons donc commencer par créer une commande impossible, exécutable uniquement par l'IA de base. Cette commande impossible activera une variable qui obligera l'IA de base à utiliser les states que nous lui aurons créés spécifiquement.

Exemple de commande impossible :

[Command]
name = \"AI01\"
command = ~D, D, D, D, D, D, D

time = 1

Ici, pour activer cette commande, le joueur devrait appuyer sur la direction bas sept fois en moins de 1/60ème de seconde ! Impossible pour un joueur normal, mais tout à fait faisable pour le moteur de jeu. Créez en une dizaine, une quinzaine, une vingtaine... plus il y en aura, plus, il y aura de chances que Mugen tombe dessus par hasard.

Lorsque le programme de base tombera dessus, il activera la variable de l'IA (dans le cas présent la variable 20) dans la deuxième partie du CMD :

; AI detect
;----------

[state -1]
type = VarSet
trigger1 = command = \"AI01\"
trigger2 = command = \"AI02\"
trigger3 = command = \"AI03\"
trigger4 = command = \"AI04\"
trigger5 = command = \"AI05\"
trigger6 = command = \"AI06\"
trigger7 = command = \"AI07\"
trigger8 = command = \"AI08\"
trigger9 = command = \"AI09\"
trigger10 = command = \"AI10\"
trigger11 = command = \"AI11\"
trigger12 = command = \"AI12\"
trigger13 = command = \"AI13\"
trigger14 = command = \"AI14\"
trigger15 = command = \"AI15\"
v = 20
value = 1

Une fois cette variable activée, l'IA va passer du mode mugen au mode intelligent. A toutes les actions réservées aux joueurs, nous ajouterons la ligne :

triggerall = var(20) = 0

Les actions réservées à l'IA recevront quant à elles la ligne :

triggerall = var(20) = 1


Le joueur ne pourra ainsi jamais accéder au mode IA (puisqu'il ne pourra pas effectuer les commandes impossibles et donc activer la variable) et une fois la variable activée, l'IA ne pourra pas revenir au mode aléatoire.

Programmation de l'IA

Une fois l'IA activée, il faut définir quelles actions sont à effectuer et à quel moment. Avec tous les triggers disponibles (P2Dist, StateType, p2StateType, P2MoveType, etc...), il est possible de savoir ce que fait l'adversaire et donc, de décider ce que notre perso doit faire.

Exemple pour un uppercut (coup normal anti-aérien) :
- pour effectuer ce coup, le joueur ne doit pas se trouver dans les airs :
StateType != A
- et il doit avoir le contrôle :
ctrl
- l'adversaire doit au contraire se trouver dans les airs (ce coup est un anti-air) :
P2StateType = A
- il ne doit pas être en train d'attaquer (sinon on risque soi même de s'en prendre une) :
P2MoveType != A
- il doit être vivant (sinon le perso risque de continuer à effectuer son coup alors que le match est terminé) :
P2Life > 0
- enfin, il doit être à la portée de notre arme :
P2BodyDist x <= 80
- bien entendu, le mode IA doit être activé :
var(20) = 1
- si toutes ces conditions sont réunies, la probabilité que ce perso effectue cette attaque est de 90% :
random <= 900

En définitive, notre state -1 ressemblera à :

; Crouch Fierce Attack
;---------------------

[state -1]
type = ChangeState
triggerall = var(20) = 1
trigger1 = StateType != A && ctrl && random <= 900
trigger1 = P2StateType = A && P2Movetype != A && P2Life > 0 && P2BodyDist x <= 80
value = 410

Exemple pour un projectile :

- le joueur ne doit pas être dans les airs :
StateType != A
- il doit avoir le contrôle :
ctrl
- et il ne doit pas déjà avoir lancé un autre projectile :
NumProj = 0
- son adversaire peut être debout, accroupi ou dans les airs mais il ne doit pas être étendu au sol (le projectile ne le toucherait pas) :
P2StateType != L - et il doit toujours être vivant :
P2Life > 0
- si le joueur a peu d'énergie, il préférera attaquer de loin ; il utilisera donc plus souvent le projectile :
life < 300
random <= 400
- si le joueur a plus d'énergie, il préférera utiliser d'autres coups :
life >= 300
random <= 100
- l'Ia doit être activée
var(20) = 1

Ce qui nous donne :

; Long Messianic Blast
;---------------------

[state -1]
type = ChangeState
triggerall = var(20) = 1
triggerall = StateType != A && ctrl && NumProj = 0
triggerall = P2StateType != L && P2Life > 0
trigger1 = life >= 300 && random <= 100
trigger2 = life < 300 && random <= 300
value = 1020

Dernier conseil pour l'IA : organisez correctement vos states et vos triggers ou vous risquez de vous y perdre.
Votre IA est prête ? Lancez là dans le mode de démonstration de Mugen et vérifiez bien qu'il n'y ait aucun bug.



 
   Home
   About
   FAQ
   Disclaimer
   Staff/Thanks
   Contact



   Forum in french
   and english.

   Iris-Net



   
   Delta Park
   Sunny World
   Neoxfight Studios
   Mike Mugen
   Gods Anger
   Matmut's Creations
   Byakko
   :o domain
   Fun Factory
   Mugen Guild
   Anime Mugen
   Shin Mugen





Cute Mugen | © 2002 - 2004 | All Rights Reserved.