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.



 
   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.