Pas besoin de vous inscrire pour télécharger / No need to register for downloading.
Une fois inscrit, vous devez m'envoyer un mail pour valider votre compte / Once registered, you must send me an email for validating your account.
 S'enregistrer  |  FAQ  |  Lexique  |  Rechercher  |  Liste des Membres  |  Groupes d'utilisateurs 

 Annuaire  |  Connexion 

 Ce forum en page de démarrage

 Informations pratiques 
 Mes créations redeviennent publiques.  

   Télécharger le sujet
02. Les bases de la programmation (suite)
Mike Werewolf
Loup-garou

Site Admin


Inscrit le: 07 Oct 2004
Messages: 1676
Karma: 52
plus / moins

Localisation: France
Répondre en citant
Ici, on va parler des réglages de base du personnage. Mais avant, on va étudier rapidement les commentaires.

Dans tous les fichiers Mugen qui peuvent être ouverts avec le bloc-notes (AIR, CMD, CNS, DEF, CFG pour l'essentiel), tout ce qui se trouve entre un point-virgule et la fin de la ligne est purement et simplement ignoré par Mugen. NB : quand on parle de fin de ligne, on parle de "saut de ligne", pas de "retour chariot".

Il n'y a rien pour mettre fin à un commentaire (sauf le saut de ligne). On ne peut donc pas avoir sur une même ligne du code, du commentaire, puis de nouveau du code, ni un commentaire puis du code.

Les commentaires servent, comme leur nom l'indique, à mettre des annotations, des remarques, des mémos dans le code, mais également à faire une certaine "mise en forme" (tout est relatif) ou encore à désactiver du code sans le supprimer (pour ne pas perdre ce qu'on avait fait, pour faire des tests avec plusieurs formules ou valeurs différentes, etc.).

Je pense que le concept de commentaires est assez simple et assez connu, donc je ne m'attarde pas dessus. Passons maintenant au fichier DEF. C'est le fichier de programmation le plus facile à paramétrer. En voici un exemple :

Code:
;===========================================================================
;=====[DEFINITION FILE FOR KFM MASTER BY MIKE WEREWOLF]=====================
;===========================================================================

; Definition file for New Kung Fu Man
; Contains all the filenames needed for the character

; Player information
[Info]
name = "Kung Fu Man Master"        ;Name of character
displayname = "Kung Fu Man Master" ;Name of character to display
versiondate = 01,01,2005    ;Version date of character
mugenversion = 04,14,2001   ;Version of M.U.G.E.N character works on
author = "Elecbyte & Mike Werewolf"         ;Character author name
pal.defaults = 7, 6,3,4,2      ;Default palettes in order of preference

; Files for the player
[Files]
cmd     = kfm-master.cmd   ;Command set
cns     = kfm-master.cns   ;Constants
st      = kfm-master.cns   ;States
st1   = newmoves-master.cns ;New states
st2   = common-master.cns;New common states
stcommon = common1.cns      ;Common states
sprite  = kfm-master.sff   ;Sprite
anim    = kfm-master.air   ;Animation
sound   = kfm-master.snd   ;Sound
pal1    = kfm-master.act   ;Palettes (can have up to 12)
pal2    = KFMM-02.act
pal3   = KFMM-03.act
pal4   = KFMM-04.act
pal5   = KFMM-05.act
pal6   = KFMM-06.act
pal7   = KFMM-07.act

; Arcade mode
[Arcade]
intro.storyboard = intro.def
ending.storyboard = ending.def


Si on enlève tout ce qui est en commentaires, on retrouve ceci :
Code:
[Info]
name = "Kung Fu Man Master"
displayname = "Kung Fu Man Master"
versiondate = 01,01,2005
mugenversion = 04,14,2001
author = "Elecbyte & Mike Werewolf"
pal.defaults = 7, 6,3,4,2

