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 : 4eme Partie
En pratique (suite)
Le CMD
Bon, nous avons crée une attaque. Maintenant il faut l'activer dans le fichier des commandes pour que le
joueur puisse faire faire cette attaque à ce personnage.
Les commandes font partie du state -1 : ce sont les
actions de ce state. Comme toute action d'un state, il faut indiquer à Mugen quel est le but de cette action et sous quelles
conditions il doit l'effectuer.
En appuyant sur un bouton, le joueur va faire entrer le personnage dans un nouvel
état : celui d'une attaque. L'action qui devra être effectuée par le programme est de changer le state du perso. L'action
sera donc un ChangeState. Le state d'arrivée sera le state 200.
Sous quelles conditions cette action peut elle
être effectuée ? 1 - le perso doit appuyer sur le bouton \"a\" -> command = \"a\" 2 - cette attaque est effectuée lorsque
le perso est debout ; il ne doit pas être capable de la faire si il est en l'air ou accroupi (faites un essai, vous
verrez ce qui se produit) -> StateType = S 3 - le joueur doit être dans un state où il ait la possibilité de bouger
(pas lorsqu'il est déjà en train d'attaquer où qu'il est en train de se recevoir un coup par exemple) -> ctrl (sous
entendu ctrl = 1)
Cela nous donne donc :
[State -1] type = ChangeState value = 200
trigger1 = command = \"a\" trigger1 = StateType = S trigger1 = ctrl
Toutes ces conditions doivent être remplies
en même temps. C'est pour cela que leurs triggers sont les mêmes (trigger1). On peut toutefois améliorer un peu la
présentation. Sous certaines conditions, il sera possible de faire cette attaque même si le perso n'a pas directement le
contrôle (pour les combos par exemple = possibilité d'enchaîner immédiatement un deuxième coup si le précédent a touché
l'adversaire). Par contre, quel que soit le state dans lequel le perso se trouve, le joueur devra toujours appuyer sur le même
bouton. De ce constat on peut reformuler l'action précédente sous la forme :
[State -1] type = ChangeState
value = 200 triggerall = command = \"a\" trigger1 = StateType = S trigger1 = ctrl
Enfin, pour clarifier
encore un peu plus cette commande, on peut rassembler les deux dernières conditions sous un même trigger en utilisant un
opérateur logique. Comme les deux conditions doivent être remplies en même temps, nous utiliserons l'opérateur && pour
indiquer que la première condition ET la deuxième doivent être réunies. En définitive, cela nous donne :
[State -1]
type = ChangeState value = 200 triggerall = command = \"a\" trigger1 = StateType = S && ctrl
Et voilà.
Il ne reste plus qu'à tout sauvegarder et à lancer l'environnement de tests pour voir si tout a été correctement et avoir
le plaisir de regarder son personnage rendre les coups qu'on lui avait auparavant donné.
Bon, je pense que vous avez eu le temps de vous entraîner un peu sur les coups simples de votre perso. Je vais rapidement
vous présenter trois astuces simples pour les coups (à peine) un peu plus complexes que l'attaque présentée au départ.
Le perso donne son coup en avançant
Problème :
si on se contente de donner une vitesse de départ, le perso ralentit et s'arrête rapidement à cause de la friction.
Solutions :
1 - Utiliser le physics = N dans le StateDef. Mugen n'appliquera pas la friction et le perso avancera
à vitesse constante. Attention de ne pas oublier d'ajouter une action pour arrêter la vitesse du personnage si celle-ci
redevient nulle avant la fin du state !
2 - Appliquer constamment la même vitesse sur tous les ticks où elle ne doit
pas être nulle :
[State 410, vel 1] type = VelSet trigger1 = AnimElem = 3, >=0 trigger1 = AnimElem = 4, <0
x = 4
(bouton b lorsque Nakoruru est accroupie)
Dans le cas présent, Mugen appliquera une vitesse de 4 au
personnage au troisième élément de l'animation. Cet élément est affiché pendant 4 ticks (voir le AIR de Nakoruru), donc pendant
4 ticks le perso aura une vitesse de 4. Au quatrième élément, la vitesse est différente, donc j'applique une autre vitesse :
[State 410, vel 2] type = VelSet trigger1 = AnimElem = 4, >=0 trigger1 = AnimElem = 5, <0 x = 3.5
Etc... La vitesse diminue constamment jusqu'au onzième élément où elle redevient nulle :
[State 410, vel 9] type = VelSet
trigger1 = AnimElem = 11 ; (Sous-entendu AnimElem = 11, = 0) x = 0
Le mouvement du perso utilise plusieurs
states
Le perso saute donne un coup et atterrit dans un state spécial.
Problème :
si on laisse le perso atterrir
normalement, il ira directement au state de l'atterrissage standard.
Solutions :
1 - Changer le perso de state lorsqu'il touche presque le sol :
[State 630, change state] type = ChangeState
trigger1 = vel y > 0 ; La vitesse verticale est positive : le perso redescend. trigger1 = pos y >= -1 ;
Le perso est au plus à un pixel au dessus du sol. value = 635
(boutons bas + a lorsque Akari est en l'air)
2 - Changer le perso de state lorsque son animation est terminée. On a alors un classique :
[State 231, change state]
type = ChangeState trigger1 = AnimTime = 0 value = 232
(bouton y avec Nakoruru)
Dans ce dernier cas il faut
bien calibrer la vitesse verticale donnée au départ : si celle-ci est trop élevée, le perso se retrouvera trop soudainement au
sol ; si elle est trop faible, le perso se retrouvera au sol avant que l'animation ne soit terminée (il utilisera l'atterrissage
standard dès qu'il aura touché le sol). Mon conseil : commencez par donner une vitesse élevée puis diminuez là petit à petit
jusqu'à trouver la bonne vitesse à appliquer (ici -5.6 -> voir le statedef).
Quelle que soit la solution choisie,
au state suivant il faudra bien repositionner le perso verticalement, ce qui signifie stopper sa vitesse verticale et le replacer
au niveau du sol :
[State 232, vel set] ; stoppe le mouvement vertical type = VelSet trigger1 = Time = 0 y = 0
[State 232, pos set] ; repositionne le perso au niveau du sol type = PosSet trigger1 = Time = 0 y = 0
Pourquoi faire cela ? En retournant dans un state non aérien, Mugen cesse de regarder si le perso touche ou pas le sol. Donc,
si la vitesse verticale n'est pas annulée, le perso continuera à descendre indéfiniment. Par ailleurs, si on a arrêté le
perso alors qu'il était à quelques pixels du sol, Mugen le laissera dans cette position, donnant l'impression que le perso
marche dans les airs !
Pursuit attacks
Je termine par une petite astuce pour les pursuit attacks
(boutons avant/bas + x lorsque l'adversaire de Nakoruru est à terre). Pour cette attaque, on veut que le perso saute sur son
adversaire lorsque celui-ci est à terre.
Problème :
l'adversaire peut être à n'importe quelle distance de notre perso donc
on ne peut pas donner à ce dernier une vitesse horizontale constante (sinon, soit il atterrit trop près, soit il atterrit trop loin) :
il faut donc pouvoir donner à notre perso une vitesse horizontale différente en fonction de la distance qui le sépare de son
adversaire. Pour cela, nous utiliserons le trigger P2Dist pour calculer la vitesse horizontale et nous diviserons cette
vitesse par la durée de notre animation. Cela nous donne dans le Statedef :
velset = (P2Dist x)/33, 8.1 ; -> distance
qui sépare notre perso de son adversaire / durée de notre animation, vitesse verticale
A titre d'info voici la différence
entre P2BodyDist et P2Dist : - P2BodyDist = distance qui sépare le corps du personnage de celui de son adversaire.
- P2Dist = distance qui sépare le centre du personnage de celui de son adversaire.
| |
| | |
|