Informations pratiques |
Retrouvez la doc d'Elecbyte en français, mise en page et regroupée dans le Mugen Doc ! |
| | un nouvau personage=des nouvau probleme..j'ai besoin d'aide | |
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Rajouter les states qui manquent :
Code: | [State 41, DirFwd]
type = VarSet
trigger1 = command = "holdfwd"
sysvar(1) = 1
[State 41, DirBack]
type = VarSet
trigger1 = command = "holdback"
sysvar(1) = -1 |
Détermine si tu fais un saut vers l'arrière ou l'avant.
Code: | [State 41, Vel]
type = VelSet
trigger1 = AnimTime = 0
x = ifelse(sysvar(1)=0, const(velocity.jump.neu.x), ifelse(sysvar(1)=1, const(velocity.jump.fwd.x), const(velocity.jump.back.x)))*1.2
y = const(velocity.jump.y)*1.2 |
Règle les vitesses en X (saut avant ou arrière) et en Y pour que ton perso décolle !
Code: | [State 41, End]
type = ChangeState
trigger1 = AnimTime = 0
value = 50
ctrl = 1 |
Permet à ton perso de passer dans le state de saut proprement dit, sans quoi il reste bloquer en state 41, et joue l'anim correspondante en boucle.
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Fais voir ton state -1.
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Citation: | j'ai même essayer tes palettes sur mon personnage mais l'effet est le même |
C'est normal, les sprites de Gouki sont prévus pour utiliser ces palettes, mais pas tes sprites.
Citation: | c'est vrai que j'ai modifié la palette d'une seule image et j'ai appliqué cette palette aux personnages |
Vu le résultat, tu n'as pas modifié simplement la palette, tu as modifié également les couleurs des pixels directement dans l'image (avec des outils pinceaux ou remplissage, certainement).
Citation: | (est-ce -que j'ai le droit de montrer le résultat) |
Si tu veux, mais comme c'est un perso différent, ça ne changera rien à ton problème.
A moins que... Ne serais-tu pas parti d'une palette de Gouki pour créer les tiennes ? Si oui, ton problème est normal, car comme je l'ai dit avant, les sprites de Gouki sont prévus pour utiliser cette "structure" de palette, ce qui n'est pas le cas de ton perso (chaque perso utilise une "structure" de palette qui lui est propre, c'est pourquoi la palette d'un perso ne fonctionnera pas sur un autre).
Je te suggère de lire mes tutos sur les palettes, dispo ici :
http://mike.mugen.free.fr/Forum/viewtopic.php?t=65
-> Créer des fichiers ACT
-> Tutorial sur les palettes et index de palettes
M*rde pour tes exams...
Mike Werewolf.
|
|
| |
| | | |
Invité
|
|
t'as dis que t'utilisait fighter factory pour faire tes palettes
est ce que ta telecharger la video d'aide
si non vas sur http://virtualltek.mgbr.net/inicial.php?page=tutos
telecharge le truc qui s'appelle :
Criando um personagem básico com Fighter Factory (Animado)
normalement ça devrait t'aidez[/url]
|
|
| |
| | | |
Invité
|
|
ah ouais au fait la video est en espagnole ta du t'en douter mais ça change pas grand chose t'as juste à regarder ce que fais le gars, sinon si ta des prob avec fighter factory j'ai commencé un trad donc si ça t'interesse
|
|
Invité
|
|
a bon je savais pas tu pourrai me dire ou la trouver.
|
|
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Désolé, je me suis trompé. En fait, il y en avait une, mais dans la première version de fighter factory (en fait, je crois que FF proposait plus d'une dizaine de langues différentes).
EDIT : J'ai fait ma propre traduction. Y a peut-être quelques erreurs, mais je pense que c'est correct dans l'ensemble.
Télécharger (clic droit, enregistrer la cible sous).
Pour l'installer : mettez le fichier dans le dossier "Languages" du programme, puis, une fois dans le programme lui-même, faites Ctrl+I, et choisissez Français (FR).
Mike Werewolf.
|
|
Invité
|
|
tu as laquelle version de FF moi c la beta 2 fix
|
|
Invité
|
|
en tous cas moi je trouve que ce log est vachement pratique pour les debutant il m'a beaucoup aidez pour mon perso
|
|
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
C'est vrai qu'il a l'air assez intuitif, et idéal pour débuter. Mais je pense quand même qu'ensuite, mieux vaut passer aux outils traditionnels (bloc-notes, SprMaker), qui permettent d'avoir un résultat plus "propre".
FF automatise pas mal de choses, et si l'automatisation simplifie pas mal de choses, elle conduit aussi à moins de souplesse.
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Salut,
Désolé, les messages édités n'apparaissent pas comme nouveau message ici...
Donc :
Citation: | salut
j'ai un nouvu probleme
quand je fait une attack en air (un coup de poing) mon perso reste avec cette animation jusque son atirissage mais moi je veux fair un coup de poing court alors quesque je fait
c bon j'ai regler le probleme avec un change anim |
Ce problème ne se résoud pas avec un ChangeAnim (enfin, c'est pas la meilleure solution). La solution est donné dans le tuto Gouki, partie 3, les coups aériens :
Citation: | Découlant de là, on ne sait pas combien de temps notre personnage va passer dans ce state, et il se peut tout à fait que ce temps soit supérieur à la durée de l'animation du coup. Comme on reste dans notre state jusqu'à l'atterrissage, si on utilise une animation normale, celle-ci va repartir au début, pour tourner en boucle (et donc notre personnage va refaire son coup). Pour éviter cela, on va devoir mettre un "looptime infini" sur ces anims (je rappelle que le "looptime" est la durée d'une animation).
Concrètement, on utilisera donc soit un "loopstart" pour bloquer l'anim sur une série d'éléments, soit on mettra un temps de -1 sur le dernier élément de l'animation pour bloquer l'anim sur cet élément. |
Il faut donc que l'anim de ton coup ne soit pas "finie" (qu'elle contienne un loopstart ou un temps de -1 sur le dernier élément).
Citation: | j'ai cree les state mais je ne peux lancer que 2 win alors que moi j'ai 4 voila mon code (enfin le tien )
alors quesque je dois fair |
Le code que j'ai donné n'est valable que pour deux anims. Pour l'adapter à quatre anims, il faut modifier le code en adaptant le principe de base que j'ai donné, à savoir :
Citation: | La seule différence, c'est que cette fois, nous allons laisser le choix de l'anim au hasard. Pour cela, nous utilisons un trigger "random" qui choisit un nombre entre 0 et 999. Nous allons simplement diviser ce nombre par 500 (entier). Le résultat de cette division (entier/entier) ne pourra qu'être un entier. Si le nombre random est inférieur à 500 alors random/500 vaudra 0 et sinon, random/500 vaudra 1. Il n'y a plus qu'à ajouter 180 pour obtenir le numéro d'anim à jouer. |
Concrètement : Random/500 ne peut donner que 2 résultats : 0 (si Random est inférieur à 500) ou 1 (dans les autres cas). Ce qui convenait parfaitement à Gouki puisqu'il n'a que 2 anims de Win possibles.
Dans ton cas, on en a 4 : il faut donc élever le champ des possibles à 4. Pour cela, il suffit simplement de diminuer le diviseur de random, en l'amenant à la valeur voulue, qui sera ici de 250.
* Random/250 = 0 si random est inférieur à 250.
* Random/250 = 1 si random est compris entre 250 et 499.
* Random/250 = 2 si random est compris entre 500 et 749.
* Random/250 = 3 si random est supérieur ou égal à 750.
En conséquence, le paramètre anim du StateDef donnera :
Code: | anim = 180+random/250 |
Et les 4 anims des winpose seront 180, 181, 182 et 183.
De ce cas, on peut tirer deux généralités.
* Comment trouver le diviseur de random selon le nombre de cas à prévoir ?
-> On prend la valeur maximale que peut prendre random (soit 999), on lui ajoute 1 (on arrive donc à 1000), et on divise par le nombre de cas voulu. Pour Gouki, j'avais deux cas, donc on faisait (999+1)/2 = 500. Pour toi, on a quatre cas, donc on fait (999+1)/4 = 250.
Si on ne tombe pas sur un entier, on arrondit au supérieur. Par exemple, pour 3 cas, on a (999+1)/3 = 333.333333... On prendra alors 334 comme diviseur. Pourquoi ? Parce qu'avec 3 possibilités, les résultats possible seront 0, 1 et 2. Si on prenait 333 en diviseur, et si Random retournait 999, alors on aurait Random/333 = 3, ce qui sort de notre intervalles de valeurs. Alors qu'avec 334, 999/334 = 2.99... que Mugen arrondira à 2. On reste alors dans notre intervalle de valeurs.
* De façon beaucoup plus générale : lorsqu'on réduit la valeur d'un diviseur, le résultat d'une division augmente, si bien que :
- N/{un nombre très proche de zéro} tend vers l'infini
- N/{un nombre qui tend vers l'infini} se rapproche de 0
Et en développant la première idée, on comprend que
- N/0 donne l'infini, et l'infini n'étant pas une valeur évaluable, la division par 0 est une opération interdite.
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Citation: | ah alors je vais double les poste a chaque ocasion |
Je tolère les double-post "judicieux" (ceux qui apportent vraiment quelque chose). Par contre, si c'est juste pour préciser un truc, rajouter quelque chose qu'on a oublié au message qu'on vient juste de poster, là, l'édition du message s'impose.
Citation: | ce que je voulais c que mon personnage jou son anim puis il revien dans l'anim jump to stand |
En général, on inclus le sprite voulu directement dans l'anim du coup.
Citation: | j'ai vu dans un cns d'un autre personnage quil yavait pas de random mais une var()........coment en se sere |
On utilise un "VarRandom". C'est un controller qui permet d'attribuer une valeur aléatoire à une variable, et en précisant l'intervalle. Par exemple si on veut que la var(7) ait une valeur aléatoire entre 1 et 4, on aura :
Code: | [State X]
type = VarRandom
trigger1 = Time = 0
v = 7
range = 1,4 |
Cependant, si c'est juste pour avoir une valeur aléatoire, ça monopolise une variable pour rien, je trouve. L'intérêt n'existe réellement que si on est amené à réutiliser la variable.
Par exemple, j'utilise un VarRandom dans Link, pour déterminer combien de rupees sont générés sur un coup (entre 1 et 3), et j'utilise ensuite cette variable en la réduisant de 1 à chaque fois qu'un rupee est généré, jusqu'à ce que la variable atteigne 0 (= on ne doit plus générer de rupee).
Mais dans le cadre d'une utilisation "instantannée" comme l'attribution d'une animation à un instant donné, le Random reste plus simple.
Citation: | esque tu la fait avec un editeur de texte ou un programe parceque je veux traduire ca en arabe |
J'ai fait ça avec un éditeur de textes, en partant de la version anglaise.
Non, c'est tout à fait normal, vu ton code.
Si on sépare les triggers par couleurs, et qu'on remet tout dans l'ordre :
Citation: | [State -1 strong kick pres du perso]
type = ChangeState
trigger1 = command = "c"
trigger1 = statetype = S
trigger1 = ctrl
trigger2=StateType=A
trigger2 = (StateNo = 200) || (StateNo = [220,230])
trigger2 = movecontact
trigger2 = command != "holddown"
value = 320+30 *(P2BodyDist X < 30) ;ici pres du personnage |
Et maintenant, une question toute bête : dans le trigger2, où est la condition qui dit qu'on doit déclencher le coup uniquement si on exécute la commande ?
Eh oui, nulle part, du coup, Mugen peut déclencher ce trigger tout seul, sans que tu aies eu à appuyer sur le bouton.
Comment résoudre ça ? Tout simplement en passant ce trigger1 :
Code: | trigger1 = command = "c" |
en triggerall (qui s'appliquera alors au trigger1 et au trigger2).
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
| |
| | | |
tombston
tombston
Créateur/Créatrice Mugen
Inscrit le: 14 Déc 2005 |
Messages: 303Karma: 2 plus / moins
|
Localisation: |
|
|
Citation: | Sinon, il existe des jeux de combat avec Link, mais tous sont en 3D |
ca je le sais sino je serai pas un fan de zelda
Citation: | Pas compris. Quel palfx ? |
[StateDef 1001] ; End of Power Charge
type = S
movetype = I
physics = S
ctrl = 0
anim = 1001
Code: |
[State 0, PalFXWiz]
type = PalFX
trigger1 = power >= 3000
time = 3000
add = 101,100,150
mul = 160,170,120
sinadd = 100,100,100,14
invertall = 0
color = 248
;ignorehitpause = 0
;persistent = 1 |
c quand le personnage arive en power=3000 (come dans ton tutorial)
mais moi je veux pas le fair come le tien mais je veux avoir une briance jusqua ce que mon power deminue (moin de 3000) alors coment je fait mon code
j'ai reussi a fair un projection sans erreur.................. (monteur)
he ben non j'ai eu vraiment des probleme mais c bon pour l'instant c satisfesant pour le moment (malgree que ce n'es pas une tres bon projection)
et la le probleme a poser c quand je fait un hp ou hk et j'enchain avec la projection le p2 tombe (suposer etre en state 820) sans jouer l'animation
de 820 alors j'ai mis ca
Code: | [State 820, IfDrop]
type = SelfState
trigger1 = AnimElem = 3, < 0
trigger1 = P2StateNo != 810
value = 0 |
et ca a marche mais j'ai pas compris(j'ai mis ca en testant )si value=0
alors en envoi p2 dans le state du stand non?? alors comment ca ce peux qu'il va en state 820 et il joue l'anim 820???
et autre chose j'ai pas pu pratique ton code pour ma 2 projection qui est
mon joueure doit taper le p2 et il s'envole jusque au dernier bou de l'ecron et apres il descen ...........et p2 doit rester dans son anim de touche ( pas projeter)puis quand mon personnage s'envole il joue le reste de son anim
alors c quoi le code a taper pour ca..........sino je vais laisser qu'une seul projection (come neogeo battelle....enfain esque ce jeux a ete emulé )
|
|
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Citation: | c quand le personnage arive en power=3000 (come dans ton tutorial)
mais moi je veux pas le fair come le tien mais je veux avoir une briance jusqua ce que mon power deminue (moin de 3000) alors coment je fait mon code |
T'as pas le choix : comme ton PalFX doit s'appliquer sur plusieurs states, et indépendamment du state dans lequel se trouve le perso, il faut passer par un state -2 ou -3, du style :
Code: | [State -2]
type = PalFX
trigger1 = Power = 3000
time = 1
add = 50,50,50 |
Le State -2 fera que la "brillance" s'appliquera tout le temps, alors qu'avec un State -3, elle ne s'appliquera pas si ton perso est projeté par l'adversaire.
Citation: | alors comment ca ce peux qu'il va en state 820 et il joue l'anim 820??? |
Je peux pas te répondre avec aussi peu de code. Faudrait que je vois le state de la projection, le state 810 et le state 820. Pour moi, ton SelfState ne se déclenche pas (sinon, P2 se retrouverait effectivement en stand).
Citation: | et p2 doit rester dans son anim de touche |
Tu as deux solutions :
1. Tu fais deux anims pour P2, une où il est touché, et qui tourne en boucle, et une autre pour le reste de son anim. Tu restes sur la première anim le temps désiré, puis tu passes à la seconde avec un ChangeAnim2.
2. Tu fais tout en une seule animation, mais tu "bloques" l'anim sur l'élément voulu tant que tu ne dois pas jouer la suite.
Pour le 1er, ça te donnera un truc du style :
Code: | [State X]
type = ChangeAnim2
trigger1 = {condition pour passer à la suite de l'anim}
value = {2ème animation} |
Pour le 2ème, ça te donnera un truc du style :
Code: | [State X]
type = ChangeAnim2
trigger1 = {condition vérifiant qu'on ne doit pas passer à la suite de l'anim}
value = Anim ; pour rester dans la même anim. Tu peux aussi mettre le n° de l'anim
elem = AnimElemNo(0) ; pour placer l'anim à l'élément en cours. |
Le "elem" empêche l'anim de se poursuivre, et elle est donc bloquée sur l'élément voulu selon la condition que tu veux.
Mike Werewolf.
|
|
| |
| | | |
tombston
tombston
Créateur/Créatrice Mugen
Inscrit le: 14 Déc 2005 |
Messages: 303Karma: 2 plus / moins
|
Localisation: |
|
|
merci
mais voila un autre probleme
le state de hadoken ne se declanche pas (c dans les comande) voila mon cmd
Code: | [Command]
name = "hadoken_x"
command = ~D,DF,F,x
[Command]
name = "hadoken_y"
command = ~D, DF, F, y
[Command]
name = "hadoken_z"
command = ~D, DF, F, z |
il est place avant les projection (le premier)
et voila son state -1
Code: | ; les hoken (yuditchine)
;===============================================
[State -1,hoken]
type = ChangeState
triggerall = command = "hoken_x"
trigger1 = StateType = S
trigger1 = ctrl
trigger2 = StateNo = 200 ||
trigger2 = MoveContact
value = 2000
;===============================================================================
[Statedef -1]
[State -1 ,super jump]
type = ChangeState
trigger1 = command = "super jump"
trigger1 = StateType != A
trigger1 = ctrl
value = 41
[State -1 ,run]
type = ChangeState
trigger1 = command = "FF"
trigger1 = StateType != A
trigger1 = ctrl
value = 100
[State -1 ,run en ariere]
type = ChangeState
trigger1 = command = "BB"
trigger1 = StateType != A
trigger1 = ctrl
value = 105
|
et voila le state dans le cns
Code: | [StateDef 2000] ; Fireball x
type = S
movetype = A
physics = S
ctrl = 0
anim = 2000
velset = 0,0
juggle = 3
[State 2000, Proj]
type = Projectile
trigger1 = AnimElem = 5
; Projectile parameters ---------------
projanim = 2005
projhitanim = 2006
velocity = 2.5,0
projpriority = 1
offset = 87,-66
; HitDef parameters -------------------
attr = S, SP
hitflag = MAF
guardflag = MA
animtype = Light
damage = 100,10
pausetime = 5,5
sparkno = S700
guard.sparkno = S705
sparkxy = 0,0
hitsound = 5,0
guardsound = 6,0
ground.type = Low
ground.slidetime = 9
ground.hittime = 12
ground.velocity = -5
air.velocity = -3,-4
[State 2000, End]
type = ChangeState
trigger1 = Animtime = 0
value = 0
ctrl = 1 |
mais quand je fait la comande hoken_x rien ne se declanche ...pour quoi ?
pour presice
j'ai un state 222 qui se declanche en appyant sur x+f et chaque fois que je fais d,df,f,x j'ai le state 222
j'ai meme mis tes cmd et tes cns mais ca na pas servis a quelque chose
je vien dessye quelque chose
j'ai change le nom de "hadoken_x" en "z" et j'ai garder les meme comande (~D,DF,F,x)
et la quand je fait ~D,DF,F,x mugen m'envoi dans le state de la comande "z" qui est 220 et si je fait z tout seul mugen m'envoi au state 220
si je remer le nom hadoken x alors rien ne se passe
===============================================
==============================================
la solution est tout bete je me suis casse la tete pour une chose bete come d'habitude
regarde mon code
Code: | [State -1,hoken]
type = ChangeState
triggerall = command = "hoken_x"
trigger1 = StateType = S
trigger1 = ctrl
trigger2 = StateNo = 200 ||
trigger2 = MoveContact
value = 2000
[Statedef -1]
[State -1 ,super jump]
type = ChangeState
trigger1 = command = "super jump"
trigger1 = StateType != A
trigger1 = ctrl
value = 41 |
tu dois remarque la bêtise que j'ai fait
et j'ai remarque que mugn ignore ma comande de hadoken meme si je mettais n'importe quoi come nom et j'ai trouver la faille
|
|
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Plusieurs choses à dire :
1. Forcément, si tu n'utilises pas les bons noms de commande, ça ne risque pas de marcher !
Citation: | [Command]
name = "hadoken_x"
command = ~D,DF,F,x
[State -1,hoken]
type = ChangeState
triggerall = command = "hoken_x"
... |
2. Ce trigger-là ne fait pas planter Mugen ?
Code: | trigger2 = StateNo = 200 || |
Ca me surprend parce que là, tu as un opérateur OU (le "||") mais sans argument derrière. C'est pas logique.
3. Fais gaffe à l'ordre de tes commandes :
Citation: | j'ai un state 222 qui se declanche en appyant sur x+f et chaque fois que je fais d,df,f,x j'ai le state 222 |
* state 222 = F, x
* hadoken = D, DF, F, x
Note la partie commune aux deux commandes, que j'ai mise ici en rouge. Si le state -1 pour ton state 222 est placé avant le state -1 de ton hadoken, Mugen va juste vérifier que tu as réaliser F, x, et comme cette partie est commune aux deux commandes, Mugen considérera la commande comme réalisée, et déclenchera le state 222 sans aller voir le hadoken situé après.
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
| |
| | | |
tombston
tombston
Créateur/Créatrice Mugen
Inscrit le: 14 Déc 2005 |
Messages: 303Karma: 2 plus / moins
|
Localisation: |
|
|
voici mon cns
Code: | [StateDef 2000]
type = S
movetype= A
physics = S
juggle = 1
velset = 0,0
ctrl = 0
anim = 2000
poweradd = 20
[State 2000, 1]
type = Projectile
trigger1 = AnimElem = 7
projanim = 2005
projhitanim = 2006
projpriority = 1
projheightbound = 0, 0
projedgebound = -100
projscreenbound = 100
projshadow = -1
offset = -27,0
velocity = 3
projhits =5
attr = S, SP
damage = 30
animtype = up
guardflag = MA
hitflag = MAFDP
pausetime = 10,10
hitsound = 5,2
sparkxy = 500,500
guardsound = S6,0
ground.type = Low
ground.slidetime = 25
ground.hittime = 25
ground.velocity = -10,-30
air.animtype = Back
air.velocity = -4,-6
air.juggle = 3
air.fall = 1
down.velocity = -4,-6
down.hittime = 30
down.bounce = 0
[State 2000, end]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1 |
d'une certain facon il marche bien mais il ya plusieur defaut (reguarde les shoot)
|
|
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Lis la documentation avant d'utiliser des paramètres au hasard.
Citation: | projheightbound = lowbound, highbound (entier)
Indique les valeurs y maximale et minimale que le projectile peut atteindre. Si le projectile sort de ces limites, il est effacé. NB : puisque les valeurs y décroissent en montant dans l'écran, lowbound indique actuellement la hauteur maximale que le projectile peut atteindre. Ces paramètres sont de -240,1 par défaut, si omis. |
Fatalement, si lowbound = highbound, ton projectile ne peut pas exister.
Citation: | projedgebound = value (entier)
C'est la distance (en pixels) au-delà du bord de l'écran que peut parcourir le projectile avant d'être effacé. 40 par défaut. |
Si tu mets -100, ton projectile disparaîtra à 100 pixels du bord à l'intérieur de l'écran (avec 40, il disparaît après avoir parcouru 40 pixels hors de l'écran).
Je suis pas sûr que ça change quelque chose, mais je rajouterai quand même la valeur y :
velocity = 3,0
En outre :
* Il serait plus logique qe le projpriority soit en adéquation avec le projhits.
* Vu que ton projectile fait plusieurs coups, ce paramètre me semble indispensable :
Citation: | projmisstime = miss_time (entier)
Si le projectile fait des coups multiples, indique le nombre minimum de ticks qui doivent s'écouler entre les coups. 0 par défaut, mais la plupart du temps, vous aurez besoin d'une valeur différente de 0. |
Avec une valeur différente de 0, donc.
* Dans le hitflag, faudra que tu m'expliques à quoi correspond le "P".
* Je crois que je te l'avais déjà dit :
Citation: | sparkxy = 500,500 |
Ca place inutilement ton spark à l'extérieur de l'écran. Si tu ne veux pas de spark, mais un paramètre "sparkno = -1".
EDIT : Par rapport aux shots :
* pour le 1) (où l'adversaire n'est pas touché) : ça se produit parce que le perso se trouve entre le "width" de ton perso et la Clsn1 de ton projectile. Il ne peut donc pas être touché (fais un Ctrl+C deux fois dans Mugen pour afficher les Clsn, ça sera plus parlant).
* Pour le 2) et 3), c'est le même problème, à savoir que ton width n'est pas assez grand.
Pour résoudre ça, tu dois utiliser un sctrl Width (paramètre value = 0,N ; où N correspond à la valeur voulue) pour agrandir la barre de width de ton perso. La conséquence, c'est que si P2 est collé à toi, il va être repoussé, pour arriver au placement que tu veux par rapport à ton projectile. Pour trouver la bonne valeur de N, faut faire des essais, ou voir le nombre de pixels nécessaires en activant les Clsn et en prenant un screenshot, puis en détaillant l'image.
Mike Werewolf.
|
|
| |
| | | |
tombston
tombston
Créateur/Créatrice Mugen
Inscrit le: 14 Déc 2005 |
Messages: 303Karma: 2 plus / moins
|
Localisation: |
|
|
Citation: | projheightbound = lowbound, highbound (entier)
projedgebound = value (entier) |
j'ai mis -1000 et 1000 mais rien ne change
Citation: | * Dans le hitflag, faudra que tu m'expliques à quoi correspond le "P". |
desoler c une erreur
merci de m'avoire explique mais il reste quelque chose que je sais pas coment fair....c le sctrl Width
voici mon code
Code: | [StateDef 2000]
type = S
movetype= A
physics = S
juggle = 1
velset = 0,0
ctrl = 0
anim = 2000
poweradd = 20
[State 2000, 1]
type = Projectile
trigger1 = AnimElem = 9
projanim = 2005
projhitanim = 2005
projpriority = 3
projheightbound = 0, 0
projedgebound = -10
projscreenbound = -10
projshadow = -1
offset = -20,0
velocity = 0.1
projhits =2
attr = S, SP
damage = 100
animtype = up
hitflag = MAFDP
guardflag = MA
pausetime = 5,5
hitsound = 5,2
sparkxy = 500,500
guardsound = S6,0
ground.type = trip
ground.slidetime = 25
ground.hittime = 25
ground.velocity = -4,-3
air.animtype = Back
air.velocity = -4,-6
air.juggle = 3
air.fall = 1
down.velocity = 0
down.hittime = 30
down.bounce = 0
[State 2000, end]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1 |
si j'ai bien compris je fais ca
Code: | [StateDef 2000]
type = S
movetype= A
physics = S
juggle = 1
velset = 0,0
ctrl = 0
anim = 2000
poweradd = 20
[State 2000, 1]
type = Projectile
trigger1 = AnimElem = 9
projanim = 2005
projhitanim = 2005
projpriority = 3
projheightbound = 0, 0
projedgebound = -10
projscreenbound = -10
projshadow = -1
offset = -20,0
velocity = 0.1
projhits =2
attr = S, SP
damage = 100
animtype = up
hitflag = MAFDP
guardflag = MA
pausetime = 5,5
hitsound = 5,2
sparkxy = 500,500
guardsound = S6,0
ground.type = trip
ground.slidetime = 25
ground.hittime = 25
ground.velocity = -4,-3
air.animtype = Back
air.velocity = -4,-6
air.juggle = 3
air.fall = 1
down.velocity = 0
down.hittime = 30
down.bounce = 0
[State 0, Width]
type = Width
trigger1 = animelem = 3
edge = 0,0
player = 40,50
;ignorehitpause = 0
;persistent = 1
[State 2000, end]
type = ChangeState
trigger1 = AnimTime = 0
value = 0
ctrl = 1 |
car j'ai jamais utiliser ce sctrl....d'un autres cas j'ai ajoute des clsn2 pour mon anim et la le p2 quand il reste coller a moi il sera touché
et encore une question
robet n'as qu'un seul hado alors j'ai pris le hado du robert 95 pour hadoken_y et j'ai cree une animation (melange de sprite) pour le hadoken_z......... dans cette animation robert lance un hado avec son pied (jore il le laisse tomber puis il le tirs)mais il me manque un animation du toucher entre le personnage (p1) et la boule de feux qu'il lance
j'ai essye de metre sparkno mais ca marche pas et j'ai essye de mettre un make dust mais ca il cree une poussiere et pas une etaincelle alors si c possible avec les code sino je vais refaire mon animation
merci
|
|
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Citation: | j'ai mis -1000 et 1000 mais rien ne change |
Tu as aussi fait les autres corrections que j'ai indiqué ?
Citation: | si j'ai bien compris je fais ca |
Non. Y a une doc, faut s'en servir. En plus, j'ai un peu expliquer ce qu'il fallait faire.
Citation: | Change la taille de la largeur du joueur pour 1 tick. |
Il ne faut donc pas le déclencher une seule fois, mais à chaque tick, sur toute la durée voulue.
En outre, ton code devrait plutôt ressembler à ça :
Code: | [State 2000]
type = Width
trigger1 = AnimElem = 3, > 0 ; pour déclencher à partir du 3ème élément...
trigger1 = AnimElem = 10, < 0 ; ... jusqu'à la fin du 9ème (s'il y a bien 10 éléments)
value = 0,20 ; pour agrandir la barre de width vers l'avant de 20 pixels |
Je te renvoie également au tuto de Gouki, sur la partie 3, sur le deuxième HP en stand.
Pour ton anim de "toucher" :
* le sparkno n'est valable que pour un hitdef
* le makedust, comme son nom l'indique (make = faire, dust = poussière) crée de la poussière
Pour ce que tu veux faire, il te faut un Explod, tout simplement, pour jouer l'anim voulue. Et si tu veux jouer une anim depuis le fightfx.air, il faut mettre un F devant le n° d'anim ("anim = F5" par exemple).
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
Dark Saviour
Site Admin
Inscrit le: 29 Déc 2004 |
Messages: 47Karma: 4 plus / moins
|
Localisation: |
|
|
Tout dépend de ce que tu veux faire. Si on reprend la logique des anciens KOF, les 2 parties du coup seront jouées dès qu'il y a contact, c'est-à-dire quand le coup de P1 entre en contact avec P2, qu'il soit en garde ou non.
D'après le descriptif que tu donnes, la deuxième partie du coup ne doit être jouée que si le premier touche. Avant de te donner une solution, je voudrais être certain que je ne me trompe pas, peux-tu confirmer?
|
|
| |
| | | |
| |
| | | |
Dark Saviour
Site Admin
Inscrit le: 29 Déc 2004 |
Messages: 47Karma: 4 plus / moins
|
Localisation: |
|
|
En effet, je suis un fan de KOF depuis des années
Tu fais donc la distinction entre les 3 cas. Voici une solution toute simple qui utilise les Move* et le p1stateno.
Le p1stateno est un paramètre facultatif du hitdef qui permet de spécifier le numéro de state dans lequel P1 doit se rendre si le coup du hitdef a touché son adversaire (=> MoveHit = 1, MoveContact = 1 et MoveGuarded = 0). Cela implique qu'en cas de hit, tout le code qui se situe en dessous de ton HitDef ne sera pas joué puisque P1 changera immédiatement de State pour aller à celui que tu as désigné avec p1stateno.
Ce qui nous donne donc la structure suivante:
Citation: | [Statedef XXX, Première partie]
...
[State XXX, Premier Coup]
type = HitDef
...
p1stateno = YYY |
Où XXX est le State de la première partie du coup et YYY est le State de la deuxième partie du coup à jouer en cas de succès du premier. Il ne te reste plus qu'à faire la différence entre un coup barré et un coup dans le vide.
Citation: | [State XXX, Coup barré]
type = ChangeState
trigger1 = MoveGuarded
value = ZZZ |
Où ZZZ est le numéro du state à jouer si le coup est barré par P2. Et enfin, il ne te reste plus qu'à écrire le code de détection de coup dans le vide.
Citation: | [State XXX, Coup dans le vide]
type = ChangeState
trigger1 = !MoveContact
value = III |
Où III est le numéro du State à jouer si le coup a été fait dans le vide.
Si jamais tu décides que le State à jouer est le même quand le coup est barré ou quand il est fait dans le vide, tu remplaces les 2 dernières partie de code que je t'ai données par
Citation: | [State XXX, Coup raté]
type = ChangeState
trigger1 = 1
value = JJJ |
Où JJJ est le numéro de State à jouer si le coup ne touche pas P2.
En ce qui concerne le système de dizzy, celui-ci n'est pas du tout géré par Mugen, il faut le coder entièrement soi-même. Il me semble que Mike avait expliqué comment y arriver, si je retrouve ca, je te fais signe
|
|
| |
| | | |
| |
| | | |
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Ca dépend de ce que tu veux faire. Si c'est juste avoir une anim de dizzy, il suffit de créer l'anim 5300. Si en revanche tu veux avoir un "mode dizzy" (que ton perso tombe KO après avoir encaissé plusieurs coups, par exemple), là, la var est inévitable (elle servira à stocker l'information voulu pour déclencher le dizzy : nombre de coups reçus, temps passé en état "Hit", etc.).
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Il faut utiliser les states -2. Mettons que tu utilises la var(0) pour stocker cette info (nombre de hits reçus) et que tu déclenches le dizzy au bout de 10 coups.
Code: | [State -2]
type = VarAdd
trigger1 = StateNo = [5000,5999] ; dans un state de "hit"
trigger1 = StateNo != 5300 ; autre que le state de dizzy
trigger1 = Time = 0 ; au tout début du state
var(0) = 1 ; la var augmente de 1
[State -2]
type = ChangeState
trigger1 = var(0) >= 10
value = 5300 |
Le VarAdd va ajouter 1 à ta var à chaque fois que tu encaisses un coup. On suppose qu'un coup est reçu à chaque fois que tu te trouves sur le premier tick d'un state de "hit".
Il faudra également écrire le state 5300 (car il n'existe pas) en incluant une réinitialisation de la variable :
Code: | [State 5300, ResetDizzyVar]
type = VarSet
trigger1 = Time = 0
trigger1 = var(0) >= 10
var(0) = 0 |
Le 2ème trigger a pour but de ne pas réinitialiser la var si le perso ne se retrouve en dizzy à cause du nombre de coups reçus.
Ceci n'est qu'une ébauche, il faudrait l'affiner, pour que, par exemple, si on reste un certain temps sans prendre de coup, la valeur de la var se réduise, avec par exemple :
Code: | [State -2]
type = VarAdd
trigger1 = GameTime%300 = 0
var(0) = -1 |
Ceci fera que toutes les 5 secondes de jeu, la var se réduit de 1. Ca oblige l'adversaire qui veut te mettre KO à te porter 10 coups en moins de 5 secondes (ou 11 en moins de 10, 12 en moins de 15, etc.).
Mike Werewolf.
|
|
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Fais voir le state du \"saut\" en question. Est-ce que c'est tout le jeu qui est ralenti, ou juste l'anim elle-même ?
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Citation: | value = 181||182||183 |
Non, ça ne marchera pas. En fait, c'est une erreur assez classique quand on débute (je l'ai faite aussi, rassure-toi ! ). Il ne faut pas voir le || comme un "OU" dans le sens "c'est ça OU ça", mais comme un opérateur, exactement comme +, -, x, etc.
Dès lors que tu as un opérateur, tu as un résultat. Donc 181 || 182 || 183 est une opération qui retourne un résultat, et ce résultat sera la valeur attribuée au paramètre "value".
Dans le cas de 181 || 182 || 183, Mugen retournera 1. Tu as donc un ChangeState vers le state 1, qui a priori n'existe pas, donc tu restes dans le state en cours.
Pour rappel : x || y =
* 0 si x ET y valent tous les deux 0,
* 1 si x OU y est différent de 0
* 1 si x ET y sont tous les deux différents de 0.
Pour ce que tu veux faire :
Code: | [State 180]
type = ChangeState
trigger1 = 1
value = 181+(random>500)+(random>500) |
Par exemple (random est évalué à chaque fois qu'on l'appelle, donc le premier random sera différent du second).
Pour le reste :
Citation: | alors le mem son sera joué pour tout les state |
C'est ce que j'avais dit ! Pour avoir un son différent pour chaque state, il te faut un PlaySnd dans chaque state de winpose.
Citation: | fair un trigger pour fair que une anim sois souvant joué par a pore a l'autre |
Tu veux dire, faire en sorte qu'une winpose revienne plus souvent que les autres ? Oui, c'est possible, il suffit de jouer sur le trigger "random". Sachant que celui-ci retourne un nombre entre 0 et 999, un trigger qui se déclenche sur "random > 100" se déclenchera statistiquement plus souvent qu'un trigger "random > 500". Mais ça oblige à avoir 2 ChangeState (1 pour la winpose fréquente, 1 ^pour les autres).
Dès lors, on peut envisager ceci :
Code: | [State 180] ; winpose fréquente
type = ChangeState
trigger1 = Time = 0
trigger1 = random > 100 ; se déclenchera 9 fois sur 10
value = 181
[State 180] ; autres winposes
type = ChangeState
trigger1 = Time = 0
value = 182+(random>500) |
Dans le second sctrl, on ne met pas de trigger basé sur random, car Mugen ne lira ce second sctrl que s'il n'a pas déclenché le 1er. En effet, s'il déclenche le premier ChangeState, le perso n'est plus dans le state 180, et les sctrl suivants sont donc ignorés. Donc si le second sctrl est lu, c'est que le premier n'a pas été déclenché, et donc, qu'on est dans le cas random < 100.
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
| |
| | | |
Anji
Inscrit le: 11 Oct 2006 |
Messages: 101Karma: 5 plus / moins
|
Localisation: |
|
|
Tu pourrais décrire ces "super cancels" et "dream cancels" dont tu parles ?
|
|
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Anji a écrit: | ne peut-on pas envisager intervenir dans le .cns de l'attaque annulée, en ajoutant un sctrl de type ChangeState avec, entre autres, un trigger concernant la commande entrée par le joueur ? |
Si, c'est faisable, sauf que c'est plus lourd. Pour un hyper, qui ne peut vraisemblablement être annulé que par un nombre restreint de commande, pas de souci, mais pour un coup basique ou même spécial, on risque d'avoir une liste de triggers à rallonge.
La méthode CNS permet de concevoir le cancel en analysant, pour un coup, quelles sont les attaques qui peuvent annuler ce coup.
La méthode CMD permet de concevoir le cancel en analysant, pour un coup, quelles sont les attaques que ce coup peut annuler.
L'autre avantage du CMD, c'est qu'on peut "grouper". Par exemple, si mes punchs sont les states 200, 210, et 220, sans intermédiaire, alors je peux utiliser :
Code: | trigger1 = stateno = [200,220] |
En revanche, pour le CNS, comme on se base sur la réalisation de la commande, on doit entrer les commandes une à une, et donc pour annuler un coup avec n'importe quel punch, ça donnera :
Code: | trigger1 = command = "x"
trigger2 = command = "y"
trigger3 = command = "z" |
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
Anji
Inscrit le: 11 Oct 2006 |
Messages: 101Karma: 5 plus / moins
|
Localisation: |
|
|
Concernant le Dream Cancel :
Tombston a écrit: | cette methode ne marche pas [...] car il n'y a pas de contact | Il faut adapter les triggers en conséquence. Commence par supprimer le MoveContact et refais le test : ton personnage devrait pourvoir changer de StateDef sans problème.
Un peu plus loin, Tombston a écrit: | P2 reste dans une seul anim et ca bloque. | Il faudrait peut-être modifier le Sctrl "ChangeState" du StateDef dans lequel P2 se trouve afin de lui dire que si P1 est en train de faire un Dream Cancel, alors ce State doit s'arrêter, non ?
|
|
| |
| | | |
| |
| | | |
| |
| | | |
| |
| | | |
Anji
Inscrit le: 11 Oct 2006 |
Messages: 101Karma: 5 plus / moins
|
Localisation: |
|
|
Mike a écrit: | en général, avec des triggers qui détectent si P2 touche le sol | Oui, c'est pour cela que je voulais jeter un coup d'oeil aux triggers de ChangeState/SelfState car il n'est pas dit que le State dans lequel P2 est coincé correspond à une chute : pour certaines projections, P1 soulève P2 en l'attrapant par le cou et le frappe, donc P2 est figé à une hauteur définie et ne tombe pas.
Un peu plus loin, Mike a écrit: | Renvoyer P2 dans son CNS en se basant sur le StateNo de P1 est risqué | Et si on fonctionne par exception ?
Exemple : P2 est envoyé dans un Custom State quand P1 est dans le State 2000 donc on pourrait dire que si, par le plus grand des hasards, P1 n'est plus dans le State 2000 (imaginons qu'il se fasse frapper par le coéquipier de P2), alors P2 retourne à ses propres States, non ?
|
|
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Anji a écrit: | Exemple : P2 est envoyé dans un Custom State quand P1 est dans le State 2000 donc on pourrait dire que si, par le plus grand des hasards, P1 n'est plus dans le State 2000 (imaginons qu'il se fasse frapper par le coéquipier de P2), alors P2 retourne à ses propres States, non ? |
Le plus simple, dans ce cas, c'est de rendre P1 intouchable pendant la durée de sa chope. (pas de Clsn ou via un NotHitBy). C'est ce qu'on fait les 3/4 du temps. Dès lors, P1 ne peut plus "perdre le contrôle" de P2, et ça évite toute mauvaise surprise.
Sinon, on peut envisager d'autres solutions : déclencher un selfstate dans le custom state avec divers triggers, style : "Enemy, MoveType = H" ou "Time = X", basé sur la durée que devrait normalement durer la chope.
L'idéal, c'est carrément la solution dispo sous Linux, à savoir utiliser le nouveau trigger !gethitvar(isbound), mais il est inutilisable sous DOS et fera même planter le perso.
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
Anji
Inscrit le: 11 Oct 2006 |
Messages: 101Karma: 5 plus / moins
|
Localisation: |
|
|
Tu pourrais copier le Custom State dans lequel P2 se trouve histoire de voir à quoi il ressemble actuellement ?
tombston a écrit: | il n'y a pas une astuce pour que P2 change de state en même temps que P1 ? | Pourquoi pas : Code: | triggerX = enemy,command = "[nom de la commande de l'hyper]" |
|
|
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Citation: | il ya pas une astuce avec des variable jore pour que p2 change ded state en meme temps que p1 |
Surtout pas de variables, malheureux !!! Si tu utilises une var dans un custom state de P2, ce ne sont pas tes variables que tu vas modifier, mais celles de P2.
Anji > Ton ChangeState devrait marcher dans 90% des cas, mais si P2 affronte une équipe, il y a le risque que Mugen s'emmêle un peu les pinceaux entre P1 et son partenaire, lorsqu'il devra interpréter la redirection "ennemy".
Ce que je pense être le plus sûr, ce serait :
* Utiliser un opérateur d'assignation pour régler une var dans le state -1 du CMD, au moment où on réalise le Dream Cancel.
* Utiliser cette var dans un state -2 avec un sctrl TargetState.
Style :
* CMD :
Code: | [State -1, DreamCancel]
type = ChangeState
trigger1 = command = "[commande de l'hyper]"
{tes autres triggers}
trigger1 = var(0):=1
value = {nouveau state} |
Le dernier trigger fait que si tous les triggers précédents sont remplis, var(0) passera à 1 (un peu comme si y avait un VarSet var(0) = 1 inclus dans le ChangeState). Donc si var(0) vaut 1, c'est que tu viens de réussir ton Dream Cancel ; on peut donc utiliser cette var pour changer le state de P2, via le CNS
* CNS :
Code: | [State -2, BasculeP2]
type = TargetState
trigger1 = var(0)
trigger1 = target, stateno = {state n°1 de P2}
value = {state n°2 de P2}
[State -2, EndVar]
type = VarSet
triggerall = var(0)
trigger1 = !NumTarget
trigger2 = Target, stateno != {state n°1}
var(0) = 0 |
Le premier state -2 envoie P2 dans le nouveau state, a priori en même temps que P1 change de state grâce au Dream Cancel (peut-être à 1 tick près), et le second state -2 remet la var(0) à 0 pour une prochaine utilisation.
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Tu parles du système de saut SNK, où si on appuie une fois rapidement sur "haut", le perso fait un petit saut, et si on laisse appuyé plus longtemps, il va plus haut ?
Si oui, voici ce que je ferai :
* Je coderai le "mini saut" dans le state 40, avec un ChangeState dans ce state 40 si "up" est maintenu, qui mènerait au state 60.
* Coder le saut normal en state 60.
Ou alors, y a peut-être moyen de coder tout dans le state 40 en faisant varier la vitesse du saut (ou la force de la gravité, au choix) selon le temps durant lequel on garde la direction "haut"...
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
Vil1
Créateur/Créatrice Mugen
Inscrit le: 15 Mar 2005 |
Messages: 143Karma: 10 plus / moins
|
Localisation: |
|
|
Une possibilité très simple est de modifier légèrement un des blocs du state 40, en l'occurence le bloc 40, 4:
Code: | [State 40, 4]
type = VelSet
trigger1 = AnimTime = 0
x = ifelse(sysvar(1)=0, const(velocity.jump.neu.x), ifelse(sysvar(1)=1, const(velocity.jump.fwd.x), const(velocity.jump.back.x)))
y = const(velocity.jump.y) |
Si tu veux détecter de quelle manière tu as a appuyé sur up, tu peux utiliser la commande "holdup". Ce qui donne:
Code: | [State 40, 4]
type = VelSet
trigger1 = AnimTime = 0
x = ifelse(sysvar(1)=0, const(velocity.jump.neu.x), ifelse(sysvar(1)=1, const(velocity.jump.fwd.x), const(velocity.jump.back.x)))
y = ifelse(command != "holdup", nouvelle_valeur ,const(velocity.jump.y)) |
Il y a plusieurs méthodes possibles mais celle-ci est vraiment facile à utiliser.
|
|
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Pour toutes les directions, il y a une commande de "direction maintenue". Pour haut, c'est "holdup".
Tu peux croiser ça avec une var qui te servira de timer pour savoir pendant combien de temps "holdup" est réalisé (en ajoutant 1 à la var tant que command = "holdup" est vrai), pour déterminer la hauteur du saut à appliquer.
Mike Werewolf.
|
|
| |
| | | |
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
Citation: | merci mike mais j'ai deja resolu le probleme avec la command hold up (tu as dis dans un de tes messaeges quon doit economisé les variable lol) |
Economiser quand c'est possible, oui. Mais quand ça ne l'est pas, faut bien utiliser une var.
En l'occurrence, la commande "holdup" te permet de savoir si on maintient la flèche "haut" appuyée, mais pas pendant combien de temps elle reste appuyée. Une var te permettrait de le savoir, et de régler la hauteur du saut en fonction de ce temps (donc pas juste "petit saut" ou "grand saut", mais avec des niveaux intermédiaires).
Citation: | je cherche a savoir comment en fais pour ne pas initialisation une variable ..quesque je dois changé dans le state 5900 |
Ca dépend de ce que tu veux. En fait, il y a deux niveaux de contrôle : entre les rounds, et entre les matchs.
Entre les matchs, c'est effectivement géré par le state 5900. Si tu ne veux pas que les vars se réinitialisent entre les matchs, il suffit de virer cette partie :
Code: | [State 5900, 1] ;Clear all int variables
type = VarRangeSet
trigger1 = roundno = 1
value = 0
[State 5900, 2] ;Clear all float variables
type = VarRangeSet
trigger1 = roundno = 1
fvalue = 0 |
Mais si tu fais juste cette modif, ça ne suffit pas, car un nouveau match, c'est aussi un nouveau round, et donc le contrôle au niveau des rounds s'applique, ce qui remettra tes vars à 0.
Pour maintenir les valeurs entre les rounds, ça se passe au niveau du CNS, dans les constantes, dans [Data], il y a deux paramètres : IntPersistIndex et FloatPersistIndex. Commençons par IntPersistIndex, qui se rapportent aux variables entières (var) :
* Tu as 60 variables, allant de var(0) à var(59),
* IntPersistIndex vaut en général 60.
La valeur du IntPersistIndex indique que la variable ayant ce numéro ou un numéro supérieur ne sera pas réinitialisée entre les rounds. Autrement dit, toutes les variables dont le numéro est inférieur à cette valeur seront réinitialisées à 0. Ou encore : si IntPersistIndex vaut X, alors les X premières variables seront réinitialisées. Donc si IntPersistIndex vaut 60, toutes les variables sont réinitialisées, puisque :
* Aucune variable n'a un numéro égal ou supérieur à 60 (var(60) n'existe pas),
OU, vu autrement :
* Toutes les variables ont un numéro inférieur à 60 (var(59) étant la dernière variable),
OU, encore vu autrement :
* Les 60 premières variables (c'est à dire toutes, puisqu'il y en a 60) sont réinitialisées.
Conclusion sur la gestion des variables :
* Pour les variables classiques qu'on garde uniquement sur un round, on utilisera les variables à partir de 0 (var(0), var(1), etc.).
* Pour les variables utilisées sur plusieurs rounds, on partira avec les dernières variables, en remontant : var(59) puis var(58), etc. et on réduira la valeur de IntPersistIndex en conséquence (on le mettra à 59 pour conserver la valeur de la var(59), à 58 pour conserver la valeur des var(58) et var(59), à 57 pour conserver les valeurs de var(57) à var(59), etc.).
Le FloatPersistIndex fonctionne de la même façon, mais pour les variables flottantes (fvar). Il y en a 40, allant de fvar(0) à fvar(39).
Mike Werewolf.
|
|
| |
| | | |
Mike Werewolf
Loup-garou
Site Admin
Inscrit le: 07 Oct 2004 |
Messages: 1676Karma: 52 plus / moins
|
Localisation: |
|
|
La solution Clsn est la seule envisageable.
Elle ne fonctionnera pas avec les persos qui désactivent leurs Clsn, évidemment (donc Gouki sur le Maku Shihai par exemple, et tout déplacement en téléportation).
Mike Werewolf.
|
|
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
|
|
|
|