----------------------------------- Mike Werewolf Samedi 15 Janvier 2005 3:53 00. Le B.A.BA de la création de perso : le debug. ----------------------------------- Qu'est-ce que le debug ? Ce sont des informations qui apparaissent à l'écran, et qui détaillent ce qui se passe "techniquement". Ces informations vont vous permettre de vérifier que tout se passe bien, ou au contraire, vont vous aider à comprendre pourquoi ça ne marche pas comme ça devrait. Comment activer le debug ? Tout d'abord, dans le fichier Data/mugen.cfg, trouvez la partie ;------------------------------------------------------- [Debug] ;Set to 0 to disable starting in debug mode by default. Debug=0 ;Set to 0 to disallow switching to debug mode by pressing Ctrl-D. ;If Debug=1, this will be ignored. AllowDebugMode=1 ;Set to 1 to allow debug keys at all times. Otherwise debug keys ;allowed only in debug mode. AllowDebugKeys=1 ;Set to 1 to run at maximum speed by default. Speedup=0 ;Default starting stage for quick versus. StartStage=stages/stage0.def Explications : * Debug = 0 indique que les informations de debug ne doivent pas être affichées par défaut (plutôt chiant quand vous voulez juste jouer ! :P) * AllowDebugMode = 1 indique qu'on peut accéder aux informations de debug lorsqu'elles ne sont pas affichées. * AllowDebugKeys = 1 indique qu'on pourra se servir des raccourcis de debug à tout moment. Les autres paramètres n'ont pas de grande incidence (laissez Speedup à 0, c'est tout). Ensuite, lancez Mugen, et lancez un combat (en training, par exemple). A partir de là, vous pouvez activer plusieurs infos de debug, en utilisant plusieurs raccourcis, que vous trouverez ici : http://mike.mugen.free.fr/Forum/viewtopic.php?p=11#11 (fin du post). On va détailler deux de ces raccourcis ici, qui sont vraiment spécifiques au debug : Ctrl-D Active/Désactive l'affichage des informations de debuggage. Une fois activé, s'il y a des erreurs mineures dans les persos (comprenez des erreurs qui n'empêche pas le perso de fonctionner, mais qui peuvent être gênantes, exemple : l'attribution d'une valeur à virgule pour un paramètre qui n'accepte que des valeurs entières ou l'inverse), elles sont listées dans l'ordre d'apparition au centre de l'écran (la plus récente en bas). Comme vous pouvez le voir sur ce shot, EK et ER contiennent quelques erreurs (mais rien de méchant, en fait, juste un problème de syntaxe) : http://mike.mugen.free.fr/Explic/debug-errors.png A priori, si vous avez des erreurs qui apparaissent dans cette partie quand vous programmez un perso, c'est qu'il y a quelque chose à corriger ;) Penchons-nous maintenant sur les infos permanentes : http://mike.mugen.free.fr/Explic/debug.png La première ligne donne des infos sur le jeu en général : * Frame = numéro de la frame affichée depuis le début du combat - 1 frame = 1 tick. * FPS = Frames Par Seconde. Normalement, Mugen tourne à 60 FPS, mais comme vous le voyez sur le shot, ça peut légèrement varier. * Vret = 1 ou 0, selon vos paramères dans la section http://mike.mugen.free.fr/Explic/debug-type-air.png C'est notamment le cas pour la plupart des anims réalisées dans les airs (mais pas seulement). Et qu'est ce qu'un looptime, allez-vous me demander ? C'est tout simplement le temps qui doit s'écouler avant que l'anim ne revienne en boucle. Concrètement, ça correspond tout simplement à la durée de l'animation du début à la fin. Et comment on peut avoir un looptime infini ? C'est simple : il y a deux façons. * La première consiste à insérer un "loopstart" dans l'animation : tous les éléments situés avant le loopstart ne seront affichés qu'une seule fois, et tous les éléments situés après le loopstart seront ensuite joués en boucle. Exemple, si j'ai une anim de 4 éléments, et que je mets un loopstart entre le second et le troisième élément, Mugen affichera les éléments ainsi : 1,2,3,4,3,4,3,4,3,4,etc. Bref, l'anim ne revient jamais à l'élément 1, le looptime est donc infini. * La seconde possibilité est basée sur le temps d'affichage de chaque éléments. En effet, pour chaque élément, on indique combien de temps il doit être affiché. Mais dans certains cas, on ne peut pas avoir de durée précise d'affichage d'un sprite, et on ne veut pas que l'anim boucle (exemple : un coup aérien ; on ne peut pas faire de timing précis, car on peut sortir le coup à plusieurs moments différents, et une fois le coup sorti, le perso garde la même posture jusqu'à ce qu'un nouveau coup sorte ou qu'il atterrisse, ou qu'il encaisse un coup). Dans ce cas, on va simplement donner un temps de "-1" au dernier élément de l'animation : celui sera alors affiché indéfiniment, tant qu'on ne changera pas d'animation. Là encore, on ne revient pas à l'élément 1, le looptime est donc infini. La seconde ligne du debug, enfin, est dédiée aux informations de programmation : * State No = State dans lequel se situe le perso * Ctrl = indique si le joueur à la maîtrise du personnage (1) ou non (0) * Type = Correspond au StateType du perso, c'est à dire sa "position" : 1 pour le stand (debout), 2 pour le crouch (accroupi), 3 pour le air (en l'air) et 4 pour le Lie Down (étendu au sol) * MoveType = Correspond au MoveType du perso, c'est à dire au type de mouvement qu'il réalise : 0 pour Idle (inactif ; autre que les autres mouvements), 1 pour Attack (attaque) et 2 pour le GetHit (touché par une attaque). * Time = Correspond au "state time", ou encore au trigger "time". Il en tick depuis combien de temps le perso est dans ce state. Tout ce qui suit varie d'un perso à l'autre (voire, il n'y a pas d'autres lignes), car cela correspond au "debug personnalisé", c'est à dire qu'il est programmé par l'auteur pour afficher des informations qui lui sont utiles (par exemple, pour KFM-Master, j'ai affiché dans l'ordre sur la première ligne : la position X du perso, la distance entre lui et son adversaire, la position X de cet adversaire, le niveau de vie maximal et enfin, la vie réelle ; et sur la seconde ligne s'affiche l'activation ou non du mode KFC - le nouvel hyper que je suis en train de coder pour KFM Master). On peut également accéder aux infos de debug des autres personnages, et des helpers (car les helpers sont considérés comme des joueurs, mais bon, pour l'instant, inutile d'entrer dans les détails...). Pour cela, il suffit de rappuyer sur Ctrl+D : Debug du joueur 2 : http://mike.mugen.free.fr/Explic/debug-P2.png Debug d'un helper : http://mike.mugen.free.fr/Explic/debug-helper.png Si le joueur disparaît (ex : si c'est un helper et qu'il est désactivé) alors que vous affichez ses infos, celles-ci disparaisent, et la seconde ligne n'affiche plus que "Player X Disabled" : http://mike.mugen.free.fr/Explic/helper-disable.png Enfin, la dernière petite chose à savoir pour les infos de Debug : il arrive que les informations apparaissent en jaune : http://mike.mugen.free.fr/Explic/In-opp-CNS.png Vous remarquerez qu'à côté du nom du joueur figure une nouvelle information : "In Ctrl-C : Active/Désactive l'affichage des boîtes de collision, données cibles (en incluant les juggle points restants) et les attributs NotHitBy. Là aussi, on va trouver des informations très intéressantes. Voici ce qui s'affiche lorsqu'on fait Ctrl+C : http://mike.mugen.free.fr/Explic/Clsn-empty.png Les personnages sont entourées de cases de couleur. Ces cases correspondent en fait aux zones de "collision" du personnage. Il en existe de deux types : * Les rouges : elles définissent les zones d'attaque du personnage, c'est à dire les zones qui peuvent potentiellement porter un coup à l'adversaire. On les appelle couramment les Clsn1. Sur l'image ci-dessous, on voit que c'est la jambe de KFM qui frappe : http://mike.mugen.free.fr/Explic/HitMove.png Vous remarquerez aussi que, s'agissant d'un mouvement d'attaque, le nom du personnage est suivi d'un H. * Les bleues : elles définissent les zones où le personnage peut être touché (par des Clsn1, donc). On les appelle couramment les Clsn2. Techniquement, il y a coup lorsqu'au moins une Clsn1 d'un perso entre en contact avec au moins une Clsn2 de son adversaire : http://mike.mugen.free.fr/Explic/target.png NB : En fait, pour être exact, il faut qu'en plus, les Clsn1 aient été "activées" par un HitDef, mais on verra ça plus tard. Lorsque le coup a touché, vous voyez qu'apparait sous le nom de l'attaquant, en rouge, "Target", suivi de l'ID de la target (la "target" étant le joueur touché). Le second chiffre indique le nombre de points de juggle restant. Sans entrer dans les détails, les juggle servent pour les combos. On le verra plus tard. Bien sûr, ces Clsn s'applique aussi pour les helpers et les projectiles. http://mike.mugen.free.fr/Explic/Clsn.png Vous pouvez refaire Ctrl+C pour mieux voir ces zones : http://mike.mugen.free.fr/Explic/Clsn-full.png Avant d'aller plus loin, vous noterez qu'il y a une barre jaune sous les personnages, et encore au-dessous, leur nom et leur ID. La barre jaune est ce qu'on appelle le "width". Elle représente la largeur de votre perso. C'est cette barre qui va déterminer comment vous allez "pousser" votre adversaire lorsque vous être près de lui. Elle ne correspond pas forcément aux Clsn2, comme le montre cet exemple : http://mike.mugen.free.fr/Explic/width-clsn2width.png Et ce ne sont pas les Clsn2 qui jouent sur la poussée des joueurs (du moins, pas uniquement - sur le shot ci-dessous, les Clsn2 des persos se chevauchent) : http://mike.mugen.free.fr/Explic/width-clsn2superpos.png Ici, ce sont bien quand les width se rencontrent qu'il y a poussée : http://mike.mugen.free.fr/Explic/width-playerpush.png Enfin, il y a une troisième couleur un peu spéciale pour les Clsn, ce sont les vertes : http://mike.mugen.free.fr/Explic/NotHitBy.png Ce sont en fait des Clsn2 normales, sauf qu'elles sont désactivées par une fonction NotHitBy. Le fait de les désactiver a pour conséquence de rendre le personnage intouchable. On s'en sert principalement lorsque le perso "se remet" d'un coup (exemple : pendant qu'il se relève après avoir été mis au sol), ou au début de certaines attaques. Voilà, vous pouvez déjà vous amuser à étudier un peu plus en profondeur quelques persos avec ces informations qui ne seront plus complètement du chinois pour vous désormais (enfin, j'espère !). ^^ Mike Werewolf.