[Files]
cmd     = kfm-master.cmd
cns     = kfm-master.cns
st      = kfm-master.cns
st1   = newmoves-master.cns
st2   = common-master.cns
stcommon = common1.cns
sprite  = kfm-master.sff
anim    = kfm-master.air
sound   = kfm-master.snd
pal1    = kfm-master.act
pal2    = KFMM-02.act
pal3   = KFMM-03.act
pal4   = KFMM-04.act
pal5   = KFMM-05.act
pal6   = KFMM-06.act
pal7   = KFMM-07.act

[Arcade]
intro.storyboard = intro.def
ending.storyboard = ending.def


On a donc trois sections : [Info], [Files] et [Arcade]. Dans [Info] :
name = nom du personnage (entre guillemets)
displayname = nom qui sera affiché (en général identique à name, mais pas toujours). Encore entre guillemets
versiondate = date de dernière mise à jour du perso (au format Mois, Jour, Année) - pour info seulement
mugenversion = version de Mugen pour laquelle est prévue ce perso (pour DOS : 14,04,2001) - pour info seulement
author = nom du ou des créateurs, entre guillemets
pal.defaults = ordre de préférence des palette que devra utiliser l'ordinateur s'il joue avec ce perso

Dans la section [Files] :
cmd = nom du fichier commande (CMD)
cns = nom du fichier contenant les constantes (souvent le CNS)
st = nom du fichier de states (CNS)
st1 = nom du second fichier de states (optionnel)
st2 = nom du troisième fichier de states (etc. - optionnel)
stcommon = nom du fichier CNS pour les states communs (très souvent le common1.cns)
sprite = nom du fichier SFF utilisé par le perso
anim = nom du fichier AIR utilité par le perso
sound = nom du fichier SND utilisé par le perso
pal1 à pal12 = nom des fichiers ACT du perso, sachant que :
- pal1 = A
- pal2 = B
- pal3 = C
- pal4 = X
- pal5 = Y
- pal6 = Z
- pal7 = Start + A
- pal8 = Start + B
- pal9 = Start + C
- pal10 = Start + X
- pal11 = Start + Y
- pal12 = Start + Z

Enfin, dans la section [Arcade], vous pouvez déclarer les fichiers DEF des storyboards d'intros ou de fin du personnage.

Passons maintenant aux constantes du personnages (situées dans le fichier CNS la plupart du temps).C'est un peu plus long, mais pas plus compliqué.

Cependant, avant d'aller plus loin, je dois vous expliquer comment fonctionne le système graphique de Mugen, parce que c'est légèrement différent de ce qu'on a l'habitude de voir notamment pour l'axe des y :
Pour rappel :
- L'axe des x (ou "abscisses") est un axe horizontal,
- L'axe des y (ou "ordonnées") est un axe vertical,
- On appelle "origine" le point de coordonnées (0,0).

Dans Mugen :
- Une valeur x négative est à droite de l'origine
- Une valeur x positive est à gauche de l'origine
- Une vitesse x positive va vers l'avant (le sens dépend ensuite de l'orientation du perso)
- Une vitesse x négative va vers l'arrière (idem)

- Une valeur y négative est AU-DESSUS de l'origine
- Une valeur y positive est AU-DESSOUS de l'origine
- Une vitesse y positive va vers le BAS
- Une vitesse y négative va vers le HAUT

Abordons les constantes : on va étudier ça section par section :

Code:
[Data]
life = 1000
attack = 100
defence = 100
fall.defence_up = 50
liedown.time = 60
airjuggle = 15
sparkno = 2
guard.sparkno = 40
KO.echo = 0
volume = 0
IntPersistIndex = 60
FloatPersistIndex = 40


* Vous connaissez déjà les 3 premiers paramètres. Life fixe le niveau de vie (standard = 1000), attack, la puissance d'attaque (standard = 100), defence, la résistance aux coups (standard = 100).
* Le fall.defence_up est un peu plus subtil. En fait, si vous envoyez votre adversaire dans les airs et que vous "jonglez" avec en le faisant rebondir sur plusieurs coups enchaînés, vous remarquerez que les coups enlèvent de moins en moins de vie (faites le test en enchaînant plusieurs Shinryuken - QCF, QCF + kick - c'est flagrant). C'est la propriété du fall.defence_up : il indique de combien est augmenté la résistance du perso aux coups lorsqu'il subit un enchaînement en étant en "fall" Cette augmentation se produit à chaque coup encaissé dans cette situation, et s'annule dès que le perso revient au sol ou fait un "recovery".
* Le liedown.time est le temps (en ticks) que votre perso restera au sol une fois mis à terre, avant de se relever.
* Le airjuggle est le nombre de points de juggle de votre perso. Pour vous expliquer ce qu'est le juggle et comment il marche, je vous fais un copier-coller de ma trad du cns.txt, parce que je ne pense pas pouvoir mieux l'expliquer :
Citation:
M.U.G.E.N permet à certains mouvements de "jongler", c'est à dire de toucher les adversaires qui ont été envoyé dans les airs, ou qui sont allongés au sol. Le système de juggling fonctionne ainsi : chaque personne débute avec un certain nombre de points de juggle sur le premier coup qui les fait tomber, 15 en général. Un peu de terminologie : quand on dit qu'un joueur "chute" (il est en "fall"), on indique qu'il ne peut pas se rétablir en l'air et qu'il va tomber au sol.
Si un joueur est touché alors qu'il chute dans les airs ou qu'il git au sol, alors ses points de juggle vont diminuer d'un montant qui dépend de l'attaque. Quand une attaque requiert plus de points de juggle qu'il n'en reste à l'adversaire, alors l'attaque rate. Tout coup qui provoque la chute de l'adversaire enlève immédiatement son montant de points de juggle sur le premier coup.
Par exemple, une attaque demandant 7 points de juggel peut théoriquement être utilisée pour faire jongler l'adversaire 2 fois (en admettant que vous commenciez avec 15 points), laissant 1 point à l'adversaire. Une nouvelle attaque de ce type loupera. La raison pour laquelle ce système de jonglage existe est d'éviter les combos infinis dans les airs.

* sparkno est le numéro de l'animation par défaut à jouer lorsqu'un coup du perso touche et que ce coup ne prévoit pas d'animation spéciale (cf. sparks dans le lexique).
* guard.sparkno est exactement la même chose, mais pour les coups du persos qui sont bloqués par l'adversaire. Notez que pour ces deux paramères, si la valeur est juste un nombre, l'anim sera jouée depuis le fichier fightfx.air avec les sprites du fightfx.sff. Pour que l'anim soit jouée depuis les fichiers AIR et SFF du perso, vous devez rajouter un "S" devant le numéro de l'anim :
guard.sparkno = S60 ; pour jouer l'anim 60 depuis les fichiers AIR et SFF du perso.
* Le KO.echo, si vous le mettez à 1, vous permet de faire un effet d'écho lorsque le personnage est mis KO et qu'il joue le son de KO.
* Le volume vous permet de régler... le volume des sons du joueur entre 0 et 255.
* Les deux derniers paramètres sont un peu plus techniques. Ils permettent de réinitialiser ou non les variables entre les rounds et éventuellement entre les combats. Nous ne nous attarderons pas dessus pour l'instant.

Code:
[Size]
xscale = 1
yscale = 1
ground.back = 15
ground.front = 16
air.back = 12
air.front = 12
height = 60
attack.dist = 160
proj.attack.dist = 90
proj.doscale = 0
head.pos = -5, -90
mid.pos = -5, -60
shadowoffset = 0
draw.offset = 0,0


* Le xscale et le yscale vous permettent de régler la proportion du joueur (cf. scale dans le lexique). Laissez ces paramètres à 1 pour avoir une taille normale (NB : les persos HR ont normalement un scale de 0.5).
* ground.back et ground.front permettent de régler la barre de width (qu'on a vu dans le debug) lorsque le perso est au sol. ground.back définit la partie entre l'axe du perso et son dos, alors que ground.front définit la partie entre l'axe du perso et son "devant" :

* air.back et air.front ont la même fonction, mais lorsque le perso est en l'air.
* height est la hauteur du personnage en pixel, celle que l'adversaire doit dépasser pour pouvoir passer au-dessus du perso.
* attack.dist est la distance d'attaque par défaut. Si P2 se trouve à une distance inférieure lorsque le perso fait une attaque, P2 se mettra en position de guard.
* proj.attack.dist a la même fonction, mais pour les projectiles.
* proj.doscale permet d'appliquer les xscale et yscale également aux projectiles.
* head.pos et mid.pos indiquent respectivement les positions (approximativement) de la tête et de la ceinture (base : perso au sol en stance).
* shadowoffset permet de décaler l'affichage de l'ombre en vertical. La valeur défaut est de 0, ce qui permet d'avoir une ombre qui part de l'axe du sprite.
* draw.offset enfin permet de décaler l'affichage des sprites en x,y. Normalement, on n'a pas besoin d'y toucher.

Code:
[Velocity]
walk.fwd  = 2.4
walk.back = -2.2
run.fwd  = 4.6, 0
run.back = -4.5,-3.8
jump.neu = 0,-8.4
jump.back = -2.55
jump.fwd = 2.5
runjump.back = -2.55,-8.1
runjump.fwd = 4,-8.1
airjump.neu = 0,-8.1
airjump.back = -2.55
airjump.fwd = 2.5


Toutes les vitesses sont exprimées en pixels par ticks.
* walk.fwd et walk.back expriment respectivement les vitesses du perso lorsqu'il avance et lorsqu'il recule.
* run.fwd et run.back sont la même chose mais pour les run.
* jump.neu définit les vitesses x et y du saut sur place. Normalement, la vitesse x doit être de 0.
* jump.back et jump.fwd définissent respectivement les vitesses x & y des sauts vers l'arrière et vers l'avant. Bien souvent, on ne précise que la valeur x (la valeur y est reprise de jump.neu).
* runjump.back et runjump.fwd définissent les vitesses de saut vers l'arrière et l'avant (respectivement) lorsque le perso saute alors qu'il est en run.
* enfin les airjump.neu, airjump.back et airjump.fwd sont identiques au jump.neu, jump.back er jump.fwd (respectivement), mais pour l'airjump (cf. section suivante).

Code:
[Movement]
airjump.num = 1
airjump.height = 35
yaccel = .44
stand.friction = .85
crouch.friction = .82


* airjump.num détermine le nombre d'airjumps qu'un perso peut réaliser. Un airjump, c'est un saut qu'on réalise alors qu'on est déjà en l'air. KFM et Link sont des persos qui ont un airjump. Si vous mettez 0, votre perso ne pourra faire que des sauts à partir du sol, et si vous mettez 2 (par exemple), votre perso pourra sauter 2 fois (suivant cet exemple) lorsqu'il est dans les airs (plus le saut de départ lorsqu'il est au sol = le perso pourra enchaîner 3 sauts).
* airjump.height définit la distance minimale par rapport au sol (axe y) à laquelle doit se trouver le perso pour réaliser un airjump.
* yaccel définit l'accélération y, c'est à dire en gros, la force de gravité.
* stand.friction et crouch.friction définisse la force de frottement au sol, c'est à dire la "force" avec laquelle le sol va ralentir les déplacements au sol respectivement en stand (perso debout) et en crouch (perso accroupi). Lorsque l'on donnera une vitesse en x au personnage, celle-ci sera multipliée par le coefficient de friction. Donc si on donne une vitesse en x de 15 au perso lorsqu'il est en crouch, il bougera en fait ainsi :
tick 0 : 15*.82 = 12.3
tick 1 : 12.3*.82 = 10.086
tick 2 : 10.086*.82 = 8.27052
etc. jusqu'à revenir à 0.

Voilà, cette partie était un peu "lourde", mais elle est quand même relativement importante pour bien paramétrer votre perso.

Mike Werewolf.
Mike Werewolf est absent 
dadou

Créateur/Créatrice Mugen

Créateur/Créatrice Mugen

Inscrit le: 29 Déc 2004
Messages: 15
Karma: 3
plus / moins

Localisation:
Répondre en citant
a ce ke je vois ya des paramètre ke je nest pas régler ds mes persos Very Happy
dadou est absent Kicker ce membre de ce sujet
PaulAtreide

Invité



Karma:
plus / moins

Localisation:
Répondre en citant
C'est long mais ca reste clair et ca explique pas mal de chose bizarre que j'ai pu voir.

Une questionne conne quand même histoire d'être sur :
Citation:
* attack.dist est la distance d'attaque par défaut. Si P2 se trouve à une distance inférieure lorsque le perso fait une attaque, P2 se mettra en position de guard
---
Distance par rapport à la boîte de colision Rouge?? Embarassed

Je sens que je vais encore m'abuser. Mr. Green
Mike Werewolf
Loup-garou

Site Admin


Inscrit le: 07 Oct 2004
Messages: 1676
Karma: 52
plus / moins

Localisation: France
Répondre en citant
Citation:
Distance par rapport à la boîte de colision Rouge??

Arf, là, je t'avoue que j'en sais rien. Je dirai plutôt que c'est la distance entre les axes des joueurs qui jouent, mais à vérifier...

Mike Werewolf.
Mike Werewolf est absent 
PaulAtreide

Invité



Karma:
plus / moins

Localisation:
Répondre en citant
En gros pour les distances d'inpact, encore mieux jouer avec les boîte rouge que de changer cette valeur.

Tes cours vont me motiver pour faire PocketCobra depuis le début.

Merci prof.
Mike Werewolf
Loup-garou

Site Admin


Inscrit le: 07 Oct 2004
Messages: 1676
Karma: 52
plus / moins

Localisation: France
Répondre en citant
Citation:
En gros pour les distances d'inpact, encore mieux jouer avec les boîte rouge que de changer cette valeur.

Les Clsn1 (les "boîtes rouges") définissent les zones qui sont susceptibles de toucher l'adversaire.

Le paramètre attack.dist est différent. Je vais prendre deux exemple :
- Va en training, prends KFM en P1 et n'importe quel autre perso en P2
- Règle P2 sur manual (Pause, puis tu fais droite jusqu'à avoir le Dummy Mode en "manual")
- Place KFM contre un bord de l'écran
- Avec les flèches de direction du joueur 2, place P2 contre le bord opposé et maintiens la direction arrière.
- Donne un coup de poing avec KFM : P2 ne se met pas en défense, il continue de reculer :


Maintenant, colle P2 à KFM, et fais reculer P2. Toujours en maintenant la direction, donne un coup alors que P2 est à peine hors de portée : cette fois, P2 se protège, même si le coup ne touche pas :


C'est là l'utilité du paramètre attack.dist : il détermine à partir de quelle distance l'adversaire cesse de se mettre en protection quand P2 maintient la direction vers l'arrière et qu'on donne un coup.

On le verra plus tard, mais ce paramètre peut être spécifique à chaque coup. Le paramètre des constantes permet juste de fixer une valeur "par défaut".

Mike Werewolf.
Mike Werewolf est absent 
PaulAtreide

Invité



Karma:
plus / moins

Localisation:
Répondre en citant
Haaaaaaaaaaaaaa, c'est limpide pourtant.
C'est la garde préventive et ce paramètre définit la distance pour actionner celle-ci.

C'est Dac.

Merci Prof pour ton attention envers tes élèves
02. Les bases de la programmation (suite)
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum
Toutes les heures sont au format GMT + 2 Heures  
Page 1 sur 1  
Télécharger le sujet
  
  
 Poster un nouveau sujet