Tutorial Création et Adaptation de personnages sous Mugen par Sunny : 6eme Partie
Les strikers
Un striker est un perso qui peut venir aider le votre à un moment ou a un autre au cours d'un match.
Le striker est plus ou moins indépendant de votre perso. De ce fait, il doit avoir ses propres sprites, animations et actions.
A l'heure actuelle, Mugen ne permet pas de prendre un autre perso du jeu et de l'utiliser comme striker
(comme c'est le cas de KOF). Il faudra donc inclure sprites, animations et actions du striker DANS
les fichiers de votre perso. Réservez lui une place dans votre palette, dans votre SFF, dans votre AIR
et dans votre CNS (réservez-lui des numéros d'actions qui ne seront pas utilisés par votre perso -
numéros 6000 à 8000 par ex).
PréparationLa première chose à faire est de choisir le
perso que l'on veut utiliser comme striker. Prenez en un qui ait un lien avec le perso que vous créez et qui
vienne du même jeu, pour conserver une certaine logique ou du moins, une même ambiance graphique (mélanger
persos réalistes de KOF et plus cartoons SF ça fait quand même un peu bizarre). Puis regardez quel(s) coup(s)
vous voulez lui faire exécuter.
Une fois ces choix effectués, ripez les sprites et incluez les dans le
SFF de votre perso principal.
Le mieux est de réserver une partie de sa palette pour les couleurs du striker
ainsi on pourra modifier ses couleurs indépendamment du perso principal ou de ses effets spéciaux. Faites
ses animations et incluez les également dans le AIR de votre perso principal.
La partie préparation
maintenant terminée, on peut passer à la prog du striker proprement dite.
Programmation du striker
Pour programmer un striker, nous utiliserons l'action
Helper. Cette action nous permet de créer
des éléments aux comportements plus complexes qu'un projectile et qui peuvent être indépendants du perso
principal : une sorte de perso à l'intérieur du perso principal.
Les helpers utilisent les fichiers SFF, AIR et CNS de leur parent (ici le perso principal) ainsi que presque
toutes leurs constantes. Par contre,
ils ont leus propres variables, totalement indépendantes de celles du
perso principal. Vous pouvez donc avoir deux var(1), deux var(2), etc... Lorsque vous vous trouverez dans
le state du helper, Mugen regardera la variable du helper. Autrement, il regardera celle du parent.
Le helper que nous allons programmer à titre d'exemple apparaîtra dans les airs. Il atterrira, fera son
attaque puis disparaîtra. Sa programmation se fera en plusieurs phases.
1ère phase : la création
du striker.
Lorsque l'on effectuera une commande spécifique, notre perso ira dans un state spécifique et
appellera son striker. Ce state n'a rien de particulier : il suffit de jouer l'animation lorsque le
perso appelle son striker et de retourner au stance lorsque celle-ci est terminée. Au cours de ce
state, nous créerons le striker avec une action helper. Exemple :
[StateDef 2000]Type = S
MoveType = I
Physics = S
Anim = 2000
SprPriority = 1
VelSet = 0,0
Ctrl = 0
[State 2000, create striker]type = helper
trigger1 = time = 0
name = \"striker\"
ID = 7000
pos = -350, -200
postype = back
facing = 1
keyctrl = 0
ownpal = 1
pausemovetime = 0
supermovetime = 0
stateno = 7000
[State 2000, end state]type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1
Le striker que nous venons de créer s'appelle
striker (n'oubliez pas les guillemets) et il a pour code d'identification le numéro 7000. Ces deux
informations nous permettrons de vérifier combien nous avons de strikers de ce type à l'écran. Ainsi dans
le CMD, parmi les conditions pour appeler le striker, nous inclurons : triggerall = numhelper(7000) = 0.
Cela nous empêchera de pouvoir créer ce striker alors qu'il est déjà à l'écran.
Ce striker, nous le créerons à l'arrière du personnage ( postype = back), à 350 pixels
horizontalement par rapport au centre de l'écran et à 200pixels au dessus de notre personnage.
Le striker sera par ailleurs tourné dans le même sens que le perso ( facing = 1). Attention :
le pos et le facing dépendent du postype : en fonction du postype mis, le pos et le facing
seront interprétés différemment !
Ce striker sera totalement indépendant du perso principal :
il ne pourra pas être contrôlé keyctrl = 0 et il aura sa propre copie de la palette ownpal = 1
(si le perso principal est sous l'influence d'un PalFx, le striker ne le sera pas). Toutefois le
striker sera immobilisé par les pauses et les super pauses du perso principal ( pausemovetime = 0 ;
supermovetime = 0).
Enfin, le striker sera créé dans le state 7000.
2ème phase :
l'arrivée du striker.
Nous venons de voir que le striker sera créé dans le state 7000. Il faut
maintenant définir ce que devra faire le striker dans ce state. En l'occurrence, le perso est créé
dans les airs. Il faut donc d'abord le faire atterrir :
[StateDef 7000]Type = A
MoveType = I
Physics = A
Anim = 7000
SprPriority = 1
VelSet = 0,0
Ctrl = 0
[State 7000, hit override]type = HitOverride
trigger1 = time = 0
attr = SCA
slot = 0
time = -1
stateno = 7050
[State 7000, end state]type = ChangeState
trigger1 = vel y >= 0
trigger1 = pos y >= -1
value = 7001
Deux choses à noter sur les deux actions de ce state :
on force le perso à atterrir lorsqu'il est près du sol et on envoie le perso dans un state particulier
si il reçoit un coup. Pourquoi ne laisse-t'on pas le perso atterrir et recevoir un coup naturellement ?
Comme je l'ai indiqué, le helper utilise les states, les animations et les sprites du perso par défaut.
Si on le laisse agir, il utilisera donc l'animation du perso lorsqu'il atterrira et lorsqu'il se prendra
un coup (faites un essai pour voir le résultat).
Pour l'atterrissage, une autre solution
consisterait à changer le physics dans le statedef (mettre physics = N) et à ajouter de la gravité
artificiellement (avec l'action gravity). Mais il faudrait de toute façon changer de state lorsque
le perso est proche du sol.
Concernant le HitOverride :- le attr indique sur quels coups
le HitOverride fonctionne. Ici tous.
- le slot indique dans quel emplacement ce HitOverride doit
être stocké (ici le 0 ; 8 emplacements sont disponibles)
- le time indique combien de temps cette
action doit durer. Ici elle est active pour toute la duré du state.
- enfin, le stateno indique
à Mugen dans quel state aller si le perso se fait toucher par une attaque.
Voici le state
où va aller le striker si il se fait toucher par une attaque :
[StateDef 7050] ; Le perso
tombe par terre
Type = A
MoveType = H
Physics = N
Anim = 7050
SprPriority = -2
VelSet = 0,0
Ctrl = 0
; pour changer un peu, on utilise un gravity
associé à un physics = N
[State 7050, gravity]type = gravity
trigger1 = 1
[State 7050, end state]
type = ChangeState
trigger1 = vel y >= 0
trigger1 = pos y >= -1
value = 7051
[StateDef 7051] ; Le perso se relève
Type = S
MoveType = H
Physics = S
Anim = 7051
SprPriority = 1
VelSet = 0,0
Ctrl = 0
[State 7051, velocity] ; on repositionne le
perso correctement
type = VelSet
trigger1 = time = 0
x = 0
y = 0
[State 7051, position] ; on repositionne le perso correctement
type = PosSet
trigger1 = time = 0
y = 0
[State 7051, end state] ; le perso se barre (on voit
ce state tout de suite après)
type = ChangeState
trigger1 = AnimTime = 0
value = 7002