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.
| |
| | |
